Читать электронную таблицу Excel 2007/2010 с помощью API OpenXML действительно просто. Как-то даже проще, чем использовать OleDB, как мы всегда делали как быстрое и грязное решение. Более того, это не просто, а verbose , я думаю, что помещать весь код здесь не полезно, если его нужно комментировать и объяснять, поэтому я напишу просто резюме и сошлю хороший статья. Прочитайте эту статью на MSDN , в ней объясняется, как очень просто читать документы XLSX.
Чтобы подвести итог, вы сделаете это:
- Откройте
SpreadsheetDocument
с помощью SpreadsheetDocument.Open
.
- Получите необходимый
Sheet
запрос LINQ из WorkbookPart
документа.
- Получите (наконец-то!)
WorksheetPart
(нужный вам объект), используя идентификатор Sheet
.
В коде, разбор комментариев и обработка ошибок:
using (SpreadsheetDocument document = SpreadsheetDocument.Open(fileName, false))
{
Sheet sheet = document.WorkbookPart.Workbook
.Descendants<Sheet>()
.Where(s => s.Name == sheetName)
.FirstOrDefault();
WorksheetPart sheetPart =
(WorksheetPart)(document.WorkbookPart.GetPartById(theSheet.Id));
}
Теперь (но внутри использования!) Вам нужно просто прочитать значение ячейки:
Cell cell = sheetPart.Worksheet.Descendants<Cell>().
Where(c => c.CellReference == addressName).FirstOrDefault();
Если вам нужно перечислить строки (а их много), вы должны сначала получить ссылку на объект SheetData
:
SheetData sheetData = sheetPart.Worksheet.Elements<SheetData>().First();
Теперь вы можете запрашивать для всех строк и ячеек:
foreach (Row row in sheetData.Elements<Row>())
{
foreach (Cell cell in row.Elements<Cell>())
{
string text = cell.CellValue.Text;
// Do something with the cell value
}
}
Чтобы просто перечислить нормальную электронную таблицу, вы можете использовать Descendants<Row>()
объекта WorksheetPart
.
Если вам нужно больше ресурсов об OpenXML, взгляните на OpenXML Developer , он содержит много хороших руководств.