版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
在.NET2.0平台下使用COMinterop组件开发统
计报表及在IIS6.0下发布权限解析赵士坤西部钻探工程有限公司克拉玛依钻井公司摘要.NET2.0技术是当下流行的WEB开发技术,事非经过不知难,这句话用在程序开发领域再实际不过了,和大多数从事.NET下WEB开发程序员一样,本人也走过从JSP+SERVLET转到C/S开发,再转到.NET下WEB开发的曲折历程,深知在JSP里面做点事要费多少工夫,找多少开源的报表组件才能成行,现在.NET下好多控件、组件都被标准化了,大大的提高了工作效率,减少了大量的无意义的重复劳动。本分讲述了在.NET2.0开发平台下如何利用COM中提供的INTEROP组件生成定制的EXCEL报表的方法,以及在IIS6.0服务器发布后出现异常、错误的解决方案,类似的实现方案很多,本文是在本人开发实践中遇到的比较典型的报表问题的解决方案,比较而言目前这种方案是比较优秀的,希望通过和大家的分享能给正在从事.NET平台下WEB开发的初学者一点启示和帮助。关键词VBAIIS6.0权限1背景报表功能是大部分管理系统的基本功能。本人在开发新疆油田开发公司的开发钻井结算管理系统过程中对统计报表的解决方案积累了一定的经验,报表的形式有很多种方案,如EASTREPORT,E报表,水晶报表等等,比较有代表性的是水晶报表,也有很多人用EXCEL做报表,在这个系统中本人使用的就是VBA编程的方式生成EXCEL报表,然后提供下载和在线打开报表功能,EXCEL报表的优势是通用性强,目前大多数人都使用OFFICE的办公软件,EXCEL的使用率非常的高,大家也比较熟悉,生成EXCEL报表后使用者可以根据需要可以进行个性化的数据汇总、分类、总结,比较适合于数据管理系统软件的报表功能,给使用者也提供了便利,下面将对如何在.NET2.0平台下生成EXCEL报表,以及使用模板方式、非模板方式的优缺点、发布到服务器后需要在IIS服务器端进行的配置进行分析,系统对从事使用.NET平台进行数据库软件开发的开发人员提供一点借鉴。2程序架构分析2.1系统分析在一般的企业应用开发中都会涉及到报表的生成,且一般报表的格式都是生成Excel格式的。对于各种报表的生成一直是程序员心中永远的痛,因为对于很多程序员来说每写一个报表都意味着要写一大断代码来实现,而且有的报表可能极其复杂以及不规范,这时就会浪费程序员大量的时间来编写和调试这些代码,那到底有没有一种方法能使代码尽量少写,且又能实现各种Excel报表的生成呢,下面我们就转入正题。我们要生成Excel报表,其实我们只需要两样东西:1、 报表的样式,也就是哪个字段应该填在哪里,哪一列应该填什么,字体大小,颜色,单元格高度,宽度,单元格是否合并,是否跨行,是否跨列,是横向报表(所谓横向报表,我自定义为:一张Excel报表就是有一条记录或者有一条记录以及其关联记录而生成的报表,如一张订单报表通常就是有一个订单头和其相关的订单明细所生成,这个就是我自定义的横向报表)还是纵向报表(所谓纵向报表,我自定义为:一张报表就是有一个记录集所生成的,如要生成一张记录某个班级学生情况的报表,则要把这个班级的学生记录都要导出到这张报表中,这种报表基本上就是统计报表,一张报表可能会有几万条记录或者更多,这个就是我自定义的纵向报表)等等报表样式。2、 报表的数据,对于我们而言有了报表样式,我们就知道在哪个或者哪几个单元格应该填哪些数据,具体的数据,我们则可以以DataTable的形式来表现,也可以以DataView的形式来表现,至于用怎么样的数据格式可以随自己喜欢,自己来定义。现在我们知道了生成Excel报表只要有了样式和数据,就可以生成一张自己想要的报表了,数据的生成并不困难,但是我们的困难就是这个报表的样式用什么来描述,怎么来描述。原理是利用.NET提供的COM组件中的OFFICE11组件操作EXCEL,有很多种方式,可以直接打开模板,向其中需要的单元格中写入数据,也可以用NEW的方式在内存中创建一个临时的EXCEL实例对象,想其中写入数据,无论用哪种方式基本原理都是调用OFFICE11组件的interop.dll动态链接库中的EXCEL类定义EXCEL实例,向其中写入数据。下面就具体的实现过程加以介绍。2.2环境配置及实现引用组件MicrosoftExcel11.0ObjectLibrary
八开发钻井,-App_Code渚Drilling,ceExcelLIppratH.rs£皙OracleCorLTiertCaseI•…或App_Eata+ _|basicdataEl-_/Bin.OffiIntHi-op.Excel.iHlIntHi-np.Mickusoft1说非迎.VBIDE.iillstdulH.iill.Offi2-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);//得到SHEET1if(worksheet==null)(return;}//想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+〃.xls〃;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);//关闭Exce]进程#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();#endregion至此,模板方式生成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("Content-Disposition","attachment;filename="+System.Web.HttpUtility.UrlEncode(file.Name,System.Text.Encoding.UTF8));//避免中文出现乱码现象//在header中指定文件的大小,使浏览器能显示下载过程Response.AddHeader("Content-Length",file.Length.ToString());//设置输出流的HTTPMIME类型Response.ContentType="application/octet-stream";//发送文件流到客户端Response.WriteFile(file.FullName);//停止该页的执行Response.End();}else(Response.Write("文件自动下载中断,请手动下载");}非模板方式:非模板方式几乎和模板方式先动只是出去读模板过程stringtemplate_path=Server.MapPath("../drilling");//模板路径_Workbookworkbook=workbooks.Add(template_path+"\\DrillReport1.xls");直接实例化一个WORKBOOK
_Workbookworkbook=newworkbooks(temp_path);然后直接向EXCEL文件中写入数据,保存到指定的文件夹路径中,将路径传递给XLS_DownLoad.aspx页面下载。这样EXCEL报表就生成下载完毕,对于比较复杂的中国式报表等,就要根据需要利用VBA编程的技巧控制、合并、设置背景等等的操作完成报表绘制工作。3 系统发布异常处理3.1COM组件的安全性设置当把编译好的程序发布到IIS6.0服务器上后,会报错:检索COM类工厂中CLSID为{00024500-0000-0000-C000-000000000046}的组件时失败,原因是出现以下错误:80070005。说明:执行当前Web请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。报错的原因是DCOM组件要进行安全性设置,默认情况下是关闭的,必须要对MICROSOFTEXCEL服务的属性进行设置如下:在系统-运行中输入DCOMCNFG回车,进入到组件服务设置窗口按下图控制台根目录计算机-金蛆住服爰计算机-鸟我的电脑+_|COM+应用程序-_|DCOM配置3-1组件服务树lil.0,.lil.0,.0:MicrosoftExcelJMieruEuftGraph,MieruEuftHelp查看►从这里创建窗口地)MicrosoftIMAPIMicrosoftOffice雇性俱)MicrosoftFowerF'MieruEuftIublie]帮助⑪心 土I-1—m-rnr-*—MediaLatalogUBULEUbfroviderIMieruEuftAgentServer2.03-2MICROSOFTEXCEL应用程序属性设置3-3安全性设置3-4标识设置具体的设置步骤及原理如下所述:异常详细信息:System.UnauthorizedAccessException:检索COM类工厂中CLSID为{00024500-0000-0000-C000-000000000046}的组件时失败,原因是出现以下错误:80070005。以启动用户的身份配置Office要以启动用户帐户的身份设置Office自动化服务器,请按照下列步骤操作:启动要自动运行的Office应用程序。这会强制该应用程序进行自我注册。运行该应用程序后,请按Alt+F11以加载MicrosoftVisualBasicforApplications(VBA)编辑器。这会强制VBA进行初始化。关闭应用程序,包括VBA。单击“开始”,单击“运行”,然后键入DCOMCNFGo依次展开“组件服务”、“计算机”、“我的电脑”和“DCOM配置”,然后单击要自动运行的应用程序。下面列出了应用程序的名称:MicrosoftAccess97-MicrosoftAccess数据库MicrosoftAccess2000/2002/2003-MicrosoftAccess应用程序MicrosoftExcel97/2000/2002/2003-MicrosoftExcel应用程序MicrosoftWord97-MicrosoftWordBasicMicrosoftWord2000/2002/2003-MicrosoftWord文档单击“属性”打开此应用程序的属性对话框。单击“安全”选项卡。验证是否已选中“使用默认的访问权限”和“使用默认的启动权限”。单击“标识”选项卡。验证是否已选中“启动用户”。单击“确定”,关闭属性对话框并返回到主应用程序列表对话框。在“DCOM配置”对话框中,单击“默认安全性”选项卡。单击访问权限的“编辑默认值”。验证访问权限中是否列出了下列用户,如果没有列出,则添加这些用户:SYSTEMINTERACTIVEEveryoneAdministratorsOfficeAutomationUserIUSR_<machinename>*IWAM_<machinename>**这些帐户仅在计算机上安装有InternetInformationServer(IIS)的情况下才存在。确保允许每个用户访问,然后单击“确定”。单击启动权限的“编辑默认值”。验证启动权限中是否列出了下列用户,如果没有列出,则添加这些用户:SYSTEMINTERACTIVEEvery
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中医护理智慧:课件创意展示
- 深度解析(2026)《GBT 26237.1-2022信息技术 生物特征识别数据交换格式 第1部分:框架》
- 深度解析(2026)《GBT 25749.9-2012机械安全 空气传播的有害物质排放的评估 第9部分:净化指数》
- 深度解析(2026)《GBT 25000.24-2017系统与软件工程 系统与软件质量要求和评价(SQuaRE) 第24部分:数据质量测量》
- 深度解析(2026)《GBT 23794-2023企业信用评价指标》
- GBT 42015-2022《信息安全技术 网络支付服务数据安全要求》(2026年)宣贯培训
- GBT 38265.17-2022软钎剂试验方法 第17部分:钎剂残留物的表面绝缘电阻梳刷试验和电化学迁移试验(2026年)宣贯培训
- 肝豆灵汤联合认知行为疗法对痰瘀互结型Wilson病伴冲动控制障碍的临床疗效研究
- 水力剪切花岗岩热储层渗透性变化规律研究
- 政治 (道德与法治)九年级下册学无止境教学设计
- 世界各地高中教育体系比较
- 原料不合格处置管理培训
- 四川省成都市成华区片区联考2025-2026学年八年级(上学期)期中英语试卷(含解析)
- 2025年顺丰快递员劳动合同模板
- 2026年中考语文专题复习:标点符号 讲义
- 常见病小儿推拿培训
- 政务颁奖礼仪培训
- 疝气手术护理宣教
- 行文格式规范培训
- 肝癌破裂出血的护理
- 持续时间模型的估计与检验
评论
0/150
提交评论