【问题标题】:Opening .xlsx using Office XP Interop使用 Office XP 互操作打开 .xlsx
【发布时间】: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


【解决方案1】:

好吧,经过更多研究,我终于修复了它。作为更新,即使您在 Excel 中执行文件 >> 打开,也会出现此错误,因此不是我的程序导致错误。

事实证明,我的测试台在安装 Office 2007 时存在一些遗留问题。它试图用 Office 2007 打开 .xlsx 文件,即使它不再安装。我进入控制面板>>文件夹选项>>文件类型并将.xlsx更改为Microsoft open XML转换器,它起作用了!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-17
    • 2018-05-27
    • 1970-01-01
    • 2010-09-19
    • 1970-01-01
    • 2011-01-17
    相关资源
    最近更新 更多