Façon optimale de lire un fichier Excel (.xls/.xlsx)
je sais qu'il y a différentes façons de lire un fichier Excel:
-
Iterop
-
Oledb
-
Open Xml SDK
la compatibilité n'est pas une question car le programme sera exécuté dans un environnement contrôlé.
Mon Exigence:
Lire un fichier à un DataTable
/ CUstom Entitie
s (Je ne sais pas comment dynamique propriétés/champs d'un objet[noms de colonne permettra d'être bref dans un fichier Excel])
utiliser DataTable/Custom Entities
pour effectuer certaines opérations en utilisant ses données.
mise à jour DataTable
avec les résultats des opérations
renvoie à excel file
.
ce qui serait plus simple.
également si possible me conseiller sur les entités personnalisées (ajout de propriétés / champs à un objet dynamiquement)
4 réponses
regardez Linq-To-Excel . Il est assez soignée.
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;
il permet également l'accès en ligne fortement dactylographié aussi.
en utilisant la requête OLE, c'est assez simple (par exemple sheetName est 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;\"");
}
pour les nouvelles versions Excel:
return new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filename + ";Extended Properties=Excel 12.0;");
vous pouvez également utiliser Excel Data Reader un projet open source sur CodePlex. Cela fonctionne très bien pour exporter des données à partir de feuilles Excel.
le code d'échantillon indiqué sur le lien spécifié:
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();
essayez d'utiliser cette voie libre pour ceci, 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 vous pouvez le restreindre à just (Open Office XML format) *.XLSX files, alors probablement la bibliothèque la plus populaire serait EPPLus .
Bonus est, il n'y a pas d'autres dépendances. Il suffit d'installer en utilisant nuget:
Install-Package EPPlus