【问题标题】:Excel side by side comparison with C# Excel InteropExcel 与 C# Excel 互操作的并排比较
【发布时间】:2018-04-08 23:03:48
【问题描述】:

尝试使用 Excel 互操作通过 C# 并排加载两个 Excel 工作簿。

我尝试了多种方法,但无法使其正常工作。我已经让它可以处理 Word 文档了。

Microsoft.Office.Interop.Excel.Application ExcelApp = new Microsoft.Office.Interop.Excel.Application();
ExcelApp.Visible = true;
Microsoft.Office.Interop.Excel.Workbook doc1 = ExcelApp.Workbooks.Open(fileToOpen.ToString());
Microsoft.Office.Interop.Excel.Workbook doc2 = ExcelApp.Workbooks.Open(file2ToOpen.ToString());
var result = doc1.Windows.CompareSideBySideWith(doc2.Windows[1].Caption);

两个工作簿都可以正常打开,但是我在 CompareSideBySideWith 方法上遇到了异常:

'Invalid index. (Exception from HRESULT: 0x8002000B (DISP_E_BADINDEX))'

我认为我的参数字符串有误,但我不知道要为 WindowName 输入什么。我已经尝试了文档名称、工作表名称、完整路径,无论是否带有扩展名 - 不知道还能尝试什么。

在 Slai 的帮助下更新 - 修改了工作代码:

Microsoft.Office.Interop.Excel.Application ExcelApp = new Microsoft.Office.Interop.Excel.Application();
ExcelApp.Visible = true;
Microsoft.Office.Interop.Excel.Workbook doc1 = ExcelApp.Workbooks.Open(fileToOpen.ToString());
Microsoft.Office.Interop.Excel.Workbook doc2 = ExcelApp.Workbooks.Open(file2ToOpen.ToString());
doc1.Activate(); 
var result = ExcelApp.Windows.CompareSideBySideWith(doc2.Windows[1].Caption);

【问题讨论】:

  • .Windows[0] 呢?
  • Windows [0] 抛出错误,这里的数组似乎从 1 开始。

标签: c# excel excel-interop


【解决方案1】:

doc2.Windows 不在doc1.Windows 集合中。可以改用ExcelApp.Windows

var wb2 = ExcelApp.Workbooks.Open(file2ToOpen.ToString());
var wb1 = ExcelApp.Workbooks.Open(fileToOpen.ToString()); // wb1 is now active

bool result = ExcelApp.Windows.CompareSideBySideWith(wb2.Windows[1].Caption); 

录制宏功能可用于比较生成的 VBA 代码的提示。

【讨论】:

  • 啊!方法名称与 Microsoft Word 的方法相匹配,但实现so 不同。这为我解决了。我将在我的原始答案中发布更新后的工作代码,如果您愿意,可以将其粘贴到您的答案中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-27
  • 1970-01-01
  • 2017-02-11
  • 2022-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多