Как экспортировать список <t>в Excel в результате веб-запроса - PullRequest
2 голосов
/ 11 января 2011

Я хочу знать, как экспортировать список (например, сетку данных), чтобы преуспеть.

Я говорю не о CSV, а о реальном файле xlsx, который является XML и сжатым и т. Д.

Я видел только несколько примеров об Open XML от Microsoft.

Второе и самое важное: как сохранить этот Excel не на диске вообще, а вместо этого записать его обратно клиенту навеб с использованием response.write ....

Bill.

Ответы [ 3 ]

2 голосов
/ 11 января 2011

Я обычно делаю это, визуализируя элемент управления DataGrid, связанный со списком, и я устанавливаю тип содержимого ответа "application / vnd.ms-excel".Затем файл открывается в Excel.Excel выдает предупреждение о неправильном типе файла, но, тем не менее, открывает его.

Код, который я использую, выглядит примерно так в Page.Render ():

Response.ContentType = "application/vnd.ms-excel";
Response.AddHeader("Content-Disposition", "attachment;filename=myfilename.xls");

var grid = new DataGrid();
grid.DataSource = myList;
grid.DataBind();
grid.Render(writer);

Response.End();

IЗнайте, что это не ответит на ваш вопрос напрямую, но, возможно, это все равно поможет.

1 голос
/ 11 января 2011

Вы захотите использовать Office Open XML SDK (или библиотеку, которая реализует этот SDK для вас) в любом сценарии.Я рекомендую сначала ознакомиться с форматами файлов, и сайт Open XML Developer может помочь.Это часто может быть нетривиальной задачей, но вы можете сделать вашу жизнь проще, используя XLINQ, если ваши данные действительно так просты.

List<Person> people = new List<Person>(sourceData);
XNamespace ns = @"http://schemas.openxmlformats.org/spreadsheetml/2006/main";

Func<Person, XElement> nameColumn =
    (person) => new XElement(ns + "c", new XAttribute("r", "A1"),
                    new XElement(ns + "v", person.Name);
Func<Person, XElement> ageColumn =
    (person) => new XElement(ns + "c", new XAttribute("r", "A2"),
                    new XElement(ns + "v", person.Age.ToString());

var worksheet = new XDocument(
    new XElement(ns + "worksheet",
        new XElement(ns + "sheetData",
            people.Select((pp,rr) =>
                new XElement(ns + "row",
                             new XAttribute("r", (rr + 1).ToString()),
                             nameColumn(pp),
                             ageColumn(pp))
            ).ToArray()
        )
    )
);
0 голосов
/ 11 января 2011

Исходя из своих знаний, я бы:

  1. Создать новый файл XLS с помощью Office Interop.
  2. Записать файл на диск.
  3. Отправить его клиентуиспользуя Response.WriteFile.
  4. Удалить файл с диска.

Я уверен, что есть более удобный способ.

Редактировать: Выочевидно, следует взглянуть на это вместо .:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...