3

我需要在单击按钮时为用户生成一个 excel 文件。我之前使用的是Netoffice,它适用于桌面应用程序。但现在我想用一个 asp.net 应用程序做同样的事情。这样我的服务器代码就无法访问客户端的 excel 副本。我应该采取什么方法?

4

5 回答 5

8

使用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();
}
于 2012-04-07T20:31:43.993 回答
3

最灵活且最有可能完全满足您需要的方法是做一些工作,但它是免费的——而且确实有效。使用该工具包查看现有文档以了解如何创建所需的功能。

打开 XML 2.0 SDK

于 2012-04-07T20:30:58.237 回答
0

您可以尝试简单的 HTML 表格(包括 html、head 和 body 标签)。只需使用 XLS 扩展名保存即可。


在此处输入图像描述

于 2012-04-07T20:29:26.420 回答
0

Netoffice 在执行机器上需要 MS Office。你的服务器有吗?

于 2012-04-07T20:34:53.050 回答
0

您可以使用 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();
       }
    }
}
于 2012-04-08T05:02:32.463 回答