0

使用 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.
4

1 回答 1

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/

于 2012-08-24T21:05:58.747 回答