【问题标题】:Word Interop app to write text to the end of an open documentWord Interop 应用程序将文本写入打开文档的末尾
【发布时间】:2011-04-23 19:49:51
【问题描述】:

我正在尝试编写一个 C# 应用程序,该应用程序将查找在 MS Word 中打开的文档,并使用 word interop 将一些文本写入文档末尾。这可能吗?

我知道可以使用 .NET Framework 中内置的 Process 和 Sendkeys 来解决这个问题,但我想使用 Word Interop 来解决这个问题,这样我就可以在以后添加更多功能(sendkeys 也真的可以只在某些特殊情况下解决问题。)

谢谢!

更新:

我得到了以下部分解决方案:

    Application wordApp = new Application();
    wordApp.Visible = true;
    wordApp.Documents.Add();
    Range rng = wordApp.ActiveDocument.Range(0, 0);
    rng.Text = "New Text";

但我想使用一个已经打开的 word 实例而不是创建一个新实例。谢谢!

更新 2:

我很接近了!以下代码在 UAC 关闭的情况下工作

    Application wordApp = (Word.Application)Marshal.GetActiveObject("Word.Application");
    Range rng = wordApp.ActiveDocument.Range(0, 0);
    rng.Text = "New Text";

但我不确定如何让它在启用 UAC 的情况下工作。 UAC 不会导致任何错误或异常,它只是不会将文本写入打开的文档。

到目前为止感谢大家的帮助,现在就在眼前:)!

更新 3:

刚刚在打开 UAC 的情况下再次尝试它,它工作......奇怪。不过,如果您总体上知道有关互操作和 UAC 的任何好的资源,请在此处发布链接!

【问题讨论】:

    标签: c# interop ms-word


    【解决方案1】:

    您是否考虑过使用Marshal.GetActiveObject("Word.Application") 来获取正在运行的应用程序,而不是创建一个新应用程序?

    【讨论】:

    • 谢谢!!刚刚做了,这似乎得到了 word 的打开实例,但它没有发送文本(文本是通过我问题的更新部分中的代码发送的)。这可能是UAC问题吗? (我在 Win 7 上测试)
    • 我在禁用 UAC 的情况下重新启动了计算机,它开始工作。然后我再次重新启动计算机,重新启用 UAC 后,再次尝试该程序并且它工作。希望我最终会深入了解它!谢谢你的回答。
    • 您是否有特别的理由预期会出现与 UAC 相关的问题?如果您的应用和 Word 都以同一用户身份运行,我认为不会出现此类问题。
    【解决方案2】:

    绝对是埃文。 Microsoft Office 互操作程序集让您可以使用 C# 执行任何操作! SendKeys() 是个问题。

    http://msdn.microsoft.com/en-us/library/15s06t57(v=vs.80).aspx

    我想我应该详细说明一下 SendKeys():它甚至不再可靠地工作,因为它是主要的黑客工具。 MS Office 互操作程序集允许您对每个 Office 组件执行大量操作。我已经在 MS Excel 中广泛使用了它们,还有一些在 Word 中使用,您几乎可以执行用户可以通过编程执行的任何操作。

    【讨论】:

    • 感谢您的帮助!按照您提供的链接,我已经到达某个地方。现在我只需要知道如何连接到活动单词窗口(参见我的 q 更新)。你知道我能做到吗,或者你知道我错过的网上例子吗?再次感谢!
    【解决方案3】:

    您可以在下面尝试。这里我以图片插入为例。

     WordC.Application wordApp = new WordC.Application();
                    //  create Word document object
                    WordC.Document aDoc = null;
                    object readOnly = false;
                     object isVisible = false;
                     wordApp.Visible = false;
                   //  wordApp.DisplayAlerts = false;
    //docFileName is the filename with complete path. ex c://test.doc
    
                     aDoc = wordApp.Documents.Open(docFileName, Type.Missing, ref readOnly, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, ref isVisible, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
    aDoc.Activate();
    aDoc.InlineShapes.AddPicture(imgFilename, Type.Missing, Type.Missing, Type.Missing);
    
                    aDoc.Save();
                    aDoc.Close(Type.Missing, Type.Missing, Type.Missing);
                    wordApp.Quit(Type.Missing, Type.Missing, Type.Missing);
    

    【讨论】:

      猜你喜欢
      • 2012-10-19
      • 1970-01-01
      • 2016-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多