在NET 20平台下使用 COM interop 组件开发统计报表及在IIS60下发布权限解析Word格式文档下载.docx
- 文档编号:22230659
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:13
- 大小:127.37KB
在NET 20平台下使用 COM interop 组件开发统计报表及在IIS60下发布权限解析Word格式文档下载.docx
《在NET 20平台下使用 COM interop 组件开发统计报表及在IIS60下发布权限解析Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《在NET 20平台下使用 COM interop 组件开发统计报表及在IIS60下发布权限解析Word格式文档下载.docx(13页珍藏版)》请在冰豆网上搜索。
现在我们知道了生成Excel报表只要有了样式和数据,就可以生成一张自己想要的报表了,数据的生成并不困难,但是我们的困难就是这个报表的样式用什么来描述,怎么来描述。
原理是利用.NET提供的COM组件中的OFFICE11组件操作EXCEL,有很多种方式,可以直接打开模板,向其中需要的单元格中写入数据,也可以用NEW的方式在内存中创建一个临时的EXCEL实例对象,想其中写入数据,无论用哪种方式基本原理都是调用OFFICE11组件的interop.dll动态链接库中的EXCEL类定义EXCEL实例,向其中写入数据。
下面就具体的实现过程加以介绍。
2.2 环境配置及实现
引用组件MicrosoftExcel11.0ObjectLibrary
2-1添加引用microsoftexcel11.0objectlibrary
引用组件成功后将在程序目录BIN下生成Interop.Excel.dll动态链接库如下:
2-2添加引用后BIN目录下生成的动态库
这样就可以开始开发生成EXCEL报表的程序了,首先要在类文件中语句引用类:
usingExcel;
//引用EXCEL类
usingSystem.Reflection;
//引用这个才能使用Missing字段
程序操作EXCEL生成报表的应用有两种实现方式,一种是读模板的方式,另一种是不使用模板的方式。
其实读不读模板都能达到一样的效果,看实际情况而用了。
读模板方式:
#region使用模板生成Excel表
stringsave_path="
"
tick="
;
ExcelOperateexcelOperate=newExcelOperate();
stringtemp_path=Server.MapPath("
../ExportReports"
);
//生成的文件存放路径
stringtemplate_path=Server.MapPath("
../drilling"
//模板路径
stringurl=ConfigurationManager.AppSettings["
path"
].ToString();
if(!
Directory.Exists(temp_path))//判断存放模板副本EXCEL文件的路径是否存在,如果不存在则创建一个目录芳芳文件
{
Directory.CreateDirectory(temp_path);
Directory.CreateDirectory(template_path);
}
try
#region使用模板导出Excel表
//建立一个Excel.Application的新进程
Excel.Applicationapp=newExcel.Application();
if(app==null)
return;
app.Visible=false;
app.UserControl=true;
Workbooksworkbooks=app.Workbooks;
_Workbookworkbook=workbooks.Add(template_path+"
\\DrillReport1.xls"
Sheetssheets=workbook.Worksheets;
_Worksheetworksheet=(_Worksheet)sheets.get_Item
(1);
//得到SHEET1
if(worksheet==null)
//想SHEET1指定单元格中输入需要的信息
worksheet.Cells[3,2]=Session["
qk2"
]+"
钻井工程"
worksheet.Cells[5,2]=Session["
dw3"
];
worksheet.Cells[6,5]=sum_cbhj+"
万元"
worksheet.Cells[7,2]=input_person;
worksheet.Cells[7,5]=magager;
worksheet.Cells[15,1]=Session["
pcrq"
tick=DateTime.Now.Ticks.ToString();
save_path=temp_path+"
\\"
+tick+"
开发钻井工程费用结算书"
+"
.xls"
url+=tick+"
workbook.SaveAs(save_path,Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value,Excel.XlSaveAsAccessMode.xlNoChange,Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value);
//存储副本到指定的路径,MISSING.VALUE是SAVEAS参数具体含义请参考MSDN技术手册
excelOperate.Dispose(worksheet,workbook,app);
//关闭Excel进程
#endregion
//Response.Write(save_path);
Response.Redirect("
XLS_DownLoad.aspx?
path="
+save_path);
//将存储EXCEL副本的文件路径传递给XLS_DownLoad.aspx页面
//Response.Write(url);
catch
Response.Write("
Error"
finally
Response.End();
至此,模板方式生成EXCEL报表完成,接下来就是下载该文件XLS_DownLoad.aspx页面的后台代码,是经典的利用浏览器回传下载:
if(path!
=null&
&
File.Exists(path))
System.IO.FileInfofile=newSystem.IO.FileInfo(path);
//清除缓冲区流中的所有内容输出
Response.Clear();
//将下载保存对话框指定默认的文件名添加到HTTP头中
//Response.AddHeader("
Content-Disposition"
"
attachment;
filename="
+file.Name);
Response.AddHeader("
+System.Web.HttpUtility.UrlEncode(file.Name,System.Text.Encoding.UTF8));
//避免中文出现乱码现象
//在header中指定文件的大小,使浏览器能显示下载过程
Content-Length"
file.Length.ToString());
//设置输出流的HTTPMIME类型
Response.ContentType="
application/octet-stream"
//发送文件流到客户端
Response.WriteFile(file.FullName);
//停止该页的执行
else
文件自动下载中断,请手动下载"
非模板方式:
非模板方式几乎和模板方式先动只是出去读模板过程
stringtemplate_path=Server.MapPath("
_Workbookworkbook=workbooks.Add(template_path+"
直接实例化一个WORKBOOK
_Workbookworkbook=newworkbooks(temp_path);
然后直接向EXCEL文件中写入数据,保存到指定的文件夹路径中,将路径传递给XLS_DownLoad.aspx页面下载。
这样EXCEL报表就生成下载完毕,对于比较复杂的中国式报表等,就要根据需要利用VBA编程的技巧控制、合并、设置背景等等的操作完成报表绘制工作。
3 系统发布异常处理
3.1 COM组件的安全性设置
当把编译好的程序发布到IIS6.0服务器上后,会报错:
检索COM类工厂中CLSID为{00024500-0000-0000-C000-000000000046}的组件时失败,原因是出现以下错误:
80070005。
说明:
执行当前Web请求期间,出现未处理的异常。
请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
报错的原因是DCOM组件要进行安全性设置,默认情况下是关闭的,必须要对MICROSOFTEXCEL服务的属性进行设置如下:
在系统-运行中输入DCOMCNFG回车,进入到组件服务设置窗口按下图
3-1组件服务树
3-2MICROSOFTEXCEL应用程序属性设置
3-3安全性设置
3-4标识设置
具体的设置步骤及原理如下所述:
异常详细信息:
System.UnauthorizedAccessException:
检索COM类工厂中CLSID为{00024500-0000-0000-C000-000000000046}的组件时失败,原因是出现以下错误:
以启动用户的身份配置Office
要以启动用户帐户的身份设置Office自动化服务器,请按照下列步骤操作:
启动要自动运行的Office应用程序。
这会强制该应用程序进行自我注册。
运行该应用程序后,请按Alt+F11以加载MicrosoftVisualBasicforApplications(VBA)编辑器。
这会强制VBA进行初始化。
关闭应用程序,包括VBA。
单击“开始”,单击“运行”,然后键入DCOMCNFG。
依次展开“组件服务”、“计算机”、“我的电脑”和“DCOM配置”,然后单击要自动运行的应用程序。
下面列出了应用程序的名称:
MicrosoftAccess97-MicrosoftAccess数据库
MicrosoftAccess2000/2002/2003-MicrosoftAccess应用程序
MicrosoftExcel97/2000/2002/2003-MicrosoftExcel应用程序
MicrosoftWord97-MicrosoftWordBasic
MicrosoftWord2000/2002/2003-MicrosoftWord文档
单击“属性”打开此应用程序的属性对话框。
单击“安全”选项卡。
验证是否已选中“使用默认的访问权限”和“使用默认的启动权限”。
单击“标识”选项卡。
验证是否已选中“启动用户”。
单击“确定”,关闭属性对话框并返回到主应用程序列表对话框。
在“DCOM配置”对话框中,单击“默认安全性”选项卡。
单击访问权限的“编辑默认值”。
验证访问权限中是否列出了下列用户,如果没有列出,则添加这些用户:
SYSTEM
INTERACTIVE
Everyone
Administrators
OfficeAutomationUser
IUSR_<
machinename>
*
IWAM_<
*这些帐户仅在计算机上安装有InternetInformationServer(IIS)的情况下才存在。
确保允许每个用户访问,然后单击“确定”。
单击启动权限的“编辑默认值”。
验证启动权限中是否列出了下列用户,如果没有列出,则添加这些用户:
*这些帐户仅在计算机上安装有IIS的情况下才存在。
单击“确定”关闭DCOMCNFG。
4 总结
基于.NET2.0平台的报表方式很多,有直接利用成熟的报表工具例如:
水晶报表等工具软件,也有利用OFFICE自带的组件生成EXCEL、WORD等格式的报表,这种应用形式有越来越受欢迎的势头,这其中的原因不用多说大家也能理解,就是因为用户的欢迎,任何一个好的系统,用户是推动软件发展方向的外在动力,OFFEICE软件以其使用的广泛性,通用性已经成为了事实上的办公软件标准,.NET平台依托着微软的强大技术支持,在生成报表时提供了诸多的组件支持,使得报表功能越来越强,越来越方便,用户的需求决定了程序员采用哪种报表形式,但随着时间的发展,现在看来WEB开发中使用OFFICE报表已经成为一种趋势,这就要求我们做WEB程序开发的程序员至少要掌握一种可以通用的行之有效的方案,来解决这个重要的报表需求,上文所介绍的COM组件中的EXCE11组件只是操作EXCEL文件生成报表的方式之一,还有很多类似的方法,使用不同的组件,这就要求我们不断尝试,在事件中积累经验掌握技术发展的前沿信息,不断的探索尝试,为以后的开发提供良好的发展基础,开发出使用户满意的程序。
参考文献
【1】刘端阳,汪杰ASP.NET网络开发实用工程案例人民邮电出版社2008.5第一版
【2】郝刚,ASP.NET2.0开发指南2006.5第一版
【3】DR.ShahramkhosraviASP.NET2.0服务器控件与组件开发高级编程2007.6第一版
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 在NET 20平台下使用 COM interop 组件开发统计报表及在IIS60下发布权限解析 NET 20 平台 使用 组件 开发 统计 报表 IIS60 发布 权限 解析
链接地址:https://www.bdocx.com/doc/22230659.html