大学IT网 - 最懂大学生的IT学习网站! QQ资料交流群:367606806
当前位置:大学IT网 > C#技巧 > Excel集成种种

Excel集成种种

关键词:集成Excel  阅读(603) 赞(12)

[摘要]本文是对Excel集成种种的讲解,对学习C#编程技术有所帮助,与大家分享。

最近有些项目在做集成,和Excel之类的。所遇到的问题如下:

Win下如何操作

如何处理Excel进程

如何制作AddIn

如何在Web中应用

其他..

//

Win下的应用

Excel.Application_excelApp =newExcel.Application();

Excel._WorkbookreportWB =null;

Excel._WorksheetreportWS =null;

try

{
reportWB = (Excel._Workbook)Schedule.ExcelApp.Workbooks._Open(fileReport, 0,false, 5,"","",true, Excel.XlPlatform.xlWindows,"\t",false,false, 0,true);

reportWS = (Excel._Worksheet)reportWB.Worksheets["Sheet1"];

…………

………

………

reportWB.Save();

}

Marshal.ReleaseComObject(reportWB);

Marshal.ReleaseComObject(reportWS);

reportWB =null;

reportWS =null;

ExcelApp.Workbooks.Close();

ExcelApp.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(ExcelApp);
GC.Collect();

只是这个Excel进程关闭起来比较麻烦,另作论述。

关于简单的操作

赋值:

reportWS.get_Range("D3","D3").Value2 =”xxx”;

插入行列:

(reportWS.Rows[beginRow,Missing.Value]asExcel.Range).Insert(Excel.XlDirection.xlDown,Missing.Value);

复制行列

reportWS.get_Range("A3","I4").Copy(Missing.Value);

粘贴行列:

reportWS.get_Range("A4""I5").PasteSpecial(Excel.XlPasteType.xlPasteAll, Excel.XlPasteSpecialOperation.xlPasteSpecialOperationNone,Missing.Value,Missing.Value);

公式:

reportWS.get_Range("D3","D3").Value2 =”=sum(D1:D2)”;

也有其他高手提供的操作Excel的类库,但是有时候需要自己做比较精细的控制,所以一般都是自己去做这些操作。

注意:

1:复制的时候可以附带上单元格的格式

2:公式的循环引用设置。不然的话就会有很烦人的提示。

关于安装:

1:需要安装一个XP下的接口oxpPIA。可到微软网站下载

2:解压缩oxpPIA,注册时,需要一个程序gacutil.exe

关于关闭Excel进程的问题

在Win/Web下,都可以生成一个Excel的Application对象。但是这个对象在关闭时可能会遇到问题。主要是,即使执行了释放对象的操作,也很难把这个实例关掉。每次去TaskMan里面看看,还都在内存里面。

解决方法

1:只用一个全局的Application对象。关不掉,就不关了。所有的地方都用这个App来打开新的Worbook,这样,只要最后关掉这些Workbook,Worksheet就可以了。只有一个实例也不会占用很多的资源。

2:彻底关掉这个进程

Process[] excelPro;

excelPro =Process.GetProcessesByName("Excel");

foreach(ProcessmyProcessinexcelPro)

{

myProcess.Kill();

}

有点暴力,但是管用。

制作Add-In

建立项目:

在vs.studio里面有模版,建立一个AddIn比较简单。

刚开始的时候,我用的Express版,就只能手工写这些代码了。这个Connector也就是继承自Extensibility.IDTExtensibility2的一个实现而已。

其实关键就在那一个Connector上。还有就是如何注册这个控件。原来在VB里面开发完之后,Excel还识别他是一个Dcom,但是后来用C#开发的居然无法识别。其怪也哉。最后直接通过写注册表实现。

调试:

调试在vs.studio里面也不是问题,只要设置项目debug启动参数就可以:项目/属性/Debug/Start Action/Start external program/选择Excel.exe的位置就可以

Web下的应用

Web下边写Excel,除去了用上述Win下的操作之外,也还有其他方式来实现,那就是直接写Response输出,进而演化出来写Html格式的Excel数据。

1:直接输出到Response。这个方法,就是直接生成一个Html页面,然后把该页面的type修改一下,变成application/ms-excel,这样,客户端的IE会把这个html页面在Excel中打开。具体可以看http://www.cnblogs.com/caizinet/

用这个方法输出的话,可以直接把页面上所有内容都输出到Excel。包括各类格式和数据。

但是,也有点小问题:有时候会把界面上所有的东西都在Excel中里面显示。

2:直接输出到.xls文件,让客户下在这个文件。

这次输出的.xls文件,也是用html来实现,那就是直接把html格式的数据保存成xls文件,这样的话,用户就可以直接下在这个文件了。

输出的数据可以直接是<Table>:

a:) strData=”<Table>………….. “

b:) string file ,File.Write(strData)

c:) Response.Redirect(file);

这个实现还有个有意思的地方,那就是可以直接使用公式。<table><td>=Sum(A1:A3)</td></table>

更多:使用宏,而不是IE来做客户端

有朋友正在开发一套程序,就是因为所处理的数据过大,导致IE加载后占用内存近500M的情况。后来他使用了宏处理,直接使用Excel来做客户端。这也是个很不错的方法。



相关评论