Создать книгу Excel в asp.net

Мне нужно сгенерировать файл Excel для пользователя на FL после нажатия кнопки. Раньше я использовал Netoffice, который отлично работал с настольными приложениями. Но теперь я хочу сделать то же самое с приложением asp.net. Таким образом, мой серверный код не имеет доступа к клиентской копии Excel. Какой подход мне выбрать?


person user194076    schedule 07.04.2012    source источник
comment
Очень похоже на stackoverflow.com / questions / 150339 /   -  person Mathias    schedule 08.04.2012


Ответы (5)


Используйте EPPlus. Это позволяет вам создавать электронные таблицы Excel на сервере. Я использовал его, и он отлично работал. Он поддерживает расширенные функции.

using (ExcelPackage pck = new ExcelPackage())
{
    //Create the worksheet
    ExcelWorksheet ws = pck.Workbook.Worksheets.Add("Demo");

    //Load the datatable into the sheet, starting from cell A1. Print the column names on row 1
    ws.Cells["A1"].LoadFromDataTable(tbl, true);

    //Format the header for column 1-3
    using (ExcelRange rng = ws.Cells["A1:C1"])
    {
        rng.Style.Font.Bold = true;
        rng.Style.Fill.PatternType = ExcelFillStyle.Solid;

        //Set Pattern for the background to Solid
        rng.Style.Fill.BackgroundColor.SetColor(Color.FromArgb(79, 129, 189));

        //Set color to dark blue
        rng.Style.Font.Color.SetColor(Color.White);
    }

    //Example how to Format Column 1 as numeric 
    using (ExcelRange col = ws.Cells[2, 1, 2 + tbl.Rows.Count, 1])
    {
        col.Style.Numberformat.Format = "#,##0.00";
        col.Style.HorizontalAlignment = ExcelHorizontalAlignment.Right;
    }

    //Write it back to the client
    Response.Clear();
    Response.AddHeader("content-disposition", "attachment;  filename=file.xlsx");
    Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";                    
    Response.BinaryWrite(pck.GetAsByteArray());
    Response.End();
}
person Tyler Treat    schedule 07.04.2012
comment
Выглядит круто. Хотя я не могу найти пример того, как создать книгу и загрузить ее клиенту без сохранения на сервер? Вы знаете простой способ сделать это? - person user194076; 08.04.2012
comment
Я добавил код, который показывает создание книги с электронной таблицей и запись ее клиенту. - person Tyler Treat; 08.04.2012
comment
Следует ли загрузить EPPlus как Dll и связать с ним ссылку на мой проект? Я бы хотел его использовать ... - person Rick; 20.03.2019

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

Open XML 2.0 SDK

person John Fisher    schedule 07.04.2012

Netoffice требует наличия MS Office на исполняемой машине. Есть ли на вашем сервере?

person Dima    schedule 07.04.2012

Вы можете попробовать простую HTML-таблицу (включая теги html, head и body). Просто сохраните его с расширением XLS.


введите описание изображения здесь

person Dima    schedule 07.04.2012
comment
Нет, мне нужны сложные манипуляции с Excel. netoffice будет отлично работать, но я не понимаю, почему он не может работать с asp.net - person user194076; 08.04.2012

Вы можете использовать DataGrid для создания файлов Excel на лету. Не требует Excel.

public static void ExportDataSetToExcel(DataSet ds, string filename)
{
    HttpResponse response = HttpContext.Current.Response;

    // first let's clean up the response.object
    response.Clear();
    response.Charset = "";

    // set the response mime type for excel
    response.ContentType = "application/vnd.ms-excel";
    response.AddHeader(
        "Content-Disposition",
        "attachment;filename=\"" + filename + "\""
    );

   // create a string writer
   using (StringWriter sw = new StringWriter())
   {
       using (HtmlTextWriter htw = new HtmlTextWriter(sw))
       {
            // instantiate a datagrid
            DataGrid dg = new DataGrid();
            dg.DataSource = ds.Tables[0];
            dg.DataBind();
            dg.RenderControl(htw);
            response.Write(sw.ToString());
            dg.Dispose();
            ds.Dispose();
            response.End();
       }
    }
}
person Deb    schedule 08.04.2012
comment
Это решение возвращает HTML клиенту, но объявляет, что это на самом деле файл Excel. Проблема в том, что Excel использует ваш маленький обман и выдает пользователю диалоговое окно с предупреждением, в котором объясняется, что кто-то пытается им солгать. - person Ian Boyd; 17.10.2012