Импорт и экспорт Excel - Какая библиотека лучше всего подходит?[закрыто]

StackOverflow https://stackoverflow.com/questions/444522

Вопрос

В одном из наших ASP.NET приложений на C # мы берем определенный набор данных (SubSonic collection) и экспортируем его в Excel.Мы также хотим импортировать файлы Excel в определенном формате.Я ищу библиотеку, которую я мог бы использовать для этой цели.

Требования:

  • Файлы Excel 2007 (Поддерживает ли Excel 2003 более 64 тысяч строк?Мне нужно нечто большее, чем это.)
  • Не требует Excel на сервере
  • Берет типизированную коллекцию и, если может, пытается поместить числовые поля как числовые в Excel.
  • Хорошо работает с большими файлами (от 100 кб до 10 М) - достаточно быстро.
  • Не вылетает при экспорте идентификаторов GUID!
  • Не стоит бешеных денег (нет корпоративной библиотеки, подобной aspose).Бесплатная - это всегда здорово, но может быть и коммерческой библиотекой.

Какую библиотеку вы рекомендуете?Использовали ли вы его для обработки больших объемов данных?Есть ли другие решения?

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

Я имею в виду плоские CSV-файлы, но Excel - это требование заказчика.Я мог бы работать с CSV напрямую, если бы у меня был инструмент для преобразования в Excel и из Excel.Учитывая, что Excel 2007 - это формат файлов на основе xml (и заархивированный), я предполагаю, что такого рода библиотеку должно быть легко найти.Однако, что для меня важнее всего, так это ваши комментарии и мнения.


Редактировать:По иронии судьбы, на мой взгляд и после ответа, набравшего наибольшее количество голосов, лучшая библиотека импорта и экспорта Excel - это отсутствие экспорта вообще.Это относится не ко всем сценариям, но именно к моему.Файлы XLS поддерживают только 64 тысячи строк.XLSX поддерживает длину до 1 метра.Бесплатные библиотеки, которые я пробовал, отличаются низкой производительностью (одна секунда на загрузку одной строки при наличии 200 тысяч строк).Я не пробовал платные, так как чувствую, что они завышены из-за той ценности, которую они обеспечивают, когда все, что вам нужно, - это быстрый XLSX<-> Процедура преобразования CSV.

Это было полезно?

Решение

Я собираюсь приложить руку к созданию плоских CSV-файлов, хотя бы потому, что у вас самый большой контроль над кодом.Просто убедитесь, что вы читаете строки и обрабатываете их по одной за раз (чтение документа до конца и разделение съедят всю вашу память - то же самое с записью, потоковой передачей).

Да, пользователю придется сохранить файл в формате CSV в Excel, прежде чем вы сможете его обработать, но, возможно, это ограничение можно преодолеть путем обучения и предоставления четких инструкций на странице?

Наконец, при экспорте заказчику, если вы задаете тип mime в text / csv, Excel обычно сопоставляется с этим типом, поэтому пользователю он представляется как "файл Excel".

Другие советы

Я обнаружил, что Открытый XML SDK с момента моего первоначального ответа.Помимо прочего, он предоставляет строго типизированные классы для объектов электронных таблиц, и, по-видимому, с ним довольно легко работать.Я собираюсь использовать его для отчетов в одном из моих проектов.Увы, версия 2.0 должна быть выпущена не раньше конца 2009 или 2010 года.

новая версия ExcelPackage находится здесь http://EPPlus.codeplex.com

Я все еще борюсь с функцией экспорта в Excel, так как мое приложение должно экспортировать некоторые данные в excel-template 2007

этот проект кажется мне прекрасным, и разработчик очень чутко реагирует на ошибки и проблемы.

Я использовал Закрытый XML и это отлично работает!

ClosedXML упрощает разработчикам создание Excel 2007/2010 Файлы.Это обеспечивает хороший объектно-ориентированный способ манипулирования файлами (аналогично VBA) без проблем с XML-документами.Он может быть использован любым .СЕТЕВОЙ язык, такой как C # и Visual Basic (VB).

Устройство электронных таблиц для .NET читает и записывает CSV / XLS / XLSX и делает многое другое.

Вы можете посмотреть в режиме реального времени ASP.NET примеры с исходным кодом на C # и VB здесь и скачайте бесплатную пробную версию здесь.

Конечно, я думаю, что SpreadsheetGear - лучшая библиотека для импорта / экспорта книг Excel в ASP.NET - но я предвзят.Вы можете увидеть, что говорят некоторые из наших клиентов, на правой стороне эта страница.

Отказ от ответственности:Я владелец SpreadsheetGear LLC

NPOI для Excel 2003 Открытый исходный код http://www.leniel.net/2009/07/creating-excel-spreadsheets-xls-xlsx-c.html

Я использовал Флексель в прошлом, и это было здорово.Но это было больше для программного создания и обновления рабочих листов Excel.

Экспорт в CSV прост, удобен в реализации и быстр.Однако есть одна потенциальная проблема, на которую стоит обратить внимание.Excel (до 2007 года) не сохраняет начальные нули в файлах CSV.Это приведет к искажению почтовых индексов, идентификаторов продуктов и других текстовых данных, содержащих числовые значения.Есть один трюк, который заставит Excel правильно импортировать значения (используя разделители и значения префикса со знаком =, если я правильно помню, например..,="02052",...).Если у вас есть пользователи, которые будут выполнять задачи последующей обработки с помощью CSV, они должны знать, что им нужно изменить формат на XLS, а не сохранять файл обратно в CSV.Если они это сделают, начальные нули будут потеряны навсегда.

В течение многих лет я использовал Джексел для этого отличный Java-проект с открытым исходным кодом.Это также было .Доступно по СЕТИ, используя J # для его компиляции, и я также добился большого успеха с ним в этом воплощении.Однако недавно мне понадобилось перенести код на native .NET для поддержки 64-разрядного приложения IIS, в котором я создаю выходные данные Excel.32-разрядная версия J # не загрузилась бы.

Код для CSharpJExcel является LGPL и в настоящее время доступен по адресу это страница, пока мы готовимся к ее развертыванию на сайте JExcel SourceForge.Он будет скомпилирован с VS2005 или VS2008.Примеры в оригинальной документации JExcel будут в значительной степени перенесены без изменений в .СЕТЕВАЯ версия.

Надеюсь, это кому-то здесь поможет.

Я долгое время работал с Excel jetcell и действительно могу рекомендовать его.http://www.devtriogroup.com/exceljetcell

  • Коммерческий продукт
  • Файлы Excel XLS и XLSX
  • Основан на собственном движке в чистой сети.

На следующем сайте демонстрируется, как экспортировать таблицу данных, DataSet или Список<> в "правильный" файл Excel 2007 .xlsx (вместо экспорта файла .csv и получения Excel для его открытия).

Он использует библиотеки OpenXML, так что вы не надо необходимо, чтобы Excel был установлен на вашем сервере.

База знаний Mikes - ExportToExcel

Весь исходный код приведен, бесплатно, а также демонстрационное приложение.

Это очень легко добавить в ваши собственные приложения, вам просто нужно вызвать одну функцию, передав имя файла Excel и ваш источник данных:

DataSet ds = CreateSampleData();
string excelFilename = "C:\\Sample.xlsx";
CreateExcelFile.CreateExcelDocument(ds, excelFilename);

Надеюсь, это поможет.

Проверьте Превосходная упаковка проект, он использует формат файла Office Open XML Excel 2007, он легкий и с открытым исходным кодом...

Я пробовал CSharpJExcel и не рекомендовал бы его, по крайней мере, до тех пор, пока не появится какая-либо документация.Вопреки комментариям разработчиков, это не прямо родной портвейн.

Я знаю, что уже довольно поздно, но я чувствую себя обязанным ответить xPorter ( Переносчик ) (письменно) и xlReader - устройство чтения (чтение) из xPortTools.Net.Мы протестировали довольно много библиотек, и ничто и близко не подходило с точки зрения производительности (здесь я говорю о написании миллионов строк за секунды).Не могу сказать достаточно хорошего об этих продуктах!

Вы можете использовать Microsoft.Jet.OLEDB.4.0

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

Мы чуть не сбились с пути в том же самом:

  1. Подготовка / работа в файле электронной таблицы
  2. Сохранить файл
  3. Импортировать файл
  4. Работа с данными в системе

...рабочий процесс

Экспресс-надстройка позволяет вам создать кнопку в Excel без всей этой утомительной возни с VSTO.Затем рабочий процесс становится:

  1. Подготовка / работа в файле электронной таблицы
  2. Импортировать файл (с помощью кнопки внутри Excel)
  3. Работа с данными в системе

Попросите код, стоящий за кнопкой, использовать "собственный" Excel API (через Add-in Express) и отправить его непосредственно в систему получателя.Вы не можете стать намного более прозрачным для разработчика или пользователя.Стоит подумать.

Есть довольно хорошая статья и библиотека по CodeProject Йогеша Джаготы:

Библиотека импорта-экспорта XML Excel

Я использовал его для экспорта данных из SQL-запросов и других источников данных в Excel - у меня это работает просто отлично.

Ваше здоровье

Вы могли бы попробовать следующую библиотеку, это достаточно просто, и это всего лишь легкая оболочка поверх Microsoft Open XML SDK (вы даже можете повторно использовать форматирование, стили и даже целые листы из дополнительного файла Excel) :http://officehelper.codeplex.com

Spreadsheetgear - лучшая коммерческая библиотека, которую мы нашли и используем.Наша компания выполняет расширенный импорт и экспорт Excel, а Spreadsheetgear поддерживает множество расширенных функций Excel, намного превосходящих все, что вы можете сделать с помощью простого CSV, и это быстро.Это не бесплатно и не очень дешево, но оно того стоит, потому что поддержка отличная.Разработчики действительно ответят вам, если вы столкнетесь с проблемой.

Как насчет java-библиотеки apache POI?Я не использовал его для Excel, но использовал для Word 2007.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top