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



библиотека для (25)

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


Answers

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

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

Болтон.


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

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

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

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


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

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

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

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


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

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

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

Ссылки:


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

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



IKVM + POI

Или вы можете использовать Interop ...


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



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

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

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


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, который может помочь вам


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

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

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


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

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

Преимущества для sylk заключаются в том, что вы можете отформатировать ячейки.


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

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

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


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

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



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

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


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

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

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

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

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

Это не намного проще, чем это ...

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


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

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

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

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


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

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


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

Он обеспечивает объектно-ориентированный способ манипулирования файлами (аналогично 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");

Вы можете использовать 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 - Еще несколько ссылок:


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

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


Вы можете взглянуть на GemBox.Spreadsheet .

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

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


Это безопасный метод конвертации перечислений с перечислением:

public static bool TryConvertToEnum<T>(this int instance, out T result)
  where T: struct
{
  var enumType = typeof (T);
  if (!enumType.IsEnum)
  {
    throw new ArgumentException("The generic type must be an enum.");
  }
  var success = Enum.IsDefined(enumType, instance);
  if (success)
  {
    result = (T)Enum.ToObject(enumType, instance);
  }
  else
  {
    result = default(T);
  }
  return success;
}




c# .net excel file-io