Excel与C#Excel Interop

时间:2018-04-07 19:03:03

标签: c# excel excel-interop

尝试使用Excel interop与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);

1 个答案:

答案 0 :(得分: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代码。