如何使用asp.net创建和下载excel文档?
目的是使用xml,linq或其他任何方式通过浏览器向客户发送excel文档。
修改:用例
客户在浏览器中加载gridview(使用ajax框架构建),gridview直接链接到sql数据库。 我把一个按钮'export to excel'让客户在他的计算机上保存这个gridview数据,我想推出一个干净的excel下载。
这里提出的解决方案并不干净,比如发送一个html文档并将标题更改为excel文档等,我现在正在搜索一个关于codeplex的简单解决方案,我会告诉你。
答案 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工作表
答案 2 :(得分:0)
根据Excel功能的广泛程度,有很多方法可以解决这个问题。如果Excel只是一个电子表格并且没有内置的直接Excel功能,Binoj的答案就有效。客户端可以添加功能,连接等。这些是“哑”的excel文档,直到客户端做了这样的事情。
要创建功能更全面的Excel文档,您可以随意考虑两个基本选择。
使用办公室组件(re:bad)创建Excel文档或第三方组件,如SoftArtisan的ExcelWriter。很棒的组件,但是有成本。
在允许导出到Excel的页面上使用控件。大多数ASSP.NET控件供应商都在其网格上具有此功能。
选项#1几乎可以让您使用Excel的所有功能。选项#2有点受限,至少在我试过的控件中是这样。
答案 3 :(得分:0)