【发布时间】:2014-04-08 02:18:08
【问题描述】:
我正在尝试使用 Microsoft Office Excel 进行 COM 自动化,它必须与尽可能多的系统兼容。这是一个相对基本的程序,它获取一个文本文件并使用它来填充大部分预制的 Excel 表单 (.xlsx),然后用户可以在该表单上签名并保存。
我只有 Visual Studio 2008,所以我没有使用“嵌入互操作”选项,而是使用后期绑定。它使用 C# 编程并使用 .Net Framework 3.5。
测试系统运行 Windows XP SP3 和 Office XP(我们将支持的最旧版本),并安装了 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 文件,但不幸的是,这不取决于我。
任何帮助将不胜感激,谢谢!
【问题讨论】:
-
当我这样做时,我有
using Microsoft.Office.Interop.Excel和私有 Microsoft.Office.Interop.Excel.Application _excelApp = new Microsoft.Office.Interop.Excel.Application();私有 Microsoft.Office.Interop.Excel.Workbook _excelWorkbook = null;私有 Microsoft.Office.Interop.Excel.Sheets _workSheets = null;私有 Microsoft.Office.Interop.Excel.Worksheet _work = null;私有 Microsoft.Office.Interop.Excel.Range _range = null;到处都是私有的 Microsoft.Office.Interop.Excel.Range _notesLineRange = null;`。能否提供更多细节? -
感谢梅雷迪思的评论!是的,我确保它被包括在内以及实例化所有相关对象。如果您愿意,我会发布完整的代码,但考虑到我使用后期绑定,这有点冗长。但是,我找到了答案,并且(令人尴尬的是)与程序无关。请参阅下面的答案以了解它是什么。
标签: c# excel visual-studio ms-office