【问题标题】:Need a library for creating binary Excel files from ASP.NET anyone know a good one?需要一个用于从 ASP.NET 创建二进制 Excel 文件的库,有人知道一个好的库吗?
【发布时间】:2010-09-28 12:51:00
【问题描述】:

如果可能的话,最好是免费的。

我尝试过使用 xml / html 格式,但我遇到了一个问题,即由于内容与 MIME 类型不匹配(工作表是在网络上下载的),excel 会向用户提示安全警告,否似乎可以解决这个问题。

【问题讨论】:

  • 您确定使用 Response.AddHeaders 添加了 content-type 和 content-disposition 的标头吗?另请注意,office 2007 及更高版本的 mime 类型(内容类型)与旧版本的 office 不同。
  • 是的,我使用了以下内容:
  • Response.AddHeader("Content-Disposition", "Attachment; filename=Report.xls"); Response.ContentType = "application/vnd.ms-excel";
  • 说真的,我很惊讶这是一个如此难以解决的问题,而无需花费电子表格设备许可证之类的东西!

标签: .net asp.net excel


【解决方案1】:
【解决方案2】:

基于这个问题,我不确定您是否需要支持旧的 2003 (.xls) 版本,但我最近使用了 codeplex 的 ExcelPackage 库来创建 xlsx OOXML,它非常适合我的需求。

【讨论】:

    【解决方案3】:

    [更新]

    从Codeplex 下载 ExcelPackage 库。这是 System.IO.Packaging 的包装器,用于创建 Open XML 格式文件(docx、xlsx、pptx)。

    添加的示例不包含颜色格式,但请查看站点上的示例以使用模板,或阅读 Codeplex 上关于 qa 的讨论,了解如何为每个单元格设置更多样式选项。

    public void CreateExcel()
    {
        FileInfo newFile = new FileInfo(@"C:\temp\test.xlsx");
        using (ExcelPackage xlPackage = new ExcelPackage(newFile))
        {
            ExcelWorksheet worksheet = xlPackage.Workbook.Worksheets.Add("People");
    
            // Titles in Column 1
            worksheet.Cell(1, 1).Value = "Name";
            worksheet.Cell(3, 1).Value = "Tom";
            worksheet.Cell(4, 1).Value = "Henry";
    
            worksheet.Column(1).Width = 20; // set column 1 width                
    
            // Values in column 2
            worksheet.Cell(1, 2).Value = "Age";
            ExcelCell cell1 = worksheet.Cell(3, 2);                
            cell1.Value = "42"; // Age of Tom
            ExcelCell cell2 = worksheet.Cell(4, 2);
            cell2.Value = "19"; // Age of Henry
    
            string calcStartAddress = cell1.CellAddress;
            string calcEndAddress = cell2.CellAddress;
    
            worksheet.Cell(5, 2).Formula = string.Format("SUM({0}:{1})",calcStartAddress, calcEndAddress);
            worksheet.Cell(6, 2).Formula = string.Format("AVERAGE({0}:{1})", calcStartAddress, calcEndAddress);
            xlPackage.Save();
        }
    }
    


    [原答案]

    您可以使用 ADO.Net。

    下载Microsoft Access Database Engine 2010 Redistributable 并查看this post,了解如何使用 ADO.Net 读取/写入 Excel 文件。

    只需将连接字符串更改为

    Provider=Microsoft.ACE.OLEDB.12.0; data source=pathtoyourfile; Extended Properties=Excel 12.0;

    使用 v12 和 ACE.OLEDB 连接而不是 Jet.OLEDB。

    【讨论】:

    • 根据第一个链接扩展属性应该设置为“Excel 14.0”
    • 我知道,但我遇到了麻烦,12 似乎可以工作。 12 是 Office 2007 的版本号,而 14 是 2010 的版本号。但文件格式在 2007 年和 2010 年之间没有改变。
    • 不幸的是,我需要比这似乎提供更多的格式控制。
    • 添加了使用 ExcelPackage 的链接和代码示例。并且您应该能够使用模板来设置您想要的样式,或者像论坛中提到的那样修改代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多