c# excel oledb openxml-sdk excel-interop

c# - Forma óptima de leer un archivo de Excel(.xls/.xlsx)



oledb openxml-sdk (4)

Eche un vistazo a Linq-to-Excel . Es bastante limpio.

var book = new LinqToExcel.ExcelQueryFactory(@"File.xlsx"); var query = from row in book.Worksheet("Stock Entry") let item = new { Code = row["Code"].Cast<string>(), Supplier = row["Supplier"].Cast<string>(), Ref = row["Ref"].Cast<string>(), } where item.Supplier == "Walmart" select item;

También permite el acceso a filas fuertemente tipadas.

Sé que hay diferentes formas de leer un archivo de Excel:

  • Iterop
  • Oledb
  • Open Xml SDK

La compatibilidad no es una pregunta porque el programa se ejecutará en un entorno controlado.

Mi requisito:
Lea un archivo en una CUstom Entitie DataTable / CUstom Entitie (no sé cómo hacer propiedades / campos dinámicos a un objeto [los nombres de las columnas variarán en un archivo Excel])

Use DataTable/Custom Entities para realizar algunas operaciones utilizando sus datos.

Actualizar DataTable con los resultados de las operaciones

Escríbela de nuevo al excel file .

Que sería más simple.

Además, si es posible, infórmenme sobre Entidades personalizadas (agregando propiedades / campos a un objeto dinámicamente)


Intenta usar esta forma gratuita para esto, https://freenetexcel.codeplex.com

Workbook workbook = new Workbook(); workbook.LoadFromFile(@"../../parts.xls",ExcelVersion.Version97to2003); //Initialize worksheet Worksheet sheet = workbook.Worksheets[0]; DataTable dataTable = sheet.ExportDataTable();


Si puede restringirlo a solo (formato XML de Open Office) * .xlsx, probablemente la biblioteca más popular sea EPPLus .

La ventaja es que no hay otras dependencias. Simplemente instale usando nuget:

Install-Package EPPlus


Usando OLE Query, es bastante simple (por ejemplo, sheetName es Sheet1 $):

DataTable LoadWorksheetInDataTable(string fileName, string sheetName) { DataTable sheetData = new DataTable(); using (OleDbConnection conn = this.returnConnection(fileName)) { conn.Open(); // retrieve the data using data adapter OleDbDataAdapter sheetAdapter = new OleDbDataAdapter("select * from [" + sheetName + "]", conn); sheetAdapter.Fill(sheetData); } return sheetData; } private OleDbConnection returnConnection(string fileName) { return new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + fileName + "; Jet OLEDB:Engine Type=5;Extended Properties=/"Excel 8.0;/""); }

Para versiones de Excel más recientes:

return new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filename + ";Extended Properties=Excel 12.0;");

También puede usar Excel Data Reader como un proyecto de código abierto en CodePlex. Funciona muy bien para exportar datos de hojas de Excel.

El código de muestra proporcionado en el enlace especificado:

FileStream stream = File.Open(filePath, FileMode.Open, FileAccess.Read); //1. Reading from a binary Excel file (''97-2003 format; *.xls) IExcelDataReader excelReader = ExcelReaderFactory.CreateBinaryReader(stream); //... //2. Reading from a OpenXml Excel file (2007 format; *.xlsx) IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream); //... //3. DataSet - The result of each spreadsheet will be created in the result.Tables DataSet result = excelReader.AsDataSet(); //... //4. DataSet - Create column names from first row excelReader.IsFirstRowAsColumnNames = true; DataSet result = excelReader.AsDataSet(); //5. Data Reader methods while (excelReader.Read()) { //excelReader.GetInt32(0); } //6. Free resources (IExcelDataReader is IDisposable) excelReader.Close();

Referencia: ¿Cómo importo desde Excel a un DataSet usando Microsoft.Office.Interop.Excel?