OpenXML: Asp.net利用OpenXML 导出Excel.
2009-06-12 11:04
344 查看
第一步要先装 Openxml SDK 2.0, 然后引用DocumentFormat.Openxml.dll。
引用名称空间
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Spreadsheet;
using System.Linq;
Openxml 只能生成Office2007的文档,并且需要Linq。
关于Excel.xlsx:
office 2007的excel 实质是zip文件, 把扩展名改为.zip后,我们可以看到里面是一些xml 文件
Code
Response.Clear();
Response.ClearHeaders();
Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8");
Response.ContentType = "application/vnd.ms-excel.sheet.binary.macroEnabled.12";
Response.AddHeader("Content-Disposition", "attachment; filename=DataView.xlsx");
ms.Position = 0;
byte[] buffer = new byte[4096];
int i = 0;
long length = 0;
while (length < ms.Length)
{
i = ms.Read(buffer, 0, 4096);
Response.OutputStream.Write(buffer, 0, i);
length += i;
};
ms.Dispose();
Response.Flush();
Response.End();
这里有一点要注意, 我原先用下面的方法:
byte[] buffer = ms.GetBuffer();
Response.OutputStream.Write(buffer, 0, buffer.Length);
这样是有问题的, 因为memorystring有两个长度, 一个是字节长度,另一个是占用空间长度, 因此用GetBuffer生成byte[] 是memory占用的空间的长度, 而不是内容的实际长度, 这样导致response出的文件, 不能正常打开。
我封装了一下Openxml,供大家下载共同学习/Files/skyfei/OpenXMLExcel.rar
引用名称空间
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Spreadsheet;
using System.Linq;
Openxml 只能生成Office2007的文档,并且需要Linq。
关于Excel.xlsx:
office 2007的excel 实质是zip文件, 把扩展名改为.zip后,我们可以看到里面是一些xml 文件
Code
Response.Clear();
Response.ClearHeaders();
Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8");
Response.ContentType = "application/vnd.ms-excel.sheet.binary.macroEnabled.12";
Response.AddHeader("Content-Disposition", "attachment; filename=DataView.xlsx");
ms.Position = 0;
byte[] buffer = new byte[4096];
int i = 0;
long length = 0;
while (length < ms.Length)
{
i = ms.Read(buffer, 0, 4096);
Response.OutputStream.Write(buffer, 0, i);
length += i;
};
ms.Dispose();
Response.Flush();
Response.End();
这里有一点要注意, 我原先用下面的方法:
byte[] buffer = ms.GetBuffer();
Response.OutputStream.Write(buffer, 0, buffer.Length);
这样是有问题的, 因为memorystring有两个长度, 一个是字节长度,另一个是占用空间长度, 因此用GetBuffer生成byte[] 是memory占用的空间的长度, 而不是内容的实际长度, 这样导致response出的文件, 不能正常打开。
我封装了一下Openxml,供大家下载共同学习/Files/skyfei/OpenXMLExcel.rar
相关文章推荐
- OpenXML: Asp.net利用OpenXML 导出Excel.
- 利用ASP.NET 导出excel(2007版)
- asp.net中DataGrid利用RenderControl导出Excel的问题
- ASP.NET 2.0,C#----利用GridView控件导出其他文件(导出Excel,导出Word文件)
- asp.net中利用NPOI导出数据到excel中
- ASP.NET 利用 Microsoft.Office.Interop.Excel 版本导出Excel数据
- ASP.NET 2.0,C#----利用GridView控件导出其他文件(导出Excel,导出Word文件)
- ASP.Net MVC利用NPOI导入导出Excel - RuleLu
- ASP.NET 2.0,C#----利用GridView控件导出其他文件(导出Excel,导出Word文件)
- asp.net 利用NPOI导出Excel通用类的方法
- ASP.NET导出Excel(利用NPOI和EPPlus库,无需安装Office)
- ASP.NET 2.0,C#----利用GridView控件导出其他文件(导出Excel,导出Word文件)
- asp.net 利用NPOI导出Excel通用类
- Asp.net中利用NPOI做Excel导出功能
- Asp.net开发经验-利用Aspose.Words按模板导出Word(注:Excel可以使用Aspose.Excel)
- ASP.Net MVC利用NPOI导入导出Excel
- ASP.NET 2.0,C#----利用GridView控件导出其他文件(导出Excel,导出Word文件)
- ASP.NET利用GridView导出EXCEL
- ASP.NET 2.0,C#----利用GridView控件导出其他文件(导出Excel,导出Word文件)
- ASP.NET,Web界面利用Button来实现将telerik:RadGrid表格内数据导出Excel