2 adkiidgtfk926 ADKIIDGTFK926 于 2014.09.19 21:19 提问

获取已打开多个的EXCEL操作

【背景】南方CASS软件打开几千个EXCEL表格(都是新建的,还没保存),它们的特点是:一个excel在进程中表现为一个exccel进程,现在想以第一个工作表作为名称保存所有excel。
使用System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application")只能获取第一个excel进程,于是我遍历进程,处理一个关闭一个,具体代码是:
private void btnSave_Click(object sender, EventArgs e)
{
Process[] pl = Process.GetProcesses();
for (int i = 0; i < pl.Length; i++)
{
try
{
if (pl[i].ProcessName.ToLower()=="excel")
{
MessageBox.Show(pl[i].Id.ToString());
Microsoft.Office.Interop.Excel.Application ap = (Microsoft.Office.Interop.Excel.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application");
MessageBox.Show(ap.Workbooks.Count.ToString());//问题表现
for (int j = 1; j <= ap.Workbooks.Count;j++ )
{
Microsoft.Office.Interop.Excel.Workbook book = ap.Workbooks[j];
if (book != null)
{
//MessageBox.Show(book.Name);
fileName = ((Microsoft.Office.Interop.Excel.Worksheet)book.ActiveSheet).Name;
book.SaveAs(filePath + fileName, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value,
Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
}
}
ap.Quit();
pl[i].Kill();
}
}
catch (System.Exception ex)
{
MessageBox.Show(ex.Message + "\n" + ex.StackTrace + "\n" + ex.Source + "\n" + ex.TargetSite);
}
}
}
【问题】但这样的问题在于有时候能成功处理,有时候又不行,原因是有时excel进程Workbooks.Count=0,感觉是关闭进程的问题,求大神指出问题在哪里,或者给出其他解决方案。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
C#判断已经被打开过的excel文件
C#判断已经被打开过的excel文件
pb操作Excel文件多个sheet(留存备查)
oleobject lole_export lole_export = create oleobject lole_export.ConnectToNewObject('excel.application') lole_export.Workbooks.add() ll_count = lole_export.workbooks(1).worksheets.count lds_ar
dsoframer控件学习小结(打开WORD,EXCEL等文件)
 根据自己对dsoframer控件的学习,想把dsoframer控件进行简单的包装为C#的usercontrol,大体需要作如下:(创建windows的usercontrol的步骤就不再说了。。。) 我们暂时不对dso打开网络文件的功能和上传文件功能作过多研究,一来由于我自己不用它提供的这个功能,二来确实觉得它的这方面功能不是很强大而且使用起来比较 麻烦,呵呵,请见谅! 1.使用前注册
VC++操作Excel的实例,包括读取写入以及遍历其Sheet
读取Excel的简单方法,此方法简单易懂,容易上手,代码采用VC6.0 编写 有实际程序可以直接运行。
python操作excel使用win32com
使用COM接口,直接操作EXCEL(只能在Win上)。 优点:可以满足绝大数要求。缺点:有些麻烦。 文档也可以参看OFFICE自带的VBA EXCEL 帮助文件(VBAXL.CHM)。这里面讲述了EXCEL VBA的编程概念,不错的教程!另外,《Python Programming on Win32》书中也有很详细的介绍。这本书中给出了一个类来操作EXCEL 文件,可以很容易的加以扩展
使用Excel+VBA对网页进行操作
使用Excel+VBA对网页进行操作 黄晨 · 5 个月前 因为在知乎的一些答案,最近总有私信问我如何使用VBA网抓的,我基本都没有回复。因为这个问题太大了,对于有基础的人来说,自己百度或者上ExcelHome论坛其实很容易找到答案,并不需要我说什么,而对于没有基础的人来说,三言两语不可能解决问题,我也不想把私信变成聊天窗。借着知乎开放专栏的机会,正好来仔细交代一下这个问题。 对于E
C#读取Excel多个sheet
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data.OleDb; namespace ConsoleApplication1 {     class Program     {         static void Main
VS2008环境使用MFC操作读取excel文件(OLE/COM)
踏破铁鞋无觅处,得来费死了工夫。     本文章的引用来源,本人综合而成。     http://blog.csdn.NET/chasemylov/archive/2010/08/27/5844826.aspx     http://blog.csdn.Net/SP_daiyq/archive/2011/02/17/6191233.aspx     使用软件 VS2008 excel版本
MFC 操作Excel 同一个工作簿中依次添加sheet页
1.备注:添加一个新的工作簿,其默认包含sheet12.获取当前的sheet页总数    long CWorksheets:: get_Count();3.获取最后一个sheet页    LPDISPATCH CWorksheets:: get_Item(VARIANT&amp;amp; Index);4.在最后一个sheet页后面依次添加    LPDISPATCH CWorksheets::Add(V...
MFC中使用OLE/COM操作EXCEL的方法
使用OLE的方法操作EXCEL,首先计算机必须安装excel,这样才会有接口暴露出来。本次使用大神封装好的类。 excel作为OLE/COM库插件,定义好了各类交互接口,而且这些接口是跨语言的,可以导入这些接口,操作excel,本问主要实现excel的读写,所以需要_Application、Workbooks、_Workbook、Worksheets、_Worksheet、Range这几个接口。