Forums Neueste Beiträge
 

Excel-Datei per OpenXML effektiv auslesen

08/01/2010 - 13:54 von Tobias Burger | Report spam
Hallo,

ich würde gerne eine Excel im docx-Format auslesen. Dafür müsste ich
bestimmte Zellen auslesen.
Mit der COM-API wird dies ja über das Range-Objekt gemacht.
Da ich das Ganze auch ohne installiertem Office auslesen möchte hàtte ich es
nun gerne mittels OpenXML SDK 2.0 realisiert.
Was ich gefunden habe ist die Möglichkeit für ein Worksheet alle Descendants
(alle untergeordneten) Zellen auszulesen und diese dann per LINQ abzufragen:

using (SpreadsheetDocument xlPackage = SpreadsheetDocument.Open(inputPath,
false))
{
WorkbookPart workbook = xlPackage.WorkbookPart;
var worksheetPart = workbook.WorksheetParts.First();
var worksheet = worksheetPart.Worksheet;
string cellValue = "B2"
Cell cell = worksheet.Descendants<Cell>().SingleOrDefault(c
=> c.CellReference == cellValue);
// DoSomething(cell);
}

Das Ganze klappt so schon ganz ordentlich. Nur habe ich gemerkt, dass dieses
Verfahren bei einer umfangreichen Excel-Datei und einigen Iterationen recht
viel Zeit in Anspruch nehmen kann (was ja auch verstàndlich ist, da ja
jedesmal ein Lookup auf alle Cell-Elemente durchgeführt werden muss).
Nun würde ich gerne wissen, ob es für das Auslesen von Zellen Best-Practices
gibt.

Meine naive Lösung ist es die Descendants in einer Liste zu cachen und diese
dann auszulesen, was allerdings einen hohen Speicherverbrauch nach sich
ziehen kann:

string[] cellValues = { "B2", "C4", "B120", ... }
List<Cell> cellCache = worksheet.Descendants<Cell>().ToList();
foreach (string cellValue in cellValues)
{
Cell cell = cellCache .SingleOrDefault(c => c.CellReference ==
cellValue);
}

Gibt es dafür eine effektivere Lösung?
Danke
Tobias
 

Lesen sie die antworten

#1 FrankDzaebel
08/01/2010 - 15:16 | Warnen spam
Hallo Tobias,

ich würde gerne eine Excel im docx-Format auslesen.
[...] Gibt es dafür eine effektivere Lösung?



Prüfe mal, ob das für Dich eine Möglichkeit ist:

[ExcelPackage: Office Open XML Format file creation]
http://www.codeplex.com/ExcelPackage

bzw.:

[ExcelPackage: Office Open XML Format file creation]
http://excelpackage.codeplex.com/wi...preadsheet


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen