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

如何使用asp.net创build和下载excel文件?

目的是使用XML,LINQ或其他方式通过浏览器发送Excel文档给客户。

编辑: 用例

客户在浏览器中加载gridview(使用ajax框架),gridview直接链接到一个sql数据库。 我把一个button“出口到Excel”,让客户保存在他的电脑上的这个gridview数据ansd我想推出一个干净的Excel下载。

这里提出的解决scheme是不干净的,像发送一个HTML文件,并将头文件改为Excel文件等,我现在正在寻找一个简单的Codeplex解决scheme,我会让你知道。

入门套件

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

它有3个有用的工具:

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

  • DocumentReflector.exe自动生成的C#从代码构build电子表格。
  • OpenXmlClassesExplorer.exe显示Ecma规范和类文档(使用MSDN样式格式)。
  • OpenXmlDiff.exe以graphics方式比较两个Open XML文件并search错误。

我build议任何开始 .xlsx 重命名 .zip的人 ,以便您可以看到驱动我们电子表格的XML文件(例如我们的工作表位于“xl \ worksheets”中)。


代码

免责声明 :我已经从MSDN技术文章中盗取了所有代码; D

下面的代码使用我手动创build的* .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(); } 

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


最后,我将用户redirect到我生成的spredsheet(从我的aspx)

  context.Response.Redirect("Oxml-tpl/generated.xlsx"); 

只需设置Response.ContentType =“application / vnd.ms-excel”,你的页面将作为客户端浏览器的excel表格

示例代码在这里

有很多方法可以处理这个问题,具体取决于Excel的function。 如果Excel只是一个电子表格,并且没有内置的直接Excelfunction,Binoj的答案就可以工作。客户端可以添加function,连接等等。这些都是“哑”的excel文档,直到客户端完成。

要创build一个function更全面的Excel文档,您有两个基本的select,我可以想到的。

  1. 使用办公室组件(re:bad)来创build一个excel文档,或者像SoftArtisan的ExcelWriter这样的第三方组件。 伟大的组件,但有一个成本。

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

选项#1允许你几乎所有的Excelfunction。 选项#2是有限的,至less在我试过的控制。

关于如何从Erika Ehrli顶级出口的优秀文章http://blogs.msdn.com/erikaehrli/archive/2009/01/30/how-to-export-data-to-excel-from-an-asp-net -应用-避免最文件格式不同,prompt.aspx