Імпорт та експорт Excel - яка найкраща бібліотека? [зачинено]


180

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

Вимоги:

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

Яку бібліотеку ви рекомендуєте? Ви використовували його для великої кількості даних? Є інші рішення?

Зараз я використовую простий інструмент, який генерує HTML, завантажений Excel пізніше, але я втрачаю деякі можливості, плюс Excel скаржиться, коли ми завантажуємо його. Мені не потрібно генерувати діаграми чи щось подібне, просто експортувати необроблені дані.

Я думаю про плоскі файли CSV, але Excel - вимога клієнта. Я можу працювати безпосередньо з CSV, якщо у мене був інструмент для перетворення в Excel і з нього. Враховуючи, що Excel 2007 - це формат файлів на основі XML (і на блискавці), я здогадуюсь, що цю бібліотеку слід легко знайти. Однак найважливіше для мене - це ваші коментарі та думки.


EDIT: За іронією долі, на мою думку, і після відповіді, отримавши найбільшу кількість голосів, найкраща бібліотека імпорту та експорту Excel - це не експорт. Це стосується не всіх сценаріїв, але це для мого. XLS-файли підтримують лише 64k рядків. XLSX підтримує до 1М. Безкоштовні бібліотеки, які я намагався, мають погані показники (одна секунда, щоб завантажити один рядок, коли у вас є 200k рядків). Я не пробував платні, оскільки я вважаю, що вони завищені за значення, яке вони отримують, коли все, що вам потрібно, - це швидкий порядок перетворення XLSX <-> CSV.


18
"Враховуючи, що Excel 2007 - це формат файлів на основі XML (і на блискавці), я здогадуюсь, що подібну бібліотеку потрібно легко знайти" - так! Це як би сказати, що "Excel 97 базується на байтах, тому подібну бібліотеку потрібно легко знайти". XML не передбачає простоти, і OOXML є дочірнім плакатом для того, як зробити підкреслений і нерозбірливий склад XML нерозбірливим. :-)
Кен

Насправді ви не зовсім правильні, роблячи це припущення. Існують інструменти, які роблять створення добре сформованого документа OOXML принаймні для XLSX, що дуже легко зробити з C # .NET.
Анонімний тип

3
Я створив пропозицію на сайті, щоб надати такі питання, як офіційний будинок, далеко від Stack Overflow. Це називається Рекомендації з коду. Допоможіть зробити його реальністю, приєднавшись і задаючи питання зараз!
daviewales

Що про Spire.xls. Це лише 800 доларів за Pro Edition. Ви отримуєте всі ваші конверсії, а також імпорт чи експортер Excel. e-iceblue.com/Introduce/…
програміст DotNet

GemBox.Spreadsheet - це ще одне рішення, яке варто перевірити, дуже швидко і має як безкоштовні, так і професійні версії. Крім того, професійна версія досить дешева і не має прихованих шалених витрат на розгортання, як більшість з них.
NixonUposseen

Відповіді:


41

Я збираюся кинути руку на плоскі файли CSV, хоча б тому, що ти маєш найбільший контроль над кодом. Просто переконайтеся, що ви читаєте в рядках і обробляєте їх по черзі (прочитавши документ до кінця і розбивши, ви з'їдете всю вашу пам’ять - те саме, що і з написанням, виведіть на екран).

Так, користувачеві доведеться зберігати як CSV у excel, перш ніж ви зможете його обробити, але, можливо, це обмеження можна подолати, навчаючи та надаючи чіткі інструкції на сторінці?

Нарешті, коли ви експортуєте до клієнта, якщо ви встановили тип mime на text / csv, Excel зазвичай відображається на цей тип, щоб користувачеві здавалося, що це "файл Excel".


4
Я також спробував підхід CSV, але з цим є кілька проблем. Наприклад, що робити, якщо ви хочете мати багаторядковий текст у комірці? Я не міг змусити Excel імпортувати такий CSV.
Ігор Брейц

23
CSV має своє місце, але плакат запитав про Excel, я вважаю, що він повинен хотіти Excel, а не CSV.
Джон Сципіон

7
CSV падає під час експорту стовпців, як 0345. Excel автоматично розрізує це на 345. Що зовсім не корисно, коли ця провідна цифра важлива.
NotMe

2
Таблиця HTML з розширенням файлу excel, здається, працює досить добре ... вона буде аналізувати деякі CSS своєрідним чином для таких речей, як форматування декількох ліній, кольорів тощо - без того, щоб насправді створювати власний файл Excel
Oskar Duveborn

3
"Зберегти як"? Ні. Якщо клієнт використовує Excel, то чому він повинен заощаджувати другий набагато обмежений файл для взаємодії з вашим продуктом?
mlibby

41

Я відкрив відкритий XML SDK з моєї оригінальної відповіді. Він забезпечує сильно типізовані класи для об'єктів електронних таблиць, серед іншого, і, здається, досить легко працювати. Я буду використовувати його для звітів в одному зі своїх проектів. На жаль, версія 2.0 не повинна виходити до кінця 2009 або 2010 року.


Дуже цікаво! Ви перевірили це, використовуючи велику кількість даних?
Джейсон Кілі

Я не робив жодної перевірки працездатності. Я буду переважно діаграмами та односторінковими звітами, тому пропускна здатність для мене не є проблемою. Однак, схоже, це так швидко, як може бути керований код.
cdonner

1
@ Джейсон Кілі: це справді найкраща відповідь на цій посаді - експорт стає неважливим із SpreadsheetML. Всі дані доступні з файлу. Якщо вам потрібні дані в іншому форматі, надайте перетворення через XSLT або через Linq.
Тодд Майн

1
Однак це взагалі не працює для файлів ".xls".
квеллер

github.com/OfficeDev/Open-XML-SDK тепер це відкритий ресурс та розміщений github (мені подобається, де останнім часом очолює MS)
Alex

34

нова версія ExcelPackage тут http://EPPlus.codeplex.com

Я все ще борюся з функцією експорту до excel, оскільки моя програма повинна експортувати деякі дані до excel-template 2007

цей проект мені здається прекрасним, і розробник дуже чуйно реагує на помилки та проблеми.


3
Добре працює, але ліцензовано під GPL - наприклад, будь-яке програмне забезпечення, яке використовує його, теж повинне бути доступне у простому вихідному коді .... не завжди вдалий вибір ...
marc_s

Експортуйте у зручному для вас форматі, напишіть прогу. що використовує EPPlus для перетворення в Excel, зробіть це безкоштовно. Зробіть свою основну прогу, використовуйте це як за замовчуванням, але дозвольте інші "плагіни".

5
Здається, що це зараз ліцензовано за LGPL, тому ви можете використовувати його як пов’язану бібліотеку без обмежень для копіювання.
Бред Р

Зауважте, що якщо вам потрібно створити файл excel з великими рядками, ця бібліотека має тенденцію до випадкових помилок "нечитабельного вмісту" в excel.
Кевін Лаїт

1
Слідкуйте за тим, що EPPlus просочує пам'ять, не дуже добре для великих обсягів даних.
користувач3285954

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


@Joe Erickson: Чи можете ви сказати, як можна прочитати CSV, а потім створити XML з CSV, щойно читається, використовуючи передачу електронної таблиці та використовуючи цей XLS, створюючи результат XML-файл, який містить цю структуру? Або ми можемо використовувати Spreadsheetgear для створення XML безпосередньо з CSV?
AnkitSablok


5

Раніше я використовував Flexcel, і це було чудово. Але це було більше для програмного створення та оновлення робочих таблиць Excel.


Я не бачу, що це підтримує Excel 2007 (xlsx). Оскільки xls підтримує лише 64k рядків, для мене це обмеження.
Джейсон Кілі

@Jason Kealey - Flexcel тепер підтримує Excel 2007 та 2010 рр.
Паук

5

Експорт CSV простий, простий у здійсненні та швидкий. Однак є одне потенційне питання, про яке варто звернути увагу. Excel (до 2007 року) не зберігає провідні нулі у файлах CSV. Це дозволить отримати поштові індекси, ідентифікатори продуктів та інші текстові дані, що містять числові значення. Є один трюк, який змусить Excel імпортувати значення правильно (використовуючи роздільники та значення префікса зі знаком =, якщо я правильно пам'ятаю, наприклад .., = "02052", ...). Якщо у вас є користувачі, які будуть виконувати завдання після обробки з CSV, вони повинні знати, що їм потрібно змінити формат на XLS і не зберігати файл назад у CSV. Якщо вони це зробити, провідні нулі будуть втрачені назавжди.


1
Для всього, що має бути збереженим як текст, просто поставте «(апостроф) на початку
phuclv

Ще один цікавий факт: я не можу відкрити відокремлений комою файл у багатьох локалях, як німецька. Що робить csv поганим форматом для обміну даними з міжнародними контактами
Крістіан Зауер

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

На наступному веб-сайті показано, як експортувати 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, це легкий та відкритий код ...


1
Виглядав добре, але в одному коментарі сказано, що це погано з великими файлами (мій сценарій)
Jason Kealey

1
Цікаво - це ліцензія як GPL, а не LGPL. Тому його потрібно використовувати в додатках GPL. (Крім того, прикро, що розвиток, здається, зупинився.)
Джейсон Кілі

1
Я спробував ExcelPackage, але довелося його відмовитися - він не вдається, коли ви намагаєтеся поставити окремі лапки (') у комірку.
Ігор Брейц

2

Я спробував CSharpJExcel і не рекомендував би його, принаймні, не, поки не буде доступна якась документація. На відміну від коментарів розробників, це не прямий рідний порт.


2

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


2

Можна використовувати Microsoft.Jet.OLEDB.4.0


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
Sanjay Goswami

1
Я використовував це для XLS (не первісна вимога) та для повноти ... Є деякі важливі проблеми: (1) Це лише 32-розрядна версія, тому вам доведеться встановити IIS, щоб це допустити. (2) Експорт страшенно повільний. (3) Він має погано задокументовані межі рядків і стовпців. (4) Він наполягає на "тип нюху" імпортованих стовпців, якщо у вас немає доступу до реєстру, і це, як правило, не так.
philw

1

Ми щойно визначили подібну потребу. І я думаю, що важливо враховувати користувальницький досвід.

Нас майже не залишилося в стороні:

  1. Підготуйте / працюйте у файлі електронних таблиць
  2. Зберегти файл
  3. Імпортувати файл
  4. Робота з даними в системі

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

Додатковий експрес дозволяє створити кнопку в Excel без усієї стомлювальної роботи з VSTO. Потім робочий процес стає:

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

Попросіть код за цією кнопкою скористатися "рідним" API Excel (через Add-in Express) і натисніть прямо в систему одержувача. Ви не можете отримати набагато прозоріше для розробника чи користувача. Варто врахувати.


1

Є досить хороша стаття та бібліотека про CodeProject Йогеша Яготи:

Бібліотека імпорту-експорту Excel XML

Я використовував їх для експорту даних із SQL-запитів та інших джерел даних у Excel - для мене працює чудово.

Ура


1
Цікаво, але потрібні XML-файли. Не вдається прочитати / записати xls або xlsx файли.
Джейсон Кілі

1

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


Нещодавно був опублікований новий випуск бібліотеки.
aron.sinoai

0

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


0

А як щодо бібліотеки апач POI java. Я не використовував його для Excel, але використовував його для Word 2007.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.