Когда нужно прочитать данные из Excel файла
- modified:
- reading: 2 minutes
Вариантов работы с Excel файлами куча. Я сейчас говорю не о Open XML формате (2007 офис, формат xlsx), а о формате xls 2003/XP/2000 офисы.
Один из вариантов, это System.Runtime.InteropServices.Marshal.GetActiveObject, можно почитать, к примеру тут: Автоматизация запущенного экземпляра приложения Office с помощью Visual C# .NET.
Но идея в том, чтобы читать xls файлы, не устанавливая самого офиса. Для это есть замечательная библиотека Excel Reader, используем которую уже давно в нескольких проектах (лицензия GNU).
Пишет ее какой-то китаец. Написана она, честное слово, не очень. Благо есть исходники и некоторые моменты можно подправить, что собственно я раньше и делал. Но один раз прочитал все таки статью на codeproject этой библиотеки и обнаружил, что теперь это полноценный проект, размещенный на Google Code, откуда можно скачать последнюю версию. Говорю сразу, что лучше брать исходники из репозитория, а не последние выложенные, так как в последних выложенных downloads версии не последние (такая вот тавтология).
И самое приятное: раньше баги правил я сам, но взяв с Google Code последнюю версию, и найдя там очередной баг, просто сделал Issue 21, который автор поправил в тот же день под revision r42.В общем уж очень оперативная поддержка :) Знаю еще, что библиотека теперь позволяет не только читать, но и работать с Excel файлами, так же и создавать новые. Но сам не пробовал.
Работать с такой библиотекой достаточно просто (привыкаешь), но иногда просто убивают некоторые недоделки:
Workbook book = Workbook.Open(filePath);
foreach (Worksheet worksheet in book.Worksheets)
{
foreach (Pair<Pair<int, int>, Cell> cell in worksheet.Cells)
{
//Как получить значение в cell.Value (нету такого Property)? Зачем есть реализация GetEnumerator, а работать с ним в реальности не возможно...
}
}
Ссылки по теме Office 2007:
- Создание отчётов при помощи Open XML Format SDK
- Existing open source library that can read write OpenXML