Вопрос: Создайте файл Excel (.XLS и .XLSX) с C #


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


1539


источник


Ответы:


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

ExcelLibrary

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

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

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

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

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

Кроме того, как отметил @ АртёмЦарионов ниже, EPPlus имеет поддержку Pivot Tables, и ExcelLibrary может иметь некоторую поддержку ( Проблема сводной таблицы в 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, но приведенная выше функциональность меня впечатлила.


853



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


482



Я успешно использовал следующие проекты с открытым исходным кодом:

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

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

Взгляните на мои сообщения в блоге:

Создание таблиц Excel .XLS и .XLSX в C #

NPOI с таблицей Excel и динамической диаграммой


142



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

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

  • Не требуется установка Office
  • Сделано Microsoft = достойная документация MSDN
  • Только одна .Net dll для использования в проекте
  • SDK поставляется со многими инструментами, такими как diff, validator и т. Д.

Ссылки:


135



Вы можете использовать OLEDB для создания и обработки файлов Excel. Проверь это: Чтение и запись Excel с использованием 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 - Еще несколько ссылок:


91



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

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

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


70



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

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

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


53



An extremely lightweight option may be to use HTML tables. Just create head, body, and table tags in a file, and save it as a file with an .xls extension. There are Microsoft specific attributes that you can use to style the output, including formulas.

I realize that you may not be coding this in a web application, but here is an example of the composition of an Excel file via an HTML table. This technique could be used if you were coding a console app, desktop app, or service.


51



You can use ExcelXmlWriter http://www.carlosag.net/Tools/ExcelXmlWriter/

It works fine.


39



You actually might want to check out the interop classes. You say no OLE (which this isn't), but the interop classes are very easy to use.

You might be impressed if you haven't tried them.

Please be warned of Microsoft's stance on this:

Microsoft does not currently recommend, and does not support, Automation of Microsoft Office applications from any unattended, non-interactive client application or component (including ASP, ASP.NET, DCOM, and NT Services), because Office may exhibit unstable behavior and/or deadlock when Office is run in this environment.


36



If you're creating Excel 2007/2010 files give this open source project a try: http://closedxml.codeplex.com

It provides an object oriented way to manipulate the files (similar to VBA) without dealing with the hassles of XML Documents. It can be used by any .NET language like C# and Visual Basic (VB).

ClosedXML allows you to create Excel 2007/2010 files without the Excel application. The typical example is creating Excel reports on a web server:

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

34



Here's a completely free C# library, which lets you export from a DataSet, DataTable or List<> into a genuine Excel 2007 .xlsx file, using the OpenXML libraries:

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

Full source code is provided - free of charge - along with instructions, and a demo application.

After adding this class to your application, you can export your DataSet to Excel in just one line of code:

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

It doesn't get much simpler than that...

And it doesn't even require Excel to be present on your server.


25