как создать и скачать документ Excel, используя asp.net - PullRequest
11 голосов
/ 13 марта 2009

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

Целью является использование xml, linq или чего-либо еще для отправки документа Excel клиенту через браузер.

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

Клиент загружает в браузер gridview (созданный с помощью ajax framework), gridview напрямую связан с базой данных sql. Я поставил кнопку «Экспортировать в Excel», чтобы позволить клиенту сохранить эти данные сетки на своем компьютере и начать чистую загрузку Excel.

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

Ответы [ 4 ]

15 голосов
/ 22 марта 2009

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

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

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

C: \ Program Files \ Open XML Format SDK \ V2.0 \ tools

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

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


код

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

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

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

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

        }

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


Наконец, я перенаправляю пользователя в свою созданную таблицу (из моего aspx)

 context.Response.Redirect("Oxml-tpl/generated.xlsx");
2 голосов
/ 13 марта 2009

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

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

0 голосов
/ 17 октября 2009

Хорошая статья о том, как лучше экспортировать из Эрика Эрли http://blogs.msdn.com/erikaehrli/archive/2009/01/30/how-to-export-data-to-excel-from-an-asp-net-application-avoid-the-file-format-differ-prompt.aspx

0 голосов
/ 13 марта 2009

Существует довольно много способов справиться с этим, в зависимости от того, насколько обширна функциональность Excel. Ответ Binoj работает, если Excel является просто электронной таблицей и не имеет встроенной прямой функциональности Excel. Клиент может добавлять функциональные возможности, конкататы и т. Д. Это «глупые» документы Excel, пока клиент ничего не сделает.

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

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

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

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

...