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

时间:2009-03-13 16:51:59

标签: c# asp.net excel openxml spreadsheet

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

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

修改:用例

客户在浏览器中加载gridview(使用ajax框架构建),gridview直接链接到sql数据库。 我把一个按钮'export to excel'让客户在他的计算机上保存这个gridview数据,我想推出一个干净的excel下载。

这里提出的解决方案并不干净,比如发送一个html文档并将标题更改为excel文档等,我现在正在搜索一个关于codeplex的简单解决方案,我会告诉你。

4 个答案:

答案 0 :(得分:15)

入门套件

首先我已经下载了Open XML Format SDK 2.0

它附带了3个有用的工具:

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

  • DocumentReflector.exe自动 生成c#来构建一个 来自代码的电子表格。
  • OpenXmlClassesExplorer.exe显示 Ecma规范和课程 文档(使用MSDN样式 格式)。
  • OpenXmlDiff.exe以图形方式进行比较 两个打开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");

答案 1 :(得分:2)

只需设置Response.ContentType =“application / vnd.ms-excel”,您的页面将在客户端浏览器上呈现为Excel工作表

Sample code here

答案 2 :(得分:0)

根据Excel功能的广泛程度,有很多方法可以解决这个问题。如果Excel只是一个电子表格并且没有内置的直接Excel功能,Binoj的答案就有效。客户端可以添加功能,连接等。这些是“哑”的excel文档,直到客户端做了这样的事情。

要创建功能更全面的Excel文档,您可以随意考虑两个基本选择。

  1. 使用办公室组件(re:bad)创建Excel文档或第三方组件,如SoftArtisan的ExcelWriter。很棒的组件,但是有成本。

  2. 在允许导出到Excel的页面上使用控件。大多数ASSP.NET控件供应商都在其网格上具有此功能。

  3. 选项#1几乎可以让您使用Excel的所有功能。选项#2有点受限,至少在我试过的控件中是这样。

答案 3 :(得分:0)