//ExcelApp.CommandBars.Item['Formatting'].Controls.Item[9].Execute;
的功能是不是可以用语句来代替试一试。
    

解决方案 »

  1.   

    to wk_knife,我用了其他方法试了,不行。包括:
    xlSheet.Range[sRow].Merge();
    xlSheet.Range[sRow].Merge(True);
    大家在做大量的格式复杂的EXCEL表格时没有遇到这种问题吗?
      

  2.   

    我以前用vb做excel的时候,会发现同时有n多个excel的进程在后台运行,一定得随用随释放才行。不知道这是不是你面临的问题。
      

  3.   

    to wangpope:没有,我查看了进程列表,只有一个EXCEL,但感觉是内存有泄漏,但又找不到什么原因,真是很奇怪。
      

  4.   

    Excel我用的不多,
    我曾经在word中拆分单元格,
    用Rows.Item(x).Cells.Split(按行拆分)就会出错,提示有纵向合并的单元格,无法拆分
    后来用Columns.Item(x).Cells.item(y).split(按列对行进行循环拆分)程序通过。
    所以建议你缩小范围,或换种方式合并。
      

  5.   

    to wk_knife:这种合并单元格操作如果只进行一次不会出问题,如果多次运行这个程序就会出问题。如果不进行合并操作,多次运行也没问题。我原来的程序就是两个两个合并的。
      

  6.   

    我想你一定找过两个程序的不同之处了。
    我也不明白为什么。你的对象是如何建立的?
    好象不是用Delphi自带的吧。
    Range的赋值是不是有问题呢。Item[9].Execute;不也是合并吗?
    xlSheet.Range[sRow].Merge();是什么意思?光合并字符吗?
    如果我的问题是对的,不如把2列里的值直接取出,加到1中再Item[9].Execute;
    另外这个按序号的Item[9]是否不够保险,万一别人的排列和你的不一样呢?我们讨论讨论吧。
            
      

  7.   

    是这样,我定义了一个类用于报表打印,其中有一个OLE对象,没有用DELPHI的组件,但用组件也试过,同样出错。这个类有一系列方法用于打印表格,上述代码就是打印表体部分的一部分。CellsToRange是另外一个方法,用于将X,Y的地址转换为A1:B2这样的。MERGE是用于合并单元格的方法,由EXCEL提供。所以我也不推荐使用ITEM[N]。EXECUTE的方法,所以我注释掉了。
      

  8.   

    是否是预览的代码有问题?我重读了一遍你的问题,“当多次生成EXCEL文件后‘再打印预览’时”错误是发生在预览前还是后。