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

180

В одном из наших приложений 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 2007 является форматом файлов на основе xml (и в формате zip), я предполагаю, что этот тип библиотеки должен быть легко найден. Тем не менее, для меня важнее всего ваши комментарии и мнения.


РЕДАКТИРОВАТЬ: по иронии судьбы, по моему мнению и после ответа с большинством голосов, лучшая библиотека импорта и экспорта в Excel не экспорт вообще. Это относится не ко всем сценариям, но к моему. Файлы XLS поддерживают только 64 тыс. Строк. XLSX поддерживает до 1М. Бесплатные библиотеки, которые я пробовал, показывают плохую производительность (одна секунда, чтобы загрузить одну строку, когда у вас есть 200k строк). Я не пробовал платные, потому что чувствую, что они завышены по цене, которую они предоставляют, когда все, что вам нужно, это быстрая процедура преобразования XLSX <-> CSV.

Джейсон Кили
источник
18
«Учитывая, что Excel 2007 является форматом файлов на основе xml (и в архиве), я полагаю, что такую ​​библиотеку легко найти» - ха! Это все равно что сказать «Excel 97 основан на байтах, поэтому такую ​​библиотеку легко найти». XML не подразумевает простоты, и OOXML - это детище для того, как сделать XML недоопределенным и неразборчиво сложным. :-)
Кен
На самом деле вы не совсем правы в этом предположении. Существуют инструменты, которые делают создание хорошо сформированного документа OOXML по крайней мере для XLSX, очень легко сделать с C # .NET.
анонимный тип
3
Я создал предложение для сайта, чтобы дать такие вопросы, как этот официальный дом вдали от переполнения стека. Это называется Рекомендации по коду. Помогите воплотить его в жизнь, присоединившись и задавая вопросы прямо сейчас!
daviewales
Как насчет Spire.xls. Это всего лишь 800 долларов за Pro Edition. Вы получаете все ваши конверсии, а также ваш импорт или экспорт в Excel. e-iceblue.com/Introduce/…
Программист DotNet
GemBox.Spreadsheet - еще одно решение, которое стоит попробовать , очень быстрое и имеет как бесплатную, так и профессиональную версии. Кроме того, профессиональная версия довольно дешевая и не имеет каких-либо скрытых дрянных затрат на развертывание, как и большинство из них.
NixonUposseen

Ответы:

41

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

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

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

tsimon
источник
4
Я тоже попробовал CSV-подход, но с ним есть несколько проблем. Например, что если вы хотите, чтобы в ячейке был многострочный текст? Я не мог заставить Excel импортировать такой CSV.
Игорь Брейц
23
У CSV есть свое место, но постер спросил об Excel, я предполагаю, что он должен хотеть Excel, а не CSV.
Джон Сципион
7
CSV падает при экспорте столбцов, таких как 0345. Excel автоматически обрезает это до 345. Что совсем не полезно, когда важна эта начальная цифра.
NotMe
2
Таблица HTML с расширением файла Excel, кажется, работает довольно хорошо ... она будет анализировать некоторые CSS особым образом для таких вещей, как форматирование нескольких строк, цветов и т. Д. - без необходимости создавать собственный файл Excel
Оскар Дювеборн
3
"Сохранить как"? Нет. Если клиент использует Excel, то зачем ему сохранять второй, гораздо более ограниченный файл для взаимодействия с вашим продуктом?
mlibby
41

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

cdonner
источник
Очень интересно! Вы проверяли это, используя большие объемы данных?
Джейсон Кили
Я не сделал никакого теста производительности. Я буду в основном графики и и одностраничные отчеты, поэтому пропускная способность не является проблемой для меня. Похоже, он работает так быстро, как управляемый код.
cdonner
1
@Jason Kealey: это действительно лучший ответ на этот пост - экспорт не имеет отношения к SpreadsheetML. Все данные доступны из файла. Если вам нужны данные в другом формате, предоставьте преобразование через XSLT или через Linq.
Тодд Майн
1
Это не работает для файлов ".xls" вообще, все же.
Лебедка
github.com/OfficeDev/Open-XML-SDK теперь он с открытым исходным кодом и размещен на github (мне нравится, куда недавно направляется MS)
Alex
34

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

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

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

Моханнад Отайби
источник
3
Работает нормально, но распространяется по лицензии GPL - например, любое программное обеспечение, использующее его, должно быть доступно в виде простого исходного кода, тоже ... не всегда хороший выбор ...
marc_s
Экспортируйте в родном удобном для вас формате, пишите прогу. который использует EPPlus для преобразования в Excel, сделать это бесплатно. Сделайте так, чтобы ваша основная программа использовала это по умолчанию, но разрешите другие «плагины», эй, прежде чем ваш реальный код свободен от GPL.
5
Похоже, что теперь это лицензировано в соответствии с LGPL, так что вы можете использовать его в качестве связанной библиотеки без ограничений авторского лева.
Брэд R
Обратите внимание, что если вам нужно создать файл Excel с большими строками, эта библиотека имеет тенденцию случайным образом выдавать ошибки «нечитаемый контент» в Excel.
Кевин Лейти
1
Помните, что EPPlus теряет память, не очень хорошо для больших объемов данных.
user3285954
18

Я использую ClosedXML, и он прекрасно работает!

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

друид
источник
8
Я люблю иронию во имя ...
Джагд
Использовал это так же и тот же опыт. Работает хорошо и очень гибко.
AnthonyVO
14

SpreadsheetGear для .NET читает и пишет CSV / XLS / XLSX и делает больше.

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

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

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

Джо Эриксон
источник
@ Джоэ Эриксон: Можете ли вы рассказать о том, как можно читать CSV, а затем производить XML из CSV, просто читая с использованием механизма Spreadsheet и используя этот XLS, создавая результирующий XML-файл, который содержит эту структуру? Или мы можем использовать Spreadsheetgear для непосредственного создания XML из CSV?
AnkitSablok
5

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

Дункан
источник
Я не вижу, что это поддерживает Excel 2007 (xlsx). Поскольку xls поддерживает только 64 КБ строк, это ограничение для меня.
Джейсон Кили
@Jason Kealey - Flexcel теперь поддерживает Excel 2007 и 2010.
Pauk,
5

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

cdonner
источник
1
Для всего, что должно быть сохранено как текст, просто поместите '(апостроф) в начале
phuclv
Еще один забавный факт: я не могу открыть файл, разделенный запятыми, во многих регионах, например в немецком. Что делает CSV плохим форматом для обмена данными с международными контактами
Christian Sauer
4

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

Код для CSharpJExcel - LGPL и доступен в настоящее время на этой странице, в то время как мы готовимся развернуть его на сайте JExcel SourceForge. Он будет компилироваться с VS2005 или VS2008. Примеры в исходной документации JExcel довольно легко переместятся на версию .NET.

Надеюсь, это кому-нибудь пригодится.

Крис Лафоре
источник
Обе ссылки больше не работают ... но я нашел некоторые фрагменты, и похоже, что это более дружественно к Java, не так много для разработчиков .NET. Однако я нашел другую библиотеку, которая противоположна, это нативная библиотека .NET ( GemBox.Spreadsheet ), которая также была портирована на Java ( GemBox.Spreadsheet для Java ).
Хейзел Паттон
3

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

  • Коммерческий продукт
  • Файлы Excel XLS & XLSX
  • На основе собственного двигателя в чистой сети.
Роберт Тайсон
источник
3

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

Он использует библиотеки OpenXML, поэтому вам не нужно устанавливать Excel на ваш сервер.

База знаний Майка - ExportToExcel

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

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

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

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

Майк Гледхилл
источник
2

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

CMS
источник
1
Выглядело хорошо, но один комментарий говорит, что это плохо с большими файлами (мой сценарий)
Джейсон Кили
1
Интересно - это лицензия GPL, а не LGPL. Следовательно, он должен использоваться в приложениях GPL. (Также, к сожалению, кажется, что развитие прекратилось.)
Джейсон Кили
1
Я пробовал ExcelPackage, но пришлось отказаться от него - он не работает, когда вы пытаетесь поместить одинарные кавычки (') в ячейку.
Игорь Брейц
2

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

user483711
источник
2

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

DanP
источник
2

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

RG.
источник
1
Одно из моих требований - не запускать Excel на сервере.
Джейсон Кили
2
я не думаю, что это работает !!
Soner Gönül
2
MS Office не требуется для «Microsoft.Jet.OLEDB.4.0» (для xls) «Microsoft.ACE.OLEDB.12.0 для xlsx». Вы должны использовать только драйверы, поэтому нет шансов запустить Excel на сервере @Jason Kealey
Санджай Госвами
1
Я использовал это для XLS (не оригинального требования) и для полноты ... Есть несколько важных вопросов: (1) Это только 32-битная версия, поэтому вам придется настроить IIS, чтобы разрешить это. (2) Это ужасно медленно при экспорте. (3) Он имеет плохо документированные пределы строк и столбцов. (4) Он настаивает на «импортировании типа» импортированных столбцов, если у вас нет доступа к реестру, и обычно ошибается.
Филв
1

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

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

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

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

Надстройка Express позволяет вам создавать кнопки в Excel без всего этого утомительного хулиганства с VSTO. Тогда рабочий процесс становится:

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

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

Program.X
источник
1

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

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

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

ура

marc_s
источник
1
Интересно, но требует XML-файлов. Не могу читать / писать файлы xls или xlsx.
Джейсон Кили
1

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

aron.sinoai
источник
Новый выпуск библиотеки был недавно опубликован.
aron.sinoai
0

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

pilavdzice
источник
0

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

harijay
источник