1

我手头有一个应用程序,它应该复制一个 Word 文件,打开副本,搜索/替换文档中的多个值并保存它。使用带有 VB6 或 C# 的 Office-Interop 可以正常工作。现在,最终用户有一个 citrix-setup,这里打开文档的命令会导致调用应用程序崩溃。

这是一些 C# 示例代码,直到它引发异常:

try
{
    app = new ApplicationClass();
    app.Visible = true;

    object fileName = @"C:\some_document.doc";
    object readOnly = false;
    object isVisible = app.Visible;
    object missing = System.Reflection.Missing.Value;

    doc = app.Documents.Open(ref fileName,
                ref missing, ref readOnly,
                ref missing, ref missing, ref missing,
                ref missing, ref missing, ref missing,
                ref missing, ref missing, ref isVisible,
                ref missing, ref missing, ref missing);
}
catch (Exception exception)
{
    MessageBox.Show(exception.Message);
}

消息是“尝试读取或写入受保护的内存。这通常表明其他内存已损坏。”。错误发生在打开命令处。

如前所述,只要 Word 没有通过 Citrix 启动,一切都运行良好。

现在,我有什么选择?我很想知道为什么会发生这种情况以及可以更改的内容,以便我可以使用编辑文档的现有代码。我会使用一个库来进行搜索和替换,而完全不使用 Word,所以我很高兴能得到关于我可以使用的产品的提示。因为我不是在这里寻找花哨的东西,所以我不想投资很多钱。

哦,这些是 DOC 文件,没有 DOCX!

我忘了说:用 Excel 和 Interop 做类似的事情确实有效!这才是最让我感动的!

4

1 回答 1

1

MS 在“类似服务器的场景”中不支持 Office 互操作(Citrix 是恕我直言的一种特殊类型)......请参阅http://support.microsoft.com/default.aspx?scid=kb;EN-US; q257757#kb2

您的选项包括几个库(免费和商业) - 例如:

更新 - 在 OP 的编辑之后

MS表示不支持它(Word也不支持Excel!),这并不意味着它不能工作 - 只是你不能依赖它来工作......因为你写的是你使用DOC(不是DOCX)我怀疑你被我上面提到的那种商业图书馆困住了......对于Excel,还有可用的商业选项,如Aspose.Cells、Flexcel、SpreadsheetGear......

于 2011-10-06T12:26:26.857 回答