Создать файл Excel (.XLS и .XLSX) с C#


1,481

Как создать таблицу Excel с C#, не требуя установки Excel на компьютере, на котором выполняется код?

+3

Не уверен, что это подходящее место, но посмотрите на ClosedXML. Он устанавливает ограничение на 2003 год на ваш код, но до сих пор мы использовали его с большим успехом. 25 мар. 142014-03-25 12:09:43

+1

Это можно сделать только с помощью .NET Framework, как описано [здесь] (https://www.codeproject.com/Articles/15593/Read-and-write-Open-XML-files-MS-Office) или много проще с некоторой библиотекой, например [GemBox.Spreadsheet] (https://www.gemboxsoftware.com/spreadsheet/overview). 25 сен. 172017-09-25 09:59:18

822

Вы можете использовать библиотеку под названием ExcelLibrary. Это бесплатно, библиотека с открытым исходным кодом размещены на Google Code:

ExcelLibrary

Это выглядит как порт PHP ExcelWriter, что вы упомянули выше. Он не будет писать в новый формат .xlsx, но они работают над добавлением этой функциональности.

Это очень простой, маленький и простой в использовании. Кроме того, у него есть DataSetHelper, который позволяет вам использовать DataSets и DataTables для простой работы с данными Excel.

ExcelLibrary, похоже, работает только для старого формата Excel (файлы .xls), но может добавить поддержку в будущем для новых форматов 2007/2010.

Вы также можете использовать EPPlus, который работает только для файлов формата Excel 2007/2010 (файлы .xlsx).

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

Кроме того, как отмечает @ АртёмЦарионы ниже, EPPlus имеет поддержку сводных таблиц и ExcelLibrary может иметь некоторую поддержку (Pivot table issue in ExcelLibrary)

Вот несколько ссылок для быстрой справки:
ExcelLibrary - GNU Lesser GPL
EPPlus - GNU Lesser General Public License (LGPL)

Вот несколько примеров кода для ExcelLibrary:

Вот пример, берущий данные из базы данных и создающие из нее книгу. Обратите внимание, что код ExcelLibrary является единственной строкой внизу:

//Create the data set and table 
DataSet ds = new DataSet("New_DataSet"); 
DataTable dt = new DataTable("New_DataTable"); 

//Set the locale for each 
ds.Locale = System.Threading.Thread.CurrentThread.CurrentCulture; 
dt.Locale = System.Threading.Thread.CurrentThread.CurrentCulture; 

//Open a DB connection (in this example with OleDB) 
OleDbConnection con = new OleDbConnection(dbConnectionString); 
con.Open(); 

//Create a query and fill the data table with the data from the DB 
string sql = "SELECT Whatever FROM MyDBTable;"; 
OleDbCommand cmd = new OleDbCommand(sql, con); 
OleDbDataAdapter adptr = new OleDbDataAdapter(); 

adptr.SelectCommand = cmd; 
adptr.Fill(dt); 
con.Close(); 

//Add the table to the data set 
ds.Tables.Add(dt); 

//Here's the easy part. Create the Excel worksheet from the data set 
ExcelLibrary.DataSetHelper.CreateWorkbook("MyExcelFile.xls", ds); 

Создание файла Excel так же просто. Вы также можете вручную создавать файлы Excel, но приведенная выше функциональность меня впечатлила.

+1

+1. Согласился с вышесказанным. Пробовал обманывать со всеми COM-серверами, устанавливая excel на сервере приложений. Слишком много работы в конце. Нашел это и теперь проблема решена! 21 сен. 102010-09-21 17:01:24

+195

ExcelLibrary был заменен исключительным EPPlus - http://epplus.codeplex.com. Ян регулярно обновляет его. Использули его, и это один из лучших проектов с открытым исходным кодом, с которыми мы работали. 04 ноя. 102010-11-04 00:11:19

+18

№ Использовать EppPlus - epplus.codeplex.com. Это самое последнее. Поддерживает форматирование. Я использую это. 05 ноя. 102010-11-05 01:34:32

+2

EPPlus - это потрясающе! Не нужно устанавливать excel и работать так легко 08 дек. 102010-12-08 23:47:20

+45

Кажется, что ExcelLibrary поддерживает только .xls и EPPlus только .xlsx, поэтому они дополняют друг друга. 04 фев. 112011-02-04 15:07:06

+3

Я пробовал использовать ExcelLibrary, к сожалению, если сгенерированные файлы находятся под определенной стороной, они не могут быть открыты в Windows 7. Это, кажется, известная ошибка, без исправления: http://code.google.com/ p/excellibrary/issues/detail? id = 54 17 июн. 112011-06-17 09:55:36

+1

Пытался создать файл xls с помощью ExcelLibrary, но он не работает - не удается открыть его с помощью Excel 2010 плюс :( 11 окт. 112011-10-11 10:59:43

+1

Следует отметить, что ExcelLibrary имеет большую производительность проблемы при работе с большими наборами данных (более 5000 строк с большим количеством столбцов). В настоящее время выполняется сильная модификация базы кода на работе, поэтому мы можем использовать ее в проекте. 18 окт. 112011-10-18 23:17:34

  0

EPPlus кажется гораздо менее ошибкой, чем ExcelLibrary, НО это GPL и поэтому только решение для проектов с открытым исходным кодом 26 янв. 122012-01-26 23:21:17

  0

Поддерживает ли какое-либо из них создание сводной таблицы? 22 июн. 122012-06-22 14:32:46

+1

@ АртёмЦарионов: Я не лучше, чем кто-либо другой, o домашняя страница http://epplus.codeplex.com/, EPPlus поддерживает сводные таблицы и в соответствии с этой проблемой (http://code.google.com/p/excellibrary/issues/detail?id=98&q=pivot&colspec= ID% 20Type% 20Status% 20Priority% 20ReportedBy% 20Owner% 20Summary% 20Opened) ExcelLibrary также имеет хотя бы некоторый уровень поддержки сводных таблиц. НТН. 03 июл. 122012-07-03 20:57:56

  0

По непонятной мне причине EPPlus не работает для меня. Но эта библиотека Excel работает отлично. Интересно, есть ли способ сделать строку заголовка полужирным в excel? 26 ноя. 132013-11-26 07:44:15

+4

-1 Если вы собираетесь разместить образец кода, вы также можете убедиться, что он правильный. [* Использовать метод Dispose этого интерфейса для явного освобождения неуправляемых ресурсов в сочетании с сборщиком мусора. Потребитель объекта может вызвать этот метод, когда объект больше не нужен. *] (Http://msdn.microsoft.com/en-us/library/system.idisposable (v = vs.110) .aspx) 22 фев. 142014-02-22 09:44:02

  0

Откройте пустой файл для меня ... может быть, потому что у меня есть офис ms 2010? 18 май. 142014-05-18 13:20:32

  0

EPPlus на самом деле по-прежнему технически GPL, потому что это производная работа (т.е. база кода по-прежнему основана на ExcelLibrary, и поскольку это GPL, то есть EPPlus ... вы не можете внести некоторые изменения в код GPL и нанести удар LGPL лицензия на него). Кто-нибудь знает способ записи в Excel, используя либо коммерческий код, либо настоящий LGPL (или аналогичный лицензионный код). 27 янв. 152015-01-27 20:48:09

+7

Пожалуйста, прекратите публикацию EPPlus в качестве альтернативы ExcelLibrary до тех пор, пока она не будет иметь одинаковую функциональность (один обрабатывает XLS, другой XLSX). Насколько мне нравится EPPlus, это просто не ответ на потребности OP (XLS). 01 апр. 152015-04-01 00:51:54

+1

Этот вопрос и его ответы действительно старые. Теперь NPOI - это путь, и мне жаль, что я не понял, что до того, как я потратил свое время на EPPlus и ExcelLibrary, пытаясь получить решение, которое работало как для .xls, так и для .xlsx. Получите C# загрузки с npoi.codeplex.com. И лучшая документация, которую я нашел, хотя это версия Java на poi.apache.org 20 май. 152015-05-20 01:02:39

  0

ExcelLibrary больше не работает. Если вы хотите писать файлы Excel 2003 (.xls), эта библиотека отлично работает: CSharpJExcel http://sourceforge.net/projects/jexcelapi/ Обязательно загрузите порт C#. 28 окт. 152015-10-28 15:06:41

+2

Как насчет [ClosedXML] (https://closedxml.codeplex.com/)? Я могу оказаться полезным в ваших проектах. 30 ноя. 152015-11-30 18:10:23

  0

Возможно, http://www.aspose.com/products/cells или http://www.gemboxsoftware.com/spreadsheet/overview 15 июл. 162016-07-15 11:44:25

+1

NPOI перешел из Codeplex в [Github] (https://github.com/tonyqus/ npoi). 19 июл. 172017-07-19 13:43:52

  0

@ChrisRogers Действительно ли ОП указывает это? 27 июл. 172017-07-27 14:49:08

  0

@ wizzwizz4 - Да, OP запросил как XLS, так и XLSX-форматы (в названии). Этот комментарий (2 года назад) был направлен на многочисленные комментарии, которые ввели EPPlus вперед как заменяющий ExcelLibrary, который явно не делает, пока он не сможет обрабатывать оба формата. 07 авг. 172017-08-07 01:56:24


36

Возможно, вы захотите проверить interop classes. Вы не говорите OLE (что это не так), но классы взаимодействия очень просты в использовании.

Возможно, вам понравится, если вы еще не пробовали.

Пожалуйста, предупреждается от Microsoft stance об этом:

Microsoft на данный момент не рекомендуют, и не поддерживает, Автоматизация Microsoft Office приложений из любого без присмотра, неинтерактивного клиентского приложения или компонент (включая ASP, ASP.NET, DCOM и NT Services), поскольку Office может проявлять нестабильное поведение и/или тупик, когда Office запущен в этой среде .

+4

Но вы должны убедиться, что вы все распоряжаетесь вручную, иначе вы будете утечка памяти. 29 сен. 082008-09-29 22:40:28

+6

@ Ricky B: Кроме того, по моему опыту с interop это то, что он использует excel. Каждый раз, когда мы его использовали, если Excel не был установлен на машине, мы получали бы исключения COM. 29 сен. 082008-09-29 22:42:57

+1

С OLE, даже с очень осторожными выниманиями, он в конечном итоге утечки памяти или сбоев. Это нормально для присутствующих приложений/рабочих станций, но для серверов не рекомендуется (у MS есть KB, указывающий это). Для нашего сервера мы просто перезагружаем его в ночное время. Опять же, это работает нормально. 09 мар. 102010-03-09 21:54:00

+9

@Geoffrey: ah ОК, вы собираетесь заставить меня работать для этого :) -> http://support.microsoft.com/kb/257757 Microsoft в настоящее время не рекомендует и не поддерживает автоматизацию приложений Microsoft Office от любое бесконтактное, неинтерактивное клиентское приложение ... 11 мар. 102010-03-11 17:49:53

+3

Я прихожу к этой дискуссии после того, как вы пробовали больше недели на interop, и если ваши потребности очень просты, это не сработает. Поддержка форматирования вашей электронной таблицы является ужасной, что, возможно, является причиной генерации файла .xls, а не только файла CSV. Например, попытались ли вы вывести более 911 символов в ячейку или попытались ли вы последовательно установить ширину объединенных ячеек? У меня есть, и я не могу сказать, насколько я ненавижу эту хрень сейчас ... Сделайте себе одолжение и пойдите с одной из бесплатных библиотек, упомянутых в этой дискуссии. 03 фев. 112011-02-03 18:52:15

  0

Я еще не изменил Interop для EPPlus (но уже на полпути), поэтому я не знаю, насколько лучше с ним работает, но имея дело с Interop, я получаю так много боли в очень неожиданных случаях почти каждый раз, когда я требуется нечто более сложное, чем просто создать файл .xls/.xlsx с простой таблицей внутри. И упомянутая выше «двойная проверка-на-распоряжение-все-магия» - одна из тех повседневных страданий. Но да, это работает, и в большинстве случаев этого достаточно. 13 май. 132013-05-13 15:11:30


49

Очень легкий вариант может заключаться в использовании таблиц HTML. Просто создайте теги head, body и table в файле и сохраните его как файл с расширением .xls. Существуют специальные атрибуты Microsoft, которые можно использовать для создания вывода, включая формулы.

Я понимаю, что вы не можете кодировать это в веб-приложении, но вот example композиции файла Excel через таблицу HTML. Этот метод можно использовать, если вы кодировали консольное приложение, настольное приложение или службу.

+5

Это так ad hoc, но он работает (не говоря уже о том, что excel выдаёт предупреждение при открытии) и настолько прост, он заслуживает того, чтобы иметь место в качестве решения. Хотя только для того, чтобы показать, что вы можете экспортировать файл excel :)) 04 янв. 122012-01-04 07:23:41

+1

Это решение отлично подходит для меня, просто обратите внимание, что вы не можете использовать расширение .xlsx 30 мар. 162016-03-30 18:24:11

  0

Некоторые люди в моей организации не могут открывать файлы excel, сделанные таким образом в Office 2010 и выше ,Не знаю, в чем проблема, но мне пришлось выполнить мою собственную реализацию OpenXML. (см. ответ Sogger) 08 дек. 162016-12-08 22:55:11


8

IKVM + POI

Или вы могли бы использовать Interop ...


90

Вы можете использовать OLEDB для создания и редактирования файлов Excel. Проверьте это: Reading and Writing Excel using OLEDB.

Типичный пример:

using (OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\temp\\test.xls;Extended Properties='Excel 8.0;HDR=Yes'")) 
{ 
    conn.Open(); 
    OleDbCommand cmd = new OleDbCommand("CREATE TABLE [Sheet1] ([Column1] string, [Column2] string)", conn); 
    cmd.ExecuteNonQuery(); 
} 

EDIT - еще несколько ссылок:

+3

Может ли кто-нибудь подтвердить, работает ли это при работе в x64? Я уверен, что Jet работает только в том случае, если ваше приложение скомпилировано или работает в 32-битном режиме. 30 сен. 082008-09-30 01:45:11

+1

Я только что протестировал это соединение, и он не удался на Windows Server 2008 R2 x64 RC, похоже, необходимо установить компонент Office 2007: компоненты подключения к данным [http://www.microsoft.com/downloads/details. aspx? FamilyID = 7554F536-8C28-4598-9B72-EF94E038C891 & displaylang = en] 16 июн. 092009-06-16 07:31:19

+23

Будьте очень осторожны с этим - это большая уродливая группа (например, иногда она угадывает тип столбца и отбрасывает все данные, которые не подходят). 29 сен. 092009-09-29 09:02:22

+7

При использовании этого метода нужно быть очень осторожным. Я нашел его очень flaky для данных, которые не в идеальном формате. 09 июн. 102010-06-09 16:03:29

+5

Как человек, который должен был использовать OleDb в большом проекте, я говорю «ОСТАВАЙТЕСЬ ОТ ЭТОГО! Иногда он не может получить значение ячейки только потому, что не может понять формат. У него нет операции удаления. Он работает совершенно по-другому и непредсказуем даже при незначительном изменении поставщика. Я бы сказал, чтобы найти проверенное коммерческое решение. 13 сен. 142014-09-13 18:32:16

+1

Microsoft обновила Jet, попробуйте эту ссылку http://stackoverflow.com/questions/14401729/difference-between-microsoft-jet-oledb-and-microsoft-ace-oledb 05 май. 162016-05-05 21:36:31

  0

На предыдущем задании мы использовали [Microsoft Access Database Engine 2010 Redistributable] (https://www.microsoft.com/en-us/download/details.aspx?id=13255). Он принял форму драйвера OLEDB, который позволял читать и записывать файлы Excel, а также файлы формата доступа. Обратите внимание, что эта загрузка не требует установки всего пакета Office. Обратите также внимание на то, что он поставляется в 32-битных и 64-битных вариантах. Очень важно, чтобы вы соответствовали 32-разрядной или 64-битной версии ** архитектуре хост-процесса **, которая будет обращаться к файлам. В нашем случае хост-процесс был SSIS. 09 июл. 162016-07-09 05:33:12


13

Вы можете взглянуть на http://www.gemboxsoftware.com/GBSpreadsheetFree.htm.

Они имеют бесплатную версию со всеми функциями, но ограничены до 150 строк на лист и 5 листов на книгу, если это подпадает под ваши потребности.

Мне еще не нужно было его использовать, но он действительно интересен.


3

Решение с открытым исходным кодом Java - Apache POI. Может быть, есть способ настроить interop здесь, но я не знаю достаточно о Java, чтобы ответить на это.

Когда я исследовал эту проблему, я закончил использование сборок Interop.


18

Вы можете рассмотреть возможность создания своих файлов с использованием формата XML Spreadsheet 2003. Это простой формат XML с использованием well documented schema.


8

Вот способ сделать это с помощью LINQ к XML, в комплекте с образцом кода:

Quickly Import and Export Excel Data with LINQ to XML

Это немного сложным, так как вы должны импортировать пространство имен и так далее, но это позволит вам избежать любые внешние зависимости.

(Также, конечно, это VB .NET, а не C#, но вы всегда можете выделить VB .NET материал в своем собственном проекте использовать XML литералы и делать все остальное в C#.)


10

I согласитесь о создании XML-таблиц, вот пример того, как это сделать для C# 3 (все просто блоги об этом в VB 9: P) http://www.aaron-powell.com/linq-to-xml-to-excel


5

Вы когда-нибудь пробовали sylk?

Мы использовали для создания excelsheets в классическом asp как sylk, и прямо сейчас мы ищем excelgenerater.

Преимущества для sylk - это возможность форматирования ячеек.

+1

http://en.wikipedia.org/wiki/SYmbolic_LinK_(SYLK) 05 фев. 122012-02-05 12:01:57


11

Различные библиотеки библиотек Office 2003 доступны для небольших файлов excel. Тем не менее, я считаю, что размер большой книги, сохраненной в формате XML, является проблемой. Например, рабочая книга, с которой я работаю, будет 40 МБ в новом (и, по общему признанию, более плотно упакованном) формате XLSX, станет файлом формата 360 МБ.

Что касается моих исследований, то есть два коммерческих пакета, которые позволяют выводить старые форматы двоичных файлов. Они являются:

Ни дешевы (500USD и 800USD соответственно, я думаю). но обе работают независимо от самого Excel.

Что мне будет интересно, так это модуль вывода Excel для подобных OpenOffice.org. Интересно, можно ли их портировать с Java на .Net.

  0

Это работает как на .net, так и на java, и не дорого. SmartXLS http://www.smartxls.com 03 дек. 092009-12-03 08:08:22


69

Коммерческое решение, SpreadsheetGear for .NET сделает это.

Вы можете увидеть в реальном времени образцы ASP.NET (C# и VB) here и загрузить оценочную версию here.

Отказ от ответственности: У меня есть SpreadsheetGear ООО

  0

Джо, этот голос голосования действительно выглядит несправедливым для меня. У вас есть мой +1 для баланса ;-) 02 фев. 092009-02-02 15:56:52

+5

У вас отличный продукт, но я думаю, что многие люди ждут бесплатных решений. Это может объяснить отрицательные голоса. 03 фев. 112011-02-03 18:43:19


38

Вы можете использовать ExcelXmlWriter http://www.carlosag.net/Tools/ExcelXmlWriter/

Он отлично работает.


8

Я недавно использовал FlexCel.NET и нашел отличную библиотеку! Я не говорю о слишком многих программных продуктах.Не стоит указывать здесь весь объем продаж, вы можете прочитать все функции на своем веб-сайте.

Это коммерческий продукт, но вы получаете полный исходный код, если хотите его купить. Поэтому, я полагаю, вы могли бы скомпилировать его в свою сборку, если хотите. В противном случае это всего лишь одна дополнительная сборка для xcopy - без конфигурации или установки или чего-либо подобного.

Я не думаю, что вы найдете какой-либо способ сделать это без сторонних библиотек, поскольку .NET framework, очевидно, не имеет встроенной поддержки, а OLE Automation - всего лишь целый мир боли.


51

Несколько вариантов я использовал:

Если XLSX является обязательным: ExcelPackage это хорошее начало, но умер от когда разработчик перестал работать на нем. ExML поднялся оттуда и добавил несколько функций. ExML - неплохой вариант, я все еще использую его на нескольких веб-сайтах.

Для всех моих новых проектов я использую NPOI, порт .NET Apache POI. NPOI 2.0 (Alpha) также поддерживает XLSX.

  0

Будьте осторожны с ExcelPackage, если вам нужно поддерживать XLS. Мне было трудно с ним и в конечном итоге переключилось на ExcelLibrary. 17 сен. 102010-09-17 13:55:24

  0

Определенно верно. ExcelPackage/ExML - это только хороший вариант, если вам нужна поддержка XLSX. 21 сен. 102010-09-21 15:16:28

+2

Обратите внимание, что ExcelPackage имеет преемника: EPPlus (https://epplus.codeplex.com/), который поддерживает XLSX. Мое единственное беспокойство, по сравнению с NPOI, например, - это производительность, например. когда есть много столбцов. 03 ноя. 132013-11-03 19:00:31


140

Я с успехом следующие проекты с открытым исходным кодом:

  • ExcelPackage для OOXML форматов (офис 2007)

  • NPOI формата .XLS (Office 2003). NPOI 2.0 (Alpha) также поддерживает XLSX.

Посмотрите на мои посты в блоге:

Creating Excel spreadsheets .XLS and .XLSX in C#

NPOI with Excel Table and dynamic Chart

+5

Примечание по ссылкам NPOI - Row и Column основаны на нуле. Хорошо работает для заполнения существующего шаблона. 30 апр. 102010-04-30 13:45:52

+3

NPOI 2 теперь находится в Бета, и я использовал его в своих проектах для простого экспорта без проблем. 13 авг. 132013-08-13 13:19:56

+2

Это работает. У него также есть некоторые из самых жестоких имен классов и имен, которые когда-либо были изобретены, - имитируя жестокость в форматах данных, а не издеваясь над ним. 16 авг. 142014-08-16 23:23:07

+8

Этот вопрос и его ответы действительно старые. Теперь NPOI - это путь, и я хочу, чтобы этот ответ был наверху, прежде чем я потратил свое время на EPPlus и ExcelLibrary, пытаясь получить решение, которое работало как для .xls, так и для .xlsx. Получите C# загрузки с https://npoi.codeplex.com/. И лучшая документация, которую я нашел, даже если это версия Java, находится на https://poi.apache.org/ 20 май. 152015-05-20 00:59:45

+2

NPOI переместился из Codeplex в [Github] (https://github.com/tonyqus/npoi). 19 июл. 172017-07-19 13:43:11


2

Я также голосовать за GemBox.Spreadsheet.

Очень быстрый и простой в использовании, с множеством примеров на своем сайте.

Принимал мои задачи отчетности на совершенно новом уровне скорости выполнения.


6

Некоторая полезная автоматизация Excel в C#, вы можете найти по следующей ссылке.

http://csharp.net-informations.com/excel/csharp-excel-tutorial.htm

Болтона.


9

Ну,

вы также можете использовать библиотеку третьей стороны, как Aspose.

Эта библиотека имеет то преимущество, что на вашем компьютере не требуется установка Excel, которая была бы идеальной в вашем случае.

  0

Чтобы быть более точным, вы можете использовать [Aspose.Cells] (http://www.aspose.com/categories/.net-components/aspose.cells-for-.net/default.aspx) для .NET в порядке для создания файлов Excel (XLS, XLSX) в вашем приложении .NET. 29 авг. 112011-08-29 11:55:55

+6

Да, вы можете, если не возражаете платить минимальный лицензионный сбор в размере 999 долларов США. Попробуйте библиотеку MikesKnowledgeBase ... которая на 999 долларов дешевле! 05 янв. 122012-01-05 13:10:00


470

Если вы довольны форматом xlsx, попробуйте мой codeplex Проект GitHub. EPPlus. Начал его с источника из ExcelPackage, но сегодня это полная переписывание. Поддерживает диапазоны, стили ячейки, диаграммы, фигуры, рисунки, namesranges, автофильтр и многое другое.

+5

Да, наверное. Мой «маркетинг» до сих пор здесь несколько сообщений. Я попытаюсь сделать что-то после того, как я выпустил новую версию за несколько недель (которая будет включать поддержку шифрования и таблицы, а также несколько других вещей).Не стесняйтесь помогать мне, если вы хотите :) 09 ноя. 102010-11-09 07:52:26

+5

Моя полностью бесплатная библиотека также позволяет экспортировать любые DataSet, DataTable или List <> непосредственно в файл Excel .xlsx, используя Open XML. Полный исходный код и демонстрационная версия доступны здесь: http://www.mikesknowledgebase.com/pages/CSharp/ExportToExcel.htm 23 ноя. 112011-11-23 12:04:00

+64

Лицензия теперь LGPL, примечания к выпуску здесь: http://epplus.codeplex.com/releases/ view/79802 05 фев. 122012-02-05 12:30:14

+9

Примеры были полезными. Я смог изменить свой код с помощью библиотеки Microsoft interop (ужасно медленно) в эту библиотеку (версия 4.x) через пару часов. В моем тесте записывается файл с двумя вкладками и около 750 000 ячеек. Использование MS interop заняло 13 минут. Используя EPPlus, потребовалось 10 секунд, примерно 80 раз. Очень счастлив! 10 фев. 152015-02-10 18:55:49

  0

@ JanKällman Вы должны обновить страницу CodePlex, чтобы показать, что у вас есть эти методы: 'LoadFromCollection <T>', 'LoadFromDataTable' и т. Д. (Найдено через [здесь] (http://stackoverflow.com/a/13698809/845584)) 24 фев. 152015-02-24 03:39:45

+1

Для ясности в этой теме LGPL позволяет связать программное обеспечение без зараженной части GPL. Вам нужно только открыть исходные изменения, которые вы делаете в ClosedXml, или если вы прямо поставили исходный код (в отличие от ссылок на сборки ClosedXml) внутри вашего приложения, вам нужно открыть исходное приложение. 12 авг. 152015-08-12 16:10:30

  0

@Paul Chernoch: Мы заполняем большие листы Excel с interop очень быстро. Секрет состоит в том, чтобы делать массовое обновление. Создайте блок [,] block, заполните его, а затем запишите эту матрицу в Excel за один раз: excelWorksheet.get_Range (range) .Value2 = block; 15 фев. 182018-02-15 22:53:00


0

вы можете просто записать его в XML, используя формат Excel XML, и назовите его .XLS, и он откроется с помощью excel. Вы можете контролировать все форматирование (жирный шрифт, ширину и т.д.) в файле XML заголовок

http://en.wikipedia.org/wiki/Microsoft_Office_XML_formats#Excel_XML_Spreadsheet_example

+2

Это круто, за исключением того, что оно не поддерживает графики или изображения. 22 сен. 102010-09-22 16:03:52


4

Посмотрите на ExtremeML. Это довольно классная библиотека, которая позволяет использовать формат OpenXML для генерации файлов OpenXML.

Это также проект OpenSource.

http://www.extrememl.com/


32

Если вы создаете Excel 2007/2010 файлы дают этот проект с открытым исходным кодом попробовать: http://closedxml.codeplex.com

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

ClosedXML позволяет создавать файлы Excel 2007/2010 без приложения Excel . Типичный пример создания отчетов Excel на сервере веб- :

var workbook = new XLWorkbook(); 
var worksheet = workbook.Worksheets.Add("Sample Sheet"); 
worksheet.Cell("A1").Value = "Hello World!"; 
workbook.SaveAs("HelloWorld.xlsx"); 
+8

Я попытался использовать это в проекте, который создает довольно большие листы Excel. Отличная библиотека, но очень плохая по производительности. Я просто сделал сравнение для проекта, над которым я работаю: ClosedXML (v 0.53.3) занял 92 489 мс, тогда как EPPlus (v 2.9.03, для тестирования - мы не можем использовать, потому что это GPL) занял 16 500 мс. 08 июн. 112011-06-08 12:40:24

+1

@ Наверное, лицензия LGPL предполагает, что вы не изменяете исходный код на ClosedXML, он может свободно использовать http://epplus.codeplex.com/license 12 авг. 152015-08-12 16:08:27


7

Вы можете создать хорошо отформатированные файлы Excel с помощью этой библиотеки: http://officehelper.codeplex.com/documentation
Смотрите ниже образца:

using (ExcelHelper helper = new ExcelHelper(TEMPLATE_FILE_NAME, GENERATED_FILE_NAME)) 
{ 
    helper.Direction = ExcelHelper.DirectionType.TOP_TO_DOWN; 
    helper.CurrentSheetName = "Sheet1"; 
    helper.CurrentPosition = new CellRef("C3"); 

    //the template xlsx should contains the named range "header"; use the command "insert"/"name". 
    helper.InsertRange("header"); 

    //the template xlsx should contains the named range "sample1"; 
    //inside this range you should have cells with these values: 
    //<name> , <value> and <comment>, which will be replaced by the values from the getSample() 
    CellRangeTemplate sample1 = helper.CreateCellRangeTemplate("sample1", new List<string> {"name", "value", "comment"}); 
    helper.InsertRange(sample1, getSample()); 

    //you could use here other named ranges to insert new cells and call InsertRange as many times you want, 
    //it will be copied one after another; 
    //even you can change direction or the current cell/sheet before you insert 

    //typically you put all your "template ranges" (the names) on the same sheet and then you just delete it 
    helper.DeleteSheet("Sheet3"); 
}   

где образец выглядит следующим образом:

private IEnumerable<List<object>> getSample() 
{ 
    var random = new Random(); 

    for (int loop = 0; loop < 3000; loop++) 
    { 
     yield return new List<object> {"test", DateTime.Now.AddDays(random.NextDouble()*100 - 50), loop}; 
    } 
} 

2

http://www.codeproject.com/KB/cs/Excel_and_C_.aspx < = почему бы просто не использовать встроенную мощность окон, просто установите офис на сервер, любое приложение, которое вы устанавливаете, может быть автоматизировано.

Намного проще использовать собственные методы.

Если вы установили его, вы можете использовать его, это самая удивительная и используемая функция в окнах, она была перезаписана COM в старые добрые времена, и это экономит вам массу времени и боли.

Или еще проще просто использовать реф Lib поставки MS - http://csharp.net-informations.com/excel/csharp-create-excel.htm

  0

Почему второй способ проще? Разве это не то же самое (добавление библиотеки родных объектов в ваш проект)? Вам нужно установить Excel для получения этой библиотеки объектов? 09 фев. 112011-02-09 12:45:28

+6

Корпорация Майкрософт не рекомендует или не поддерживает автоматизацию Office из неинтерактивных приложений, таких как ASP.NET. См. Http://support.microsoft.com/kb/257757 09 фев. 112011-02-09 18:17:35

  0

Excel довольно ненадежный и медленный, когда дело доходит до автоматизации. 25 июн. 152015-06-25 09:21:23


8

Некоторых поставщиков 3-компонентной партии, как Infragistics или Syncfusion обеспечивает очень хорошие экспортные возможности Excel, которые не требуют Microsoft Excel для установки.

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

Если ваш экспорт предназначен для выполнения на стороне сервера с акцентом на экспортируемые данные и без ссылки на пользовательский интерфейс, я бы выбрал один из бесплатных вариантов с открытым исходным кодом (например, ExcelLibrary).

Я ранее занимался проектами, которые пытались использовать автоматизацию на стороне сервера в пакете Microsoft Office. Исходя из этого опыта, я бы настоятельно рекомендовал против такого подхода.


6

Посмотрите на образцы, как создавать файлы Excel.

Есть примеры в C# и VB.NET

Он управляет XSL XSLX и CSV Excel файлы.

http://www.devtriogroup.com/ExcelJetcell/Samples


7
public class GridViewExportUtil 
{ 
    public static void Export(string fileName, GridView gv) 
    { 
     HttpContext.Current.Response.Clear(); 
     HttpContext.Current.Response.AddHeader(
      "content-disposition", string.Format("attachment; filename={0}", fileName)); 
     HttpContext.Current.Response.ContentType = "application/ms-excel"; 

     using (StringWriter sw = new StringWriter()) 
     { 
      using (HtmlTextWriter htw = new HtmlTextWriter(sw)) 
      { 
       // Create a form to contain the grid 
       Table table = new Table(); 

       // add the header row to the table 
       if (gv.HeaderRow != null) 
       { 
        GridViewExportUtil.PrepareControlForExport(gv.HeaderRow); 
        table.Rows.Add(gv.HeaderRow); 
       } 

       // add each of the data rows to the table 
       foreach (GridViewRow row in gv.Rows) 
       { 
        GridViewExportUtil.PrepareControlForExport(row); 
        table.Rows.Add(row); 
       } 

       // add the footer row to the table 
       if (gv.FooterRow != null) 
       { 
        GridViewExportUtil.PrepareControlForExport(gv.FooterRow); 
        table.Rows.Add(gv.FooterRow); 
       } 

       // render the table into the htmlwriter 
       table.RenderControl(htw); 

       // render the htmlwriter into the response 
       HttpContext.Current.Response.Write(sw.ToString()); 
       HttpContext.Current.Response.End(); 
      } 
     } 
    } 

    /// <summary> 
    /// Replace any of the contained controls with literals 
    /// </summary> 
    /// <param name="control"></param> 
    private static void PrepareControlForExport(Control control) 
    { 
     for (int i = 0; i < control.Controls.Count; i++) 
     { 
      Control current = control.Controls[i]; 
      if (current is LinkButton) 
      { 
       control.Controls.Remove(current); 
       control.Controls.AddAt(i, new LiteralControl((current as LinkButton).Text)); 
      } 
      else if (current is ImageButton) 
      { 
       control.Controls.Remove(current); 
       control.Controls.AddAt(i, new LiteralControl((current as ImageButton).AlternateText)); 
      } 
      else if (current is HyperLink) 
      { 
       control.Controls.Remove(current); 
       control.Controls.AddAt(i, new LiteralControl((current as HyperLink).Text)); 
      } 
      else if (current is DropDownList) 
      { 
       control.Controls.Remove(current); 
       control.Controls.AddAt(i, new LiteralControl((current as DropDownList).SelectedItem.Text)); 
      } 
      else if (current is CheckBox) 
      { 
       control.Controls.Remove(current); 
       control.Controls.AddAt(i, new LiteralControl((current as CheckBox).Checked ? "True" : "False")); 
      } 

      if (current.HasControls()) 
      { 
       GridViewExportUtil.PrepareControlForExport(current); 
      } 
     } 
    } 
} 

Привет это решение экспортировать вид сетки на ваш Excel файл может помочь вам

+5

Нет, это генерирует HTML, помеченный как файл Excel, а не настоящий файл Excel. Да, сам Excel откроет это нормально, но другие программы, которые потребляют электронные таблицы, включая, например, бесплатный просмотрщик Microsoft Excel, не будут его принимать. Вам лучше создать настоящий файл Excel, используя одну из библиотек. 28 апр. 112011-04-28 11:46:08

  0

Вы также должны использовать [System.Net.Mime.ContentDisposition] (http://msdn.microsoft.com/en-us/library/system.net.mime.contentdisposition.aspx), чтобы генерировать текст заголовка содержимого чем добавление строки - это будет правильно работать с именами файлов, которые содержат пробелы и т. д. 28 апр. 112011-04-28 11:48:21


132

А что об использовании Open XML SDK 2.0 для Microsoft Office?

Несколько преимуществ:

  • Не требуется Офис установлен
  • Сделано Microsoft = достойной документации MSDN
  • Только один DLL .Net для использования в проекте
  • SDK поставляется с большим количеством инструментов как дифф, валидатор и т.д.

Ссылки:

+2

Важно отметить, что DLL для этого составляет чуть более 5 МБ и ограничена форматами Office 2007. Но, безусловно, самое простое и быстрое решение, которое работает для меня. 20 сен. 112011-09-20 13:03:06

+11

Просто голова, что v2.5 отсутствует и может быть загружена [здесь] (http://www.microsoft.com/en-us/download/details.aspx?id=30425). 04 янв. 132013-01-04 16:47:11

+8

SDK моделирует XML в классы, так что каждый тег XML сопоставляется с тегом, а затем вы должны правильно построить иерархию классов (каждый экземпляр имеет набор дочерних экземпляров/тегов). Это означает, что вам нужно знать структуру XML файла Excel, что очень сложно. Гораздо проще использовать обертку, такую ​​как EPPlus, упомянутую выше, что упрощает работу. 24 дек. 142014-12-24 16:27:57

+1

Отличный образец Microsoft Open XML SDK - Open XML Writer можно найти по адресу http://polymathprogrammer.com/2012/08/06/how-to-properly-use-openxmlwriter-to-write-large-excel-files/Или см. Решение для переполнения стека http://stackoverflow.com/questions/11370672/export-a-large-data-query-60k-rows-to-excel/42304339#42304339 17 фев. 172017-02-17 17:51:38

+3

Я нашел открытый Open XML Writer для Microsoft Open XML SDK для будь велика. Используя вышеприведенные решения (особенно образец Vincent Tom's (Poly Math)), легко создать писателя, который перетекает через большие наборы данных, и записывает записи в стиле, подобном и не слишком сложном для того, что вы сделали бы для CSV; но вы вместо этого пишете xml. Open XML - это образ мышления, который Microsoft рассматривает в новых форматах Office. И вы всегда можете переименовать их из .xslx в .zip-файлы, если вам хочется совать их содержимое XML. 17 фев. 172017-02-17 17:54:49


9

Просто хочу добавить еще одну ссылку на решение третьей стороны, которая непосредственно обращается ваш выпуск: http://www.officewriter.com

(Отказ от ответственности: Я работаю на SoftArtisans, компания, которая делает OfficeWriter)


24

Вот совершенно бесплатно C# библиотека, которая позволяет экспортировать из DataSet, DataTable или List<> в подлинный Excel 2007 .xlsx файл, используя OpenXML библиотеки:

http://mikesknowledgebase.com/pages/CSharp/ExportToExcel.htm

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

После добавления этого класса в приложении, вы можете экспортировать DataSet в Excel в одну строку кода:

CreateExcelFile.CreateExcelDocument(myDataSet, "C:\\Sample.xlsx"); 

Он не получает гораздо проще, чем ...

И он даже не требует наличия Excel на вашем сервере.

  0

Это кажется немного вводящим в заблуждение, поскольку вы просите о пожертвовании, чтобы получить все функции. 23 янв. 172017-01-23 15:33:19

  0

Отчасти это правда: полностью бесплатная версия создаст для вас идеальный файл .xlsx, и будет предоставлен весь исходный код. Если вы пожертвуете 10 или более долларов одной из этих двух благотворительных организаций (которых я абсолютно ничего не получаю), тогда вы получите «лучшую» версию, показывающую, как делать форматирование, даты и т. Д. Учитывая стоимость сторонних продуктов, я считаю пожертвование 10 долларов США на доброе дело, а это стоит того! 02 май. 172017-05-02 14:15:29


-4

Я использую следующий код для создания файла excel 2007, который создает файл и записывает его в этом файле, но когда я открываю файл, но он дает мне ошибку, что exel не может открыть файл. Файл bcz может быть coruupted или расширение файл несовместим. но если я использовал .xls для файла он работать штрафы

for (int i = 0; i < TotalFile; i++) 
{ 
    Contact.Clear(); 
    if (innerloop == SplitSize) 
    { 
     for (int j = 0; j < SplitSize; j++) 
     { 
      string strContact = DSt.Tables[0].Rows[i * SplitSize + j][0].ToString(); 
      Contact.Add(strContact); 
     } 
     string strExcel = strFileName + "_" + i.ToString() + ".xlsx"; 
         File.WriteAllLines(strExcel, Contact.ToArray()); 
    } 
} 

также относятся ссылка

http://dotnet-magic.blogspot.in/2011/10/createformat-excel-file-from-cnet.html

+1

Что все зависит от вашего класса «Контакт», и вы не сказали нам, что это такое. Если это работает на xls, скорее всего, вы на самом деле пишете HTML, который не является реальным файлом Excel. И ваша ссылка использует interop, который [как указано выше] (http://stackoverflow.com/a/151014) не должен использоваться на стороне сервера и может медленно заполнять большие таблицы. 22 дек. 142014-12-22 20:48:41

+1

Контакт связал список не class.declare linkledist и использовал его, потому что я не знаю размер данных, поэтому я использовал связанный список. 23 дек. 142014-12-23 09:53:12

+1

О, так что вы создаете простой текстовый файл с одним элементом в строке? Итак, Excel рассматривает это как CSV без запятых? 23 дек. 142014-12-23 09:55:02


3

Я написал простой код, чтобы экспортировать набор данных, чтобы преуспеть без использования объекта первенствовать с помощью системы. IO.StreamWriter.

Ниже приведен код, который будет считывать все таблицы из набора данных и записывать их на листы один за другим. Я получил помощь от статьи http://www.codeproject.com/Articles/9380/Export-a-DataSet-to-Microsoft-Excel-without-the-us.

public static void exportToExcel(DataSet source, string fileName) 
{ 
     const string endExcelXML = "</Workbook>"; 
     const string startExcelXML = "<xml version>\r\n<Workbook " + 
       "xmlns=\"urn:schemas-microsoft-com:office:spreadsheet\"\r\n" + 
       " xmlns:o=\"urn:schemas-microsoft-com:office:office\"\r\n " + 
       "xmlns:x=\"urn:schemas- microsoft-com:office:" + 
       "excel\"\r\n xmlns:ss=\"urn:schemas-microsoft-com:" + 
       "office:spreadsheet\">\r\n <Styles>\r\n " + 
       "<Style ss:ID=\"Default\" ss:Name=\"Normal\">\r\n " + 
       "<Alignment ss:Vertical=\"Bottom\"/>\r\n <Borders/>" + 
       "\r\n <Font/>\r\n <Interior/>\r\n <NumberFormat/>" + 
       "\r\n <Protection/>\r\n </Style>\r\n " + 
       "<Style ss:ID=\"BoldColumn\">\r\n <Font " + 
       "x:Family=\"Swiss\" ss:Bold=\"1\"/>\r\n </Style>\r\n " + 
       "<Style  ss:ID=\"StringLiteral\">\r\n <NumberFormat" + 
       " ss:Format=\"@\"/>\r\n </Style>\r\n <Style " + 
       "ss:ID=\"Decimal\">\r\n <NumberFormat " + 
       "ss:Format=\"0.0000\"/>\r\n </Style>\r\n " + 
       "<Style ss:ID=\"Integer\">\r\n <NumberFormat " + 
       "ss:Format=\"0\"/>\r\n </Style>\r\n <Style " + 
       "ss:ID=\"DateLiteral\">\r\n <NumberFormat " + 
       "ss:Format=\"mm/dd/yyyy;@\"/>\r\n </Style>\r\n " + 
       "</Styles>\r\n "; 
     System.IO.StreamWriter excelDoc = null; 
     excelDoc = new System.IO.StreamWriter(fileName); 

     int sheetCount = 1; 
     excelDoc.Write(startExcelXML); 
     foreach (DataTable table in source.Tables) 
     { 
      int rowCount = 0; 
      excelDoc.Write("<Worksheet ss:Name=\"" + table.TableName + "\">"); 
      excelDoc.Write("<Table>"); 
      excelDoc.Write("<Row>"); 
      for (int x = 0; x < table.Columns.Count; x++) 
      { 
       excelDoc.Write("<Cell ss:StyleID=\"BoldColumn\"><Data ss:Type=\"String\">"); 
       excelDoc.Write(table.Columns[x].ColumnName); 
       excelDoc.Write("</Data></Cell>"); 
      } 
      excelDoc.Write("</Row>"); 
      foreach (DataRow x in table.Rows) 
      { 
       rowCount++; 
       //if the number of rows is > 64000 create a new page to continue output 
       if (rowCount == 64000) 
       { 
        rowCount = 0; 
        sheetCount++; 
        excelDoc.Write("</Table>"); 
        excelDoc.Write(" </Worksheet>"); 
        excelDoc.Write("<Worksheet ss:Name=\"" + table.TableName + "\">"); 
        excelDoc.Write("<Table>"); 
       } 
       excelDoc.Write("<Row>"); //ID=" + rowCount + " 
       for (int y = 0; y < table.Columns.Count; y++) 
       { 
        System.Type rowType; 
        rowType = x[y].GetType(); 
        switch (rowType.ToString()) 
        { 
         case "System.String": 
          string XMLstring = x[y].ToString(); 
          XMLstring = XMLstring.Trim(); 
          XMLstring = XMLstring.Replace("&", "&"); 
          XMLstring = XMLstring.Replace(">", ">"); 
          XMLstring = XMLstring.Replace("<", "<"); 
          excelDoc.Write("<Cell ss:StyleID=\"StringLiteral\">" + 
              "<Data ss:Type=\"String\">"); 
          excelDoc.Write(XMLstring); 
          excelDoc.Write("</Data></Cell>"); 
          break; 
         case "System.DateTime": 
          //Excel has a specific Date Format of YYYY-MM-DD followed by 
          //the letter 'T' then hh:mm:sss.lll Example 2005-01-31T24:01:21.000 
          //The Following Code puts the date stored in XMLDate 
          //to the format above 
          DateTime XMLDate = (DateTime)x[y]; 
          string XMLDatetoString = ""; //Excel Converted Date 
          XMLDatetoString = XMLDate.Year.ToString() + 
           "-" + 
           (XMLDate.Month < 10 ? "0" + 
           XMLDate.Month.ToString() : XMLDate.Month.ToString()) + 
           "-" + 
           (XMLDate.Day < 10 ? "0" + 
           XMLDate.Day.ToString() : XMLDate.Day.ToString()) + 
           "T" + 
           (XMLDate.Hour < 10 ? "0" + 
           XMLDate.Hour.ToString() : XMLDate.Hour.ToString()) + 
           ":" + 
           (XMLDate.Minute < 10 ? "0" + 
           XMLDate.Minute.ToString() : XMLDate.Minute.ToString()) + 
           ":" + 
           (XMLDate.Second < 10 ? "0" + 
           XMLDate.Second.ToString() : XMLDate.Second.ToString()) + 
           ".000"; 
          excelDoc.Write("<Cell ss:StyleID=\"DateLiteral\">" + 
             "<Data ss:Type=\"DateTime\">"); 
          excelDoc.Write(XMLDatetoString); 
          excelDoc.Write("</Data></Cell>"); 
          break; 
         case "System.Boolean": 
          excelDoc.Write("<Cell ss:StyleID=\"StringLiteral\">" + 
             "<Data ss:Type=\"String\">"); 
          excelDoc.Write(x[y].ToString()); 
          excelDoc.Write("</Data></Cell>"); 
          break; 
         case "System.Int16": 
         case "System.Int32": 
         case "System.Int64": 
         case "System.Byte": 
          excelDoc.Write("<Cell ss:StyleID=\"Integer\">" + 
            "<Data ss:Type=\"Number\">"); 
          excelDoc.Write(x[y].ToString()); 
          excelDoc.Write("</Data></Cell>"); 
          break; 
         case "System.Decimal": 
         case "System.Double": 
          excelDoc.Write("<Cell ss:StyleID=\"Decimal\">" + 
            "<Data ss:Type=\"Number\">"); 
          excelDoc.Write(x[y].ToString()); 
          excelDoc.Write("</Data></Cell>"); 
          break; 
         case "System.DBNull": 
          excelDoc.Write("<Cell ss:StyleID=\"StringLiteral\">" + 
            "<Data ss:Type=\"String\">"); 
          excelDoc.Write(""); 
          excelDoc.Write("</Data></Cell>"); 
          break; 
         default: 
          throw (new Exception(rowType.ToString() + " not handled.")); 
        } 
       } 
       excelDoc.Write("</Row>"); 
      } 
      excelDoc.Write("</Table>"); 
      excelDoc.Write(" </Worksheet>"); 
      sheetCount++; 
     } 


     excelDoc.Write(endExcelXML); 
     excelDoc.Close(); 
    } 
  0

Как говорится в статье, это XML, который Excel будет читать, а не как файл XLS, а это значит, что он может работать только в Excel, а не в других программах, которые читают электронные таблицы. Но это, вероятно, лучше, чем ответы на эквивалентную таблицу HTML здесь! 23 июл. 152015-07-23 09:39:24

  0

Поддерживает *** xlsx ***? _OpenXML_? 16 фев. 172017-02-16 14:52:13


9

OpenXML также является хорошей альтернативой, которая помогает избежать установки MS Excel на server.The Open XML SDK 2.0, представленной Microsoft упрощает задачу манипулирования Open XML пакетов и основные элементы схемы Open XML в пакете. Интерфейс программирования API Open XML (API) инкапсулирует многие общие задачи, которые разработчики выполняют в пакетах Open XML.

Проверить это OpenXML: Alternative that helps avoid installing MS Excel on Server


11

Syncfusion Essential XlsIO может это сделать. Он не зависит от офиса Microsoft, а также имеет определенную поддержку для разных платформ.

Пример кода:

//Creates a new instance for ExcelEngine. 
ExcelEngine excelEngine = new ExcelEngine(); 
//Loads or open an existing workbook through Open method of IWorkbooks 
IWorkbook workbook = excelEngine.Excel.Workbooks.Open(fileName); 
//To-Do some manipulation| 
//To-Do some manipulation 
//Set the version of the workbook. 
workbook.Version = ExcelVersion.Excel2013; 
//Save the workbook in file system as xlsx format 
workbook.SaveAs(outputFileName); 

Весь набор элементов управления предоставляется бесплатно в рамках программы community license, если вы имеете право (менее 1 миллиона долларов в доходе). Примечание. Я работаю в Syncfusion.


4

Самый простой и быстрый способ создания файла Excel с C# - использовать инструмент производительности Open XML. Инструмент производительности Open XML поставляется с установкой Open XML SDK. Инструмент реверсирует любой файл Excel в код C#. Затем код C# можно использовать для повторного создания этого файла.

Обзор процесса задействованного:

  1. Установите Open XML SDK с инструментом.
  2. Создайте файл Excel, используя последний клиент Excel с желаемым внешним видом. Назовите его DesiredLook.xlsx.
  3. С открытым инструментом DesiredLook.xlsx и нажмите кнопку «Код отражения» вверху. enter image description here
  4. Код C# для вашего файла будет создан в правой панели инструмента. Добавьте это в свое решение C# и создайте файлы с этим желаемым внешним видом.

В качестве бонуса этот метод работает для любых файлов Word и PowerPoint. Будучи разработчиком C#, вы вносите изменения в код в соответствии с вашими потребностями.

Я разработал simple WPF app on github, который будет работать под Windows для этой цели. Существует класс-заполнитель под названием GeneratedClass, где вы можете вставить сгенерированный код. Если вернуться назад одна версия файла, он будет генерировать Excel файл, как это:

enter image description here


0

Если вы таблицу данных или DataGridView из кода вы можете сохранить все данные, используя этот простой метод.этот метод не рекомендуется, но он работает на 100%, даже если вы не устанавливаете MS Excel на свой компьютер.

try 
{ 
    SaveFileDialog saveFileDialog1 = new SaveFileDialog(); 
    saveFileDialog1.Filter = "Excel Documents (*.xls)|*.xls"; 
    saveFileDialog1.FileName = "Employee Details.xls"; 
    if (saveFileDialog1.ShowDialog() == DialogResult.OK) 
    { 
    string fname = saveFileDialog1.FileName; 
    StreamWriter wr = new StreamWriter(fname); 
    for (int i = 0; i <DataTable.Columns.Count; i++) 
    { 
    wr.Write(DataTable.Columns[i].ToString().ToUpper() + "\t"); 
    } 
    wr.WriteLine(); 

    //write rows to excel file 
    for (int i = 0; i < (DataTable.Rows.Count); i++) 
    { 
    for (int j = 0; j < DataTable.Columns.Count; j++) 
    { 
    if (DataTable.Rows[i][j] != null) 
    { 
    wr.Write(Convert.ToString(getallData.Rows[i][j]) + "\t"); 
    } 
    else 
    { 
    wr.Write("\t"); 
    } 
    } 
    //go to next line 
    wr.WriteLine(); 
    } 
    //close file 
    wr.Close(); 
    } 
    } 
    catch (Exception) 
    { 
    MessageBox.Show("Error Create Excel Sheet!"); 
    } 

0

Некоторое время назад я создал DLL поверх NPOI. Это очень просто использовать:

IList<DummyPerson> dummyPeople = new List<DummyPerson>(); 
//Add data to dummyPeople... 
IExportEngine engine = new ExcelExportEngine(); 
engine.AddData(dummyPeople); 
MemoryStream memory = engine.Export(); 

Вы можете прочитать об этом на here.

Кстати, на 100% с открытым исходным кодом. Не стесняйтесь использовать, редактировать и делиться;)


0

Один очень простой вариант, который часто упускается из виду - это создать отчет .rdlc с использованием Microsoft Reporting и экспортировать его в формат excel. Вы можете создать его в визуально студии и создать файл с помощью:

localReport.Render("EXCELOPENXML", null, ((name, ext, encoding, mimeType, willSeek) => stream = new FileStream(name, FileMode.CreateNew)), out warnings); 

Вы также можете экспортировать это сделать .doc или .pdf, используя "WORDOPENXML" и "PDF" соответственно, и она поддерживается на различных платформах, таких как ASP.NET и SSRS.

Намного проще вносить изменения в визуальный конструктор, где вы можете увидеть результаты и доверять мне, как только вы начнете группировать данные, заголовки групп форматирования, добавляя новые разделы, вы не хотите связываться с десятками XML узлы.