Как мне создать файл Excel (.XLS и .XLSX) на C # без установки Microsoft Office?[закрыто]

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

  •  02-07-2019
  •  | 
  •  

Вопрос

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

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

Решение

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

ПревоСходная библиотека

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

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

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

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

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

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

Вот пара ссылок для быстрого ознакомления:
ПревоСходная библиотека - GNU Lesser GPL
ЭППлус - Малая Общая общественная лицензия GNU (LGPL)
NPOI - Лицензия Apache

Вот несколько примеров кода для 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, но описанная выше функциональность - это то, что меня действительно впечатлило.

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

Если вас устраивает формат xlsx, попробуйте мой проект на GitHub, ЭППлус.Все началось с исходного кода из ExcelPackage, но сегодня он полностью переписан.Он поддерживает диапазоны, стиль ячеек, диаграммы, фигуры, изображения, именованные диапазоны, автофильтр и многое другое.

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

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

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

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

Создание электронных таблиц Excel .XLS и .XLSX на C#

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

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

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

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

Ссылки:

Вы можете использовать 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();
}

РЕДАКТИРОВАТЬ - Еще несколько ссылок:

Коммерческое решение, Устройство электронных таблиц для .NET сделаю это.

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

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

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

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

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

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

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

Вы можете использовать ExcelXmlWriter.

Это работает нормально.

Если вы создаете файлы Excel 2007/2010, попробуйте этот проект с открытым исходным кодом: https://github.com/closedxml/closedxml

Он предоставляет объектно-ориентированный способ манипулирования файлами (аналогичный VBA), не сталкиваясь с трудностями, связанными с XML-документами.Он может быть использован любым .СЕТЕВЫМ языком, таким как 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");

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

Вы могли бы быть впечатлены, если бы еще не пробовали их.

Пожалуйста, имейте в виду, что Microsoft стойка на этом:

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

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

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

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

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

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

Это не становится намного проще, чем это...

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

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

Возможно, вы захотите взглянуть на GemBox.Электронная таблица.

У них есть бесплатная версия со всеми функциями, но ограниченная 150 строками на листе и 5 листами в рабочей тетради, если это соответствует вашим потребностям.

Самому мне пока не приходилось им пользоваться, но выглядит интересно.

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

Пример кода:

//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);

Весь набор элементов управления доступен бесплатно через лицензия сообщества программа, если вы соответствуете требованиям (доход менее 1 миллиона долларов США).Примечание:Я работаю в Syncfusion.

Что ж,

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

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

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

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

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

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

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

Посмотри на это OpenXML:Альтернатива, которая помогает избежать установки MS Excel на сервер

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

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

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

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

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

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

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

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

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();
    }

IKVM + POI

Или вы могли бы использовать Взаимодействие...

Вот способ сделать это с помощью LINQ to XML, дополненный примером кода:

Быстрый импорт и экспорт данных Excel с помощью LINQ в XML

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

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

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

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

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

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

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, это может вам помочь

Вы можете создавать красиво отформатированные файлы 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};
    }
}

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

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

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

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

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

enter image description here

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

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

болтон.

Посмотрите на примеры создания файлов Excel.

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

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

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

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