Excel集成种种

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

Win下如何操作

如何处理Excel进程

如何制作AddIn

如何在Web中应用

其他..

 

//

Win下的应用

Excel.Application _excelApp = new Excel.Application();

Excel._Workbook reportWB = null;

Excel._Worksheet reportWS = null;

try

{
     
reportWB = (Excel._Workbook)Schedule.ExcelApp.Workbooks._Open(fileReport, 0, false, 5, """"true, Excel.XlPlatform.xlWindows, "\t"falsefalse, 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] as Excel.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下,都可以生成一个ExcelApplication对象。但是这个对象在关闭时可能会遇到问题。主要是,即使执行了释放对象的操作,也很难把这个实例关掉。每次去TaskMan里面看看,还都在内存里面。

解决方法

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

  2:彻底关掉这个进程

  Process[] excelPro;

        excelPro = Process.GetProcessesByName("Excel");

        foreach (Process myProcess in excelPro)

        {

            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来做客户端。这也是个很不错的方法。

posted @ 2010-03-12 20:32  与时俱进  阅读(421)  评论(1编辑  收藏  举报
友情链接:同里老宅院民居客栈