




已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
一.生成Exel的方法生成Excel的方法为调用本地Office COM组件,操作Excel。新建项目后,添加对应Office版本的Microsoft.Office.Interop.Excel的引用,如图1-1所示。 图1-1 添加Microsoft.Office.Interop.Excel引用为方便起见,这里以一个示例程序说明我的过程。示例程序整体结构如代码清单1-1所示。代码清单1-1 示例程序结构using System;using System.Collections.Generic;using System.Linq;using System.Text;using Excel=Microsoft.Office.Interop.Excel;namespace excelclass Program private Excel.Application app = null;private Excel.Workbook workbook = null;private Excel.Worksheet worksheet = null;private Excel.Range workSheet_range = null;static void Main(string args)public void createExcel()public void addData(int row, int col, string data, string format,string cell1,string cell2)public void export()首先我先声明了四个字段,分别解释如下:1)Excel.Application app。Application对象表示Excel应用程序本身。Application对象公开了大量有关正在运行的应用程序、应用于该实例的选项以及在该实例中打开的当前用户的对象的信息。2)Excel.Workbook workbook。Excel.Workbook类表示Excel应用程序中的单个工作簿。3)Excel.Worksheet worksheet。Excel提供Sheets集合作为 Microsoft.Office.Interop.Excel.Workbook 对象的属性,但是Excel中没有Sheet类。相反,Sheets 集合的每个成员都是一个Microsoft.Office.Interop.Excel.Worksheet对象,或者是一个 Microsoft.Office.Interop.Excel.Chart对象。4)Excel.Range workSheet_range。Excel.Range对象是Excel应用程序中最常用的对象。在能够处理Excel内的任何范围之前,必须将它表示为Range对象,并处理该对象的方法和属性。Range对象表示一个单元格、一行、一列、包含一个或多个单元格块(可以连续,也可以不连续)的单元格选定范围,甚至多个工作表中的一组单元格。createExcel()方法用来创建Excel实例,也就是初始化声明的四个变量,实现代码如代码清单1-2所示。代码清单1-2 初始化变量public void createExcel()app = new Excel.Application();app.Visible = true;workbook = app.Workbooks.Add(1);/创建workbookworksheet = (Excel.Worksheet)workbook.Sheets1;/创建worksheet如代码清单1-2,Workbook对象由Application对象创建,Worksheet对象由Workbook对象创建。addData()方法用来向表格中添加数据,四个参数分别为行、列、数据、数据格式,范围起始格、范围结束格。实现代码如代码清单1-3所示。代码清单1-3 添加数据worksheet.Cellsrow, col = data;workSheet_range = worksheet.get_Range(cell1, cell2);workSheet_range.Borders.Color = System.Drawing.Color.Black.ToArgb();workSheet_range.NumberFormat = format;Excel中的每一个格以行和列组成的坐标来唯一标识,这里行标识是数字,从1到n;列标识是字母,从A到Z,从AA到AZ。workSheet_range对象由worksheet.get_Range(cell1, cell2)方法来初始化,从cell1到cell2会被作为一个整体处理。workSheet_range.NumberFormat设置该区域内的字符格式化方式。export()方法用来导出生成的Excel,实现如代码清单1-4所示。代码清单1-4 导出Excelpublic void export()workbook.SaveCopyAs(D:/aa.xls);app.Quit();Workbook对象由三个方法用来保存Excel文件,分别为Save方法、SaveCopyAs方法和SaveAs方法,这里使用SaveCopyAs方法。保存之好调用Application对象的Quit()方法释放资源。在本地测试一切正常,测试结果如图1-2所示。图1-2 测试结果 二.合并单元格与数字列标识转字母列标识合并单元格的时候,必须要传递以字母表示的列标识给Excel.Range对象的.Merge(int)方法,但是我们取数据和填充数据使用的都是数字标识,这时候必须转成如图1-3的形式。 图1-3 Excel的字母列标识 代码清单1-5提供的算法可解决这个问题。代码清单1-5 数字列标识转字母列标识public string ToName(int index)if (index = 0)throw new Exception(invaild parameter);index-;List chars = new List();doif (chars.Count 0)index-;chars.Insert(0, (char)(index % 26 + (int)A ).ToString();index = (int)(index - index % 26) / 26); while (index 0);return String.Join(string.Empty, chars.ToArray();三. 异常来自 HRESULT:0x800A03EC 的原因一不小心就会出异常来自 HRESULT:0x800A03EC 的异常,原因很简单,Excel的行列都是从1开始的,如果我们习惯性的给worksheet.Cells0, 0或者worksheet.Cells1, 0或者worksheet.Cells0, 1赋值,就会引发该异常。四. 未将对象引用设置到对象实例和服务器端部署客户端一切运行正常,接下来就是要把DLL部署到服务器上。可是服务器根本没用安装Office,在网站找了很久,也没找到此种方法的解决方案。无奈就安装了Office,本来以为万事大吉,但是每次都提示未将对象引用设置到对象实例。采用抛异常的方法才知道示例程序中的几个主要字段都为空,那就是本地的COM根本没调用成功。找到/Mainz/archive/2009/11/11/microsoft_office_interop_excel.html文章,于是乎又进行了如下操作。从服务器上把EXCEL.EXE拷到了本机上,然后从VS2010的命令行启动TlbImp,执行命令:TlbImp /out:Interop.Excel.dll Excel.exe。生成Interop.Excel.dll。 在项目中去除了Microsoft.Office.Interop.Excel.dll的引用,添加Interop.Excel.dll,将顶部的using Excel=Microsoft.Office.Interop.Excel,该为using Excel= Interop.Excel,本地运行程序没有问题。再次更新服务器端程序,结果又出了新的异常:检索 COM 类工厂中 CLSID 为 00024500-0000-0000-C000-000000000046 的组件时失败,原因是出现以下错误: 80080005。五. 80080005异常与权限配置80080005异常是应用程序对COM组件操作权限不足引起的。于是有了下面的操作:1)控制面板管理工具组件服务计算机我的电脑DCOM- Microsoft Excel 应用程序2)单击属性打开此应用程序的属性对话框。3) 单击标识选项卡,然后选择交互式用户。4)单击默认安全性选项卡。设置当前服务器与ASP.NET相关的用户的访问权限。5)单击启动权限的编辑默认值。设置ASP.NET相关的用户的访问权限。至此,程序才运行成功,可谓一波三折。六.关闭Excel进程如果使用这种方式用户每导出一个Excel文件,服务器端就会启动一个Excel进程。这回引起两个问题,一是耗费服务器资源,二是当进程数达到上限时,会引发异常,调用COM失败。这个时候要想办法结束Excel进程。我采用了杀进程的方式,类似下面的做法:private void DoExcel()Microsoft.Office.Interop.Excel.Application application = new Microsoft.Office.Interop.Excel.Application();/这里释放所有引用的资源application.Quit();KillExcel(application);DllImport(User32.dll, CharSet = CharSet.Auto)public static extern int GetWindowThreadProcessId(IntPtr hwnd,out int ID);public static void KillExcel(Microsoft.Office.Interop.Excel.Applicat
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小区地下室顶层施工方案
- 2025年安徽省高校毕业生三支一扶计划招募笔试考试大纲考前自测高频考点模拟试题及答案详解参考
- 儿童听觉训练题库及答案
- 2025企业劳动合同模板AA
- 昔阳悬挑架搭拆施工方案
- 2025年巢湖市属事业单位考试试卷
- 年会活动策划方案范本
- 风场升压站围墙施工方案
- 2025南平延平太平镇卫生院招聘药房工作人员模拟试卷附答案详解(典型题)
- 拆除房屋施工方案多少钱
- 中考英语高频词汇大纲表(人教版)
- 血透患者跌倒的预防及管理
- 自产自销收购合同范本
- 砼回弹强度自动计算表
- 医防融合知识讲座
- 培养幼儿的语言能力
- 《认识几种常见的岩石》说课稿、教案和教学设计
- 黑布林英语阅读初一年级16《柳林风声》译文和答案
- 广东省监理从业人员网络继续教育平台题库
- YY/T 1268-2023环氧乙烷灭菌的产品追加和过程等效
- 平地机操作规程
评论
0/150
提交评论