2012-06-28 48 views
7

Uso Epplus para leer archivos xlsx de la transmisión.Cómo convierte el archivo de Excel a la tabla de datos C#?

Tiene un error, no puede leer algunas columnas en mi libro de trabajo. ¿Cómo se pueden leer los archivos xlsx de la transmisión a la tabla de datos sin epplus?

mi código antiguo:

public static DataSet ReadExcelFile(Stream stream) 
    { 
     try 
     { 
      //2. Reading from a OpenXml Excel file (2007 format; *.xlsx) 
      IExcelDataReader excelReader =  
          ExcelReaderFactory.CreateOpenXmlReader(stream); 
      //... 
      DataSet result = excelReader.AsDataSet(); 

      return result; 

     } 
     catch (Exception x) 
     { 
      throw x; 
     } 
    } 

yo no informar de ello, pero he intentado tanto combinations.If hay columnas vacías en la hoja de trabajo, epplus lector No se puede leer correctamente los valores de las columnas.

Respuesta

13

"Tiene un insecto, él no puede leer algunas columnas en mi libro"

Puede describir el fallo, tendrá que reported o es ya conocido, ¿qué versión está usando ?

Aquí hay un enfoque simple para cargar un archivo de Excel en un DataTable con EPPlus.

public static DataTable getDataTableFromExcel(string path) 
{ 
    using (var pck = new OfficeOpenXml.ExcelPackage()) 
    { 
     using (var stream = File.OpenRead(path)) 
     { 
      pck.Load(stream); 
     } 
     var ws = pck.Workbook.Worksheets.First(); 
     DataTable tbl = new DataTable(); 
     bool hasHeader = true; // adjust it accordingly(i've mentioned that this is a simple approach) 
     foreach (var firstRowCell in ws.Cells[1, 1, 1, ws.Dimension.End.Column]) 
     { 
      tbl.Columns.Add(hasHeader ? firstRowCell.Text : string.Format("Column {0}", firstRowCell.Start.Column)); 
     } 
     var startRow = hasHeader ? 2 : 1; 
     for (var rowNum = startRow; rowNum <= ws.Dimension.End.Row; rowNum++) 
     { 
      var wsRow = ws.Cells[rowNum, 1, rowNum, ws.Dimension.End.Column]; 
      var row = tbl.NewRow(); 
      foreach (var cell in wsRow) 
      { 
       row[cell.Start.Column - 1] = cell.Text; 
      } 
      tbl.Rows.Add(row); 
     } 
     return tbl; 
    } 
} 
+0

obtuve el objeto nulo referance en var ws = pck.Workbook.Worksheets ["Hoja de trabajo1 "]; alguna idea ? – Mennan

+0

@Mennan: Pruebe 'var ws = pck.Workbook.Worksheets.First();' en su lugar (editó mi respuesta en consecuencia). –

+0

Uso Epplus versión 3.0.0.2, y pck.Workbook.Worksheets no tiene método First() lo siento, también probé Worksheets [0], todavía es nulo. No entiendo – Mennan

0

Esto ya pasó, sin embargo, todavía podría ayudar a alguien. Aparentemente, algunas columnas de mi hoja de cálculo se combinaron, por lo que si se combinan las columnas A y B solo reconoce la columna A como la que tiene el valor, y devuelve la columna B como vacía cuando invoco el valor de esa celda en particular (SEGUNDO). Para superar esto, asegúrese de saber qué celdas están fusionadas y luego tomar solo la primera y considerar el resto de las celdas combinadas como nulas

Cuestiones relacionadas