2013-06-24 150 views
0

我正在尝试使用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文件,但不幸的是,这不取决于我。

任何帮助将不胜感激,谢谢!

+0

当我这样做时,我有'使用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;'到处都是。你可以包括更多的细节? –

+0

感谢您对Meredith的评论!是的,我确定它包含在内,并且实例化所有相关的对象。如果你愿意,我会发布完整的代码,但考虑到我使用了晚期绑定,它会有点冗长。然而,我找到了答案,并且与程序无关(这令人尴尬)。看到下面的答案是什么。 – Arian

回答

0

好吧,等一些更多的研究后,我终于修好了。就像更新一样,即使您在Excel中执行了File >> Open,也会出现此错误,所以这不是我的程序导致的错误。

事实证明,我的测试平台在安装Office 2007时遇到了一些问题。它试图在Office 2007中打开.xlsx文件,即使它没有安装。我进入了控制面板>>文件夹选项>>文件类型,并将.xlsx更改为Microsoft开放式XML转换器,它工作正常!

相关问题