以C#编程方式打开存储在计算机上的Word文档

15

我正在使用WinForms。我有一个表单,上面有一个按钮。

目标:点击按钮时,在打开一个Word文档。文件路径是硬编码到程序中的。我不希望用户必须定位Word文档。

问题:我收到此错误消息。当我编写代码时,'Application'下面出现了红色的错误线。

输入图像描述

    private void button1_Click(object sender, EventArgs e)
    { 
        this.Application.Documents.Open(@"C:\Test\NewDocument.docx", ReadOnly:true)

    }

只是猜测,你是否缺少一个名为“Application”的字段或属性? - user585968
1
@Roy,你所说的“field”是什么意思? - taji01
https://msdn.microsoft.com/en-us/library/ms173118.aspx - user585968
顺便提一下,如果您发现在程序关闭时Word没有退出,可能是因为您的代码使用了双点。永远不要在com对象中使用2个点。这个问题涉及到Excel,但概念也适用于Word。例如:Application.Documents.Open() - user585968
4个回答

27

您可以考虑使用此选项,而不是在引用中添加互操作性:

System.Diagnostics.Process.Start(@"C:\Test\NewDocument.docx");

2
我更喜欢这种方法。这样,它可以在任何文本编辑器中打开,不一定是 MS Word。 - adamjhilton
1
我认为应该将这作为答案。 - OptimusPrime
更好的方法? using var _ = System.Diagnostics.Process.Start(@"C:\Test\NewDocument.docx");. - Mike Lowery

15

首先将 Microsoft.Office.Interop.Word 的 dll 添加到您的引用中,然后添加以下内容:

using Microsoft.Office.Interop.Word;

并使用以下代码:

Application ap = new Application(); 
Document document = ap.Documents.Open(@"C:\Test\NewDocument.docx");

2
我不知道为什么,但我必须使用ap.Visible = true;使Word可见。否则,它会打开文档,但窗口是不可见的。 - Daniel Bonetti
@DanielBonetti 是的,那很有道理。打开应用程序只是启动了进程,但并没有启动界面。如果您正在以不需要用户交互的方式处理Word文档(切换格式、编码等),这将非常有用。如果您想要打开Word UI,则需要指定它。 - Scopperloit
The type or namespace name 'Application' does not exist in the namespace - user2924019

6

这个 Application 不是 this.Application,而是 Microsoft.Office.Interop.Word.Application
所以你可以使用以下代码:

using System;
using Microsoft.Office.Interop.Word;

class Program
{
    static void Main()
    {
    // Open a doc file.
    Application application = new Application();
    Document document = application.Documents.Open("C:\\word.doc");

    //Do whatever you want

    // Close word.
    application.Quit();
    }
}

当我使用“using Microsoft.Office.Interop.Word;”时,Office下面会出现错误行。我需要添加其他的内容吗?@aisa - taji01
这可能会对你有所帮助:https://dev59.com/x2Qo5IYBdhLWcg3wbe_r - Zhr Saghaie
我在(Application) application = new (Application())下遇到了一个错误,在(Document)下也遇到了一个错误。 - taji01
你是否将Microsoft Office添加到你的参考中? - Zhr Saghaie
我做了。但那两个问题仍然出错了。@aisa - taji01

4

上面有一个很好的答案,即:

System.Diagnostics.Process.Start(@"C:\Test\NewDocument.docx");

这应该针对 .Net Core 2 及以上进行修改:

    var p = new Process();
    p.StartInfo = new ProcessStartInfo(filename)
    {
       UseShellExecute = true
    };
    p.Start();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接