如何使用asp.net创建和下载Excel文档?

目的是使用xml,linq或其他任何方式通过浏览器将excel文档发送给客户。

编辑:用例

客户在浏览器中加载gridview(使用ajax框架制作),gridview直接链接到sql数据库。
我按下了“导出到excel”按钮,以使客户将此gridview数据保存在他的计算机上,而我想启动excel的全新下载。

此处提出的解决方案并不干净,例如发送html文档并将 header 更改为excel文档等,我现在正在Codeplex上搜索简单的解决方案,我会让您知道。

最佳答案

入门套件

首先,我下载了Open XML Format SDK 2.0

它在以下方面提供了3个有用的工具:

C:\Program Files\Open XML格式SDK\V2.0\tools

  • DocumentReflector.exe wich auto
    生成C#以构建一个
    代码中的电子表格。
  • OpenXmlClassesExplorer.exe显示
    Ecma规范和类别
    文档(使用MSDN样式
    格式)。
  • OpenXmlDiff.exe以图形方式进行比较
    两个Open XML文件并搜索
    错误。

  • 我建议开始使用重命名 .xlsx .zip 的人,这样您就可以看到驱动电子表格的XML文件(例如,工作表位于“xl\worksheets”中)。

    编码

    免责声明:我已经从MSDN technical article; D中窃取了所有代码。

    以下代码使用我手动制作的* .xlsx模板进行修改。

    命名空间引用
    using System.IO;
    using System.Xml;
    using DocumentFormat.OpenXml.Packaging;
    using DocumentFormat.OpenXml.Spreadsheet;
    using DocumentFormat.OpenXml;
    
    
    // Database object
            DataClassesDataContext db = new DataClassesDataContext();
    
            // Make a copy of the template file.
            File.Copy(@"C:\inetpub\wwwroot\project.Web\Clients\Handlers\oxml-tpl\livreurs.xlsx", @"C:\inetpub\wwwroot\project.Web\Clients\Handlers\oxml-tpl\generated.xlsx", true);
    
            // Open the copied template workbook.
            using (SpreadsheetDocument myWorkbook = SpreadsheetDocument.Open(@"C:\inetpub\wwwroot\project.Web\Clients\Handlers\oxml-tpl\generated.xlsx", true))
            {
                // Access the main Workbook part, which contains all references.
                WorkbookPart workbookPart = myWorkbook.WorkbookPart;
    
                // Get the first worksheet.
                WorksheetPart worksheetPart = workbookPart.WorksheetParts.ElementAt(2);
    
                // The SheetData object will contain all the data.
                SheetData sheetData = worksheetPart.Worksheet.GetFirstChild<SheetData>();
    
                // Begining Row pointer
                int index = 2;
    
                // Database results
                var query = from t in db.Clients select t;
    
                // For each item in the database, add a Row to SheetData.
                foreach (var item in query)
                {
                    // Cell related variable
                    string Nom = item.Nom;
    
                    // New Row
                    Row row = new Row();
                    row.RowIndex = (UInt32)index;
    
                    // New Cell
                    Cell cell = new Cell();
                    cell.DataType = CellValues.InlineString;
                    // Column A1, 2, 3 ... and so on
                    cell.CellReference = "A"+index;
    
                    // Create Text object
                    Text t = new Text();
                    t.Text = Nom;
    
                    // Append Text to InlineString object
                    InlineString inlineString = new InlineString();
                    inlineString.AppendChild(t);
    
                    // Append InlineString to Cell
                    cell.AppendChild(inlineString);
    
                    // Append Cell to Row
                    row.AppendChild(cell);
    
                    // Append Row to SheetData
                    sheetData.AppendChild(row);
    
                    // increase row pointer
                    index++;
    
                }
    
                // save
                worksheetPart.Worksheet.Save();
    
            }
    

    我还没有完成,我的第二项工作是修改后自动下载电子表格。

    最后,我将用户重定向到我生成的spredsheet(从aspx)
     context.Response.Redirect("Oxml-tpl/generated.xlsx");
    

    关于c# - 如何使用asp.net创建和下载Excel文档,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/643643/

    10-11 17:30