Надежная библиотека C# для синтаксического анализа Excel

Я ищу библиотеку синтаксического анализа ac#/.net excel, которая может работать с файлами, загруженными конечными пользователями, которые могут иметь причуды

В настоящее время мы используем ExcelDataReader , но у него есть серьезные недостатки при работе с файлами Excel из дикой природы.

Я ищу парсер excel, который может:

  1. Обрабатывать файлы в потоке памяти и анализировать их до сетевого типа
  2. Уметь обрабатывать 2000+ строк
  3. поддержка форматов даты 1900/1904 (ПК/Mac)
  4. Уметь хоть в какой-то мере без ошибок обрабатывать объединенные ячейки
  5. Уметь хоть в какой-то степени без ошибок обрабатывать поля формул
  6. Уметь хоть в какой-то степени без ошибок обрабатывать свернутые столбцы

Приятно иметь:

  1. Уметь открывать xls или другие форматы
  2. Иметь достойную производительность
  3. все еще активный проект

Было бы хорошо, если бы это был платный продукт, но в этом случае было бы сложно, если бы у него не было демоверсии.

Вы можете найти что-то полезное в этом старом вопросе Stack Overflow .

Ответы (2)

Вы можете использовать сам Excel. Он имеет встроенную очень богатую объектную модель, которую вы можете использовать через взаимодействие COM с .NET.

Однако есть 2 недостатка:

  • вам нужна лицензия Excel на сервере
  • Excel является однопоточным, поэтому вам нужно ставить загруженные файлы в очередь и обрабатывать их отдельным скриптом вне http-сервера.

Однако независимо от того, какую библиотеку вы выберете, вы все равно должны ставить в очередь загруженные файлы из соображений безопасности, поэтому второй недостаток на самом деле не является проблемой.

Преимущество заключается в том, что при использовании оригинального Excel у вас есть 100% совместимость с загруженными книгами.

Лучшая библиотека, которую использовала наша компания, — Closedxml.

Вы объявляете и инициализируете объект с помощью конструктора. Соберите свои данные, поместите их в свою таблицу данных и преобразуйте свою таблицу данных в Excel. Производительность довольно хорошая. Если вы используете пример с миллионом строк, я бы предпочел добавить новые листы, если Excel не перейдет к переполнению в ОЗУ. Лучше всего, это бесплатно, с открытым исходным кодом.

XLWorkbook wb = new XLWorkbook();
DataTable dt = GetDataTableOrWhatever();
wb.Worksheets.Add(dt,"WorksheetName");
Не могли бы вы уточнить особые требования, изложенные в вопросе? Почти любая библиотека может создать новую книгу и добавить рабочий лист. Как насчет времени данных 1904 года?