继续前文,第二种方法是利用Excel的Com接口库来完成,这种方法的优点是功能强大,可像使用Excel程序一样来操作Excel文件,缺点是需要服务器安装Excel程序,且需要一定的安全配置。
一、准备工作:
1)安装Microsoft Excel
2)Com的安全设置。
在命令行输入DCOMCNFG ,进入组件服务设置界面,如图:

打到Micorosoft Excel应用程序,如图:

右键点击属性,然后点击“安全”,将“启动和激活权限”、“访问权限”、“配置权限”都选择自定义,然后添加运行ASP.NET的用户(IIS6以上是NETWORK SERVICE以下是ASPNET),给予全部权限,如图所示:

3)配置文件目录权限,因为可能要保存文件到某目录中,所以要将该目录对ASP.NET用户予以写入权限。
二、使用
在VS.NET的工程中添加引用,如图:

如果添加引用后Excel组件不能正常使用(excel组件的左边显示一个黄色的感叹号),可以使用.Net工具进行组件转换。
转换方法,运行vs.net的命令行工具,进入Office目录,输入TlbImp Excel.exe即可,然后删除有问题的引用重新添加引用,这次使用浏览,然后引用Excel.DLL。
根据我的经验,vs2003可以直接引用Microsoft Excel x.0 ObjectLibary,而vs2005就需要使用工具转换成DLL才可使用。
然后即可以使用Excel.Application对象来操作它了。
以下就一段简单的将GirdView的数据导出到Excel的代码,功能较简单,权当抛砖引玉了。
this.GridView1.DataBind();


Excel.ApplicationClass oExcel = new Excel.ApplicationClass();
object oMissing = System.Reflection.Missing.Value;
oExcel.Workbooks.Add(oMissing);
Excel.Workbook oBook = oExcel.Workbooks[1];
Excel.Worksheet oSheet = (Excel.Worksheet)oBook.Sheets[1];
oSheet.Name = this.Title;
Excel.Range rg;
for (int j = 0; j < this.GridView1.HeaderRow.Cells.Count; j++)
...{
rg = ((Excel.Range)oSheet.Cells[ 1, j + 1]);
rg.FormulaR1C1 = this.GridView1.HeaderRow.Cells[j].Text;
}
for(int i = 0;i<this.GridView1.Rows.Count;i++)
...{
for (int j = 0; j < this.GridView1.Rows[0].Cells.Count; j++)
...{
rg = ((Excel.Range)oSheet.Cells[i + 2, j+1]);
rg.FormulaR1C1 = this.GridView1.Rows[i].Cells[j].Text;
}
}
rg = null;
string VirFileName = Guid.NewGuid().ToString() + ".xls";
oBook.SaveAs(Server.MapPath(VirFileName), Excel.XlFileFormat.xlExcel9795, oMissing, oMissing, oMissing, oMissing, Excel.XlSaveAsAccessMode.xlExclusive,
oMissing, oMissing, oMissing, oMissing, oMissing);
oExcel.Workbooks.Close();
oExcel.Quit();
oSheet = null;
oBook = null;
oExcel = null;
GC.Collect();
Response.Redirect(VirFileName);
说明一下:为了Excel进程在使用完成后能彻底退出,需要将所有对象在使用完成后清空,像代码中的rg,oSheet,oBook,oExcel等。
本文介绍了使用Excel的Com接口库来在ASP.NET中导出数据到Excel的方法,包括安装Excel,设置DCOM安全配置,以及如何在VS.NET工程中添加引用并进行组件转换。提供了一段简单的GridView数据导出到Excel的代码示例,强调了使用后清理对象以确保Excel进程彻底退出。
714

被折叠的 条评论
为什么被折叠?



