Създайте работна книга на 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