Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用C#填写Word文档?_C#_.net_Forms_Ms Word_Ms Office - Fatal编程技术网

如何使用C#填写Word文档?

如何使用C#填写Word文档?,c#,.net,forms,ms-word,ms-office,C#,.net,Forms,Ms Word,Ms Office,我有一个Word文档,letter.docx,这是一封我打算为一个聚会寄给数百人的信。这封信已经写好了,并以自己独特的方式格式化,字体大小和字体各不相同。它已经设置好并准备就绪,带有占位符,我必须在其中填写更改的变量,如姓名、地址、电话号码等 现在,我想编写一个C#程序,在这个程序中,用户可以在表单中键入变量,如姓名、地址等,点击按钮,然后生成letter.docx,在正确的位置填入正确的信息 我知道Word具有允许您执行此操作的功能,但我确实希望在C#中执行此操作 我不知道这门语言中有什么内置

我有一个Word文档,letter.docx,这是一封我打算为一个聚会寄给数百人的信。这封信已经写好了,并以自己独特的方式格式化,字体大小和字体各不相同。它已经设置好并准备就绪,带有占位符,我必须在其中填写更改的变量,如姓名、地址、电话号码等

现在,我想编写一个C#程序,在这个程序中,用户可以在表单中键入变量,如姓名、地址等,点击按钮,然后生成letter.docx,在正确的位置填入正确的信息


我知道Word具有允许您执行此操作的功能,但我确实希望在C#中执行此操作

我不知道这门语言中有什么内置的东西,但似乎完全是你想要的


如果你能提供你想要做什么的具体例子(占位符字段?特别是命名文本位?),我可能会给你一个更精确的答案,直接针对你的问题。

Word提供了可以在C中使用的COM对象#

在“添加引用”对话框的“COM”选项卡下添加对Microsoft office互操作的引用

此外,请参见此问题:


当然你能做到。在项目中使用Microsoft.Office.Interop.Word引用

首先,从“插入”选项卡将文档中要更新的所有字段标记为书签(例如,NameField标记为“name\u field”)。然后,在C代码中添加以下内容:

Microsoft.Office.Interop.Word.Application wordApp = null;
wordApp = new Microsoft.Office.Interop.Word.Application();
wordApp.Visible = true;

Document wordDoc = wordApp.Documents.Open(@"C:\test.docx");
Bookmark bkm = wordDoc.Bookmarks["name_field"];
Microsoft.Office.Interop.Word.Range rng = bkm.Range;
rng.Text = "Adams Laura"; //Get value from any where

请记住正确保存并关闭文档。(您可以)

我曾经遇到过需要填写一些MS Word表单的情况,因此我使用了类似于以下代码的代码(请确保您参考
Microsoft.Office.Interop.Word
;我使用了版本14,但您应该根据自己的情况进行调整):


正如你所看到的,其实一点也不难。表单上还有一些其他选项,因此您必须研究它们,但最常用的选项,复选框和文本框,就是我在这里演示的选项。如果您没有创建表单,我建议您仔细检查并确保您知道所有字段,因为这正是您需要的。

占位符不是字段,带有大写字母F,因为我不知道字段是什么。它似乎有着特殊的意义。基本上,我已经格式化了文本,想从列表中交换出/交换姓名、地址和电话号码。啊。那将只是搜索和替换。我上面的链接就是用他们的库做的。看起来也有人这样做。看起来很简单。:)您可以在文档中设置虚拟文本(格式符合您的喜好),将它们添加到书签中,然后从C#访问它们并设置它们的值。
// FormData is a custom container type that holds data... you'll have your own.
public static void FillOutForm(FormData data)
{
    var app = new Microsoft.Office.Interop.Word.Application();
    Microsoft.Office.Interop.Word.Document doc = null;

    try 
    {
        var filePath = "Your file path.";
        doc = app.Documents.Add(filePath);
        doc.Activate();

        // Loop over the form fields and fill them out.
        foreach(Microsoft.Office.Interop.Word.FormField field in doc.FormFields)
        {
            switch (field.Name)
            {
                // Text field case.
                case "textField1":
                    field.Range.Text = data.SomeText;
                    break;
                // Check box case.
                case "checkBox1":
                    field.CheckBox.Value = data.IsSomethingTrue;
                    break;
                default:
                    // Throw an error or do nothing.
                    break;
            }
        }

        // Save a copy.
        var newFilePath = "Your new file path.";
        doc.SaveAs2(newFilePath);
    }
    catch (Exception e)
    {
        // Perform your error logging and handling here.
    } 
    finally
    {
        // Make sure you close things out.
        // I tend not to save over the original form, so I wouldn't save 
        // changes to it -- hence the option I chose here.
        doc.Close(
            Microsoft.Office.Interop.Word.WdSaveOptions.wdDoNotSaveChanges);
        app.Quit();
    }
}