【问题标题】:Trying to open a second workbook returns null尝试打开第二个工作簿返回 null
【发布时间】:2019-05-20 16:26:35
【问题描述】:

我无法使用 Excel 互操作打开第二个工作簿,并且无法弄清楚原因。我查看了多个教程/帮助线程/等。包括this SO answer,看来我的逻辑应该可行。这是一个测试例程,它只是尝试打开两个工作簿,访问每个工作簿中的工作表,然后关闭工作簿并退出 excel:

using System;
using System.IO;
using System.Linq;
using Excel = Microsoft.Office.Interop.Excel;


    private static void TestOpen(string fromWorkbook, string toWorkbook, string fromSheet, string toSheet){
      Excel.Application excelApplication = new Excel.Application();
      Excel.Workbook srcworkBook = excelApplication.Workbooks.Open(fromWorkbook);
      Excel.Workbook destworkBook = excelApplication.Workbooks.Open(toWorkbook);
      Excel.Worksheet srcworkSheet = srcworkBook.Worksheets[fromSheet];
      Excel.Worksheet destworkSheet = destworkBook.Worksheets[toSheet];
      destworkBook.Close();
      srcworkBook.Close();
      excelApplication.Quit();
    }

程序失败,因为第二个工作簿destworkBooknull,即open 方法没有成功创建工作簿对象。这也不是文件本身的问题;如果我更改顺序并先打开destworkBook,那么srcworkBook 将变为null

我做错了什么?

【问题讨论】:

  • 你试过 destworkBook.Activate(); ?
  • 任务管理器中没有隐藏的 Excel 进程?
  • 您使用的是什么版本的 Excel?如果您创建第二个 Excel 应用程序并尝试用它打开第二个文件,它可以工作吗?
  • @CynicalSection 使用两个Excel.Applications 工作,但这会破坏程序的下一步,即从第一个工作簿中的工作表复制值到第二个工作簿中的工作表。我正在使用 Office 365 Excel(32 位)内部版本 9126。

标签: c# excel


【解决方案1】:

Aaaargh 事实证明这真的很愚蠢。我遇到的问题是我试图在不同的文件夹中打开两个工作簿但名称相同。如果您尝试手动执行此操作,Excel 会给您一个错误,说它不能同时打开两个具有相同名称的工作簿,但在 C# 中,您会得到 null 值而不是异常。一旦我将第二个工作簿重命名为稍微不同的名称,我就能够在同一个 Excel 应用程序对象中打开两个工作簿。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-04
    • 2019-01-30
    • 2020-07-17
    • 2016-02-17
    • 1970-01-01
    • 1970-01-01
    • 2016-10-31
    • 1970-01-01
    相关资源
    最近更新 更多