gisweis 2014-09-19 13:19
浏览 2253

获取已打开多个的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,感觉是关闭进程的问题,求大神指出问题在哪里,或者给出其他解决方案。

  • 写回答

0条回答

    报告相同问题?

    悬赏问题

    • ¥15 #MATLAB仿真#车辆换道路径规划
    • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
    • ¥15 数据可视化Python
    • ¥15 要给毕业设计添加扫码登录的功能!!有偿
    • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
    • ¥15 微信公众号自制会员卡没有收款渠道啊
    • ¥100 Jenkins自动化部署—悬赏100元
    • ¥15 关于#python#的问题:求帮写python代码
    • ¥20 MATLAB画图图形出现上下震荡的线条
    • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘