我正在尝试使用Microsoft Office Excel来执行COM自动化,并且它必须与尽可能多的系统兼容。这是一个相对基本的程序,它接受一个文本文件并使用它来填充大部分预先创建的Excel表单(.xlsx),然后用户可以注销并保存。使用Office XP Interop打开.xlsx
我只有Visual Studio 2008,所以不是使用“Embed Interop”选项,而是使用后期绑定。它正在C#中编程并使用.Net Framework 3.5。
测试系统运行带有Office XP(我们将支持的最老的一个)的Windows XP SP3,并安装了Office 2007兼容包和.Net 3.5。我能够在文件浏览器中正常打开.xlsx文件,但是当试图通过我的程序打开它时会出现错误,提示“文件格式无法识别”等。
我认为问题就出在打开的工作簿,这里是我对这些代码:
//Add a new workbook.
Parameters = new Object[15];
Parameters[0] = openFileDialog1.FileName;
for (int i = 1; i < 15; i++) {
if(i == 2)
Parameters[2] = true; //make file read only
else
Parameters[i] = Missing.Value; //default on the rest
}
objBook_Late = objBooks_Late.GetType().InvokeMember("Open",
BindingFlags.InvokeMethod, null, objBooks_Late, Parameters);
我已经在Excel 2010和2007年至今进行了测试,他们两人都工作得很好,所以我不完全知道为什么,这在WinXP上导致错误。如果可以的话,我会使用旧的.xls文件,但不幸的是,这不取决于我。
任何帮助将不胜感激,谢谢!
当我这样做时,我有'使用Microsoft.Office.Interop.Excel'和私人的Microsoft.Office.Interop.Excel.Application _excelApp =新的Microsoft.Office.Interop.Excel.Application(); private Microsoft.Office.Interop.Excel.Workbook _excelWorkbook = null; private Microsoft.Office.Interop.Excel.Sheets _workSheets = null; private Microsoft.Office.Interop.Excel.Worksheet _work = null; private Microsoft.Office.Interop.Excel.Range _range = null; 私人的Microsoft.Office.Interop.Excel.Range _notesLineRange = null;'到处都是。你可以包括更多的细节? –
感谢您对Meredith的评论!是的,我确定它包含在内,并且实例化所有相关的对象。如果你愿意,我会发布完整的代码,但考虑到我使用了晚期绑定,它会有点冗长。然而,我找到了答案,并且与程序无关(这令人尴尬)。看到下面的答案是什么。 – Arian