как создать и загрузить документ excel с помощью asp.net

Как создать и загрузить документ excel с помощью asp.net ?

цель состоит в том, чтобы использовать xml, linq или что угодно, чтобы отправить документ excel клиенту через браузер.

Edit:пример использования

клиент загружает gridview (сделанный с AJAX framework ) в браузере, gridview напрямую связан с базой данных sql. Я поставил кнопку "экспорт в excel", чтобы позволить клиенту сохранить эти данные gridview на своем компьютере, и я хотел бы запустить чистая загрузка excel.

предлагаемые здесь решения не являются чистыми, например, отправить html-документ и изменить заголовок на документ excel и т.д., Я ищу простое решение на codeplex прямо сейчас, я дам вам знать.

4 ответов


стартовый комплект

сначала я скачал Open XML Format SDK 2.0.

он поставляется с 3 полезными инструментами в :

C:\Program файлы\Open XML формат SDK\V2.0\tools

  • DocumentReflector.exe wich авто создайте c# для построения таблицы из кода.
  • OpenXmlClassesExplorer.exe дисплей Спецификация Ecma и класс документация (с использованием стиля MSDN формат.)
  • OpenXmlDiff.exe графически сравнить два файла Open XML и поиск ошибки.

Я предлагаю всем, кто начинают переименовать .XLSX-файл to .zip, поэтому вы можете увидеть XML-файлы, которые управляют нашей электронной таблицей (например, наши листы находятся в "xl\worksheets" ).


код

отказ от ответственности: я украл весь код из MSDN технические статья; D

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

ссылки на пространства имен

using System.IO;
using System.Xml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Spreadsheet;
using DocumentFormat.OpenXml;


// Database object
        DataClassesDataContext db = new DataClassesDataContext();

        // Make a copy of the template file.
        File.Copy(@"C:\inetpub\wwwroot\project.Web\Clients\Handlers\oxml-tpl\livreurs.xlsx", @"C:\inetpub\wwwroot\project.Web\Clients\Handlers\oxml-tpl\generated.xlsx", true);

        // Open the copied template workbook. 
        using (SpreadsheetDocument myWorkbook = SpreadsheetDocument.Open(@"C:\inetpub\wwwroot\project.Web\Clients\Handlers\oxml-tpl\generated.xlsx", true))
        {
            // Access the main Workbook part, which contains all references.
            WorkbookPart workbookPart = myWorkbook.WorkbookPart;

            // Get the first worksheet. 
            WorksheetPart worksheetPart = workbookPart.WorksheetParts.ElementAt(2);

            // The SheetData object will contain all the data.
            SheetData sheetData = worksheetPart.Worksheet.GetFirstChild<SheetData>();

            // Begining Row pointer                       
            int index = 2;

            // Database results
            var query = from t in db.Clients select t;

            // For each item in the database, add a Row to SheetData.
            foreach (var item in query)
            {
                // Cell related variable
                string Nom = item.Nom;

                // New Row
                Row row = new Row();
                row.RowIndex = (UInt32)index;

                // New Cell
                Cell cell = new Cell();
                cell.DataType = CellValues.InlineString;
                // Column A1, 2, 3 ... and so on
                cell.CellReference = "A"+index;

                // Create Text object
                Text t = new Text();
                t.Text = Nom;

                // Append Text to InlineString object
                InlineString inlineString = new InlineString();
                inlineString.AppendChild(t);

                // Append InlineString to Cell
                cell.AppendChild(inlineString);

                // Append Cell to Row
                row.AppendChild(cell);

                // Append Row to SheetData
                sheetData.AppendChild(row);

                // increase row pointer
                index++;                

            }

            // save
            worksheetPart.Worksheet.Save();

        }

Я еще не закончил, моя вторая задача-автоматически загрузить электронную таблицу после модификации.


наконец, я перенаправляю пользователя на мой сгенерированный spredsheet (из моего aspx)

 context.Response.Redirect("Oxml-tpl/generated.xlsx");

просто набор ответов.ContentType = " application / vnd.ms-excel " и ваша страница будет отображаться как лист excel в браузере клиентов

пример кода здесь


существует довольно много способов обработки этого, в зависимости от того, насколько обширна функциональность Excel. Ответ Binoj работает, если Excel-это просто электронная таблица и не имеет встроенных функций Excel. Клиент может добавить функциональность, concats, etc. Это "тупые" документы excel, пока клиент не сделает soemthing.

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

  1. используйте либо офис компоненты (re: bad) для создания документа excel или стороннего компонента, например, ExcelWriter SoftArtisan. Отличный компонент, но есть цена.

  2. используйте элемент управления на странице, который позволяет экспортировать в Excel. Большинство поставщиков ASSP.NET элементы управления имеют эту функцию в своих сетках.

опция #1 позволяет вам практически всю функциональность Excel. Вариант № 2 немного более ограничен, по крайней мере, в управления, которые я пробовал.