• 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, " ",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] 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下,都可以生成一个Excel的Application对象。但是这个对象在关闭时可能会遇到问题。主要是,即使执行了释放对象的操作,也很难把这个实例关掉。每次去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来做客户端。这也是个很不错的方法。

  • 相关阅读:
    【集合】元组元素命名
    普通数组-队列
    稀疏数组
    Java基础 07 API概述 Scanner类 Random类 ArrayList类
    Java基础 06 类与对象、封装、构造方法
    Java基础 05 数组
    Java基础 04 IDEA、方法
    Java基础 04 [附] IDEA 的安装、配置与使用
    Java基础 03 流程控制语句
    Java基础 02 数据类型转换、运算符、方法入门
  • 原文地址:https://www.cnblogs.com/jliuwork/p/3958265.html
Copyright © 2020-2023  润新知