繁体   English   中英

Excel与C#Excel Interop并排比较

[英]Excel side by side comparison with C# Excel Interop

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

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代码以获取提示。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM