使用asp.net和C#填写受保护文档上的Word文档表单字段

时间:2012-08-24 17:49:50

标签: c# asp.net ms-word

使用Visual Studio 2010和Microsoft Word 2010:

我有一个文档,在文档中进行编辑时,启用限制编辑以仅允许“填写表单”。

在Word文档中,我有文本表单字段,我是从旧版控件的“开发人员”选项卡中添加的。

我想要做的是在这些表单字段中填入一些数据(比如他们的名字,地址等......我已经知道并已从数据库中提取的内容)。

我尝试了什么:

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

var oWordApplication = new ApplicationClass();

object missing = System.Reflection.Missing.Value;
object fileName = ConfigurationManager.AppSettings["DocxPath"];
object newTemplate = false;
object docType = 0;
object isVisible = true;

var oWordDoc = oWordApplication.Documents.Add(fileName, newTemplate, docType, isVisible);

                if (oWordDoc.Bookmarks.Exists("txtName"))
                {
                    oWordDoc.Bookmarks["txtName"].Range.Text = "Test Field Entry from webform";
                }

我能够找到我想要编辑的字段但是当我尝试修改文本时出现以下错误:

You are not allowed to edit this selection because it is protected.

1 个答案:

答案 0 :(得分:0)

这是我的工作。 创建一个可以直接映射到word模板的类,然后将类序列化为xml并使用下面的方法。

    public static void ReplaceCustomXML(string fileName, string customXML)
    {
        using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(fileName, true))
        {
            MainDocumentPart mainPart = wordDoc.MainDocumentPart;
            mainPart.DeleteParts<CustomXmlPart>(mainPart.CustomXmlParts);
            //Add a new customXML part and then add the content. 
            CustomXmlPart customXmlPart = mainPart.AddCustomXmlPart(CustomXmlPartType.CustomXml);
            //Copy the XML into the new part. 
            using (StreamWriter ts = new StreamWriter(customXmlPart.GetStream())) ts.Write(customXML);
        }
    }

    public static string SerializeObjectToString(this object obj)
    {
        using (MemoryStream stream = new MemoryStream())
        {
            XmlSerializer x = new XmlSerializer(obj.GetType());
            x.Serialize(stream, obj);
            return Encoding.Default.GetString(stream.ToArray());
        }
    }

我建议您阅读本文,因为它会使用openxml快速更新文档。

http://seroter.wordpress.com/2009/12/23/populating-word-2007-templates-through-open-xml/