C# 在.docx文件中添加文本和图片

C# 在.docx文件中添加文本和图片,c#,.net,ms-word,ms-office,office-interop,C#,.net,Ms Word,Ms Office,Office Interop,我使用一个Office Word文件(模板),在这个文件中有重复的默认文本和照片,我必须用另一个图片和文本替换它 如何在模板中定义特定区域,然后在C#中找到这些区域以替换它们?我认为最好的方法是找到如何操作word xml结构以包含所需数据 对于模板填充和修改,可以使用Microsoft提供的XML 您也可以在这里遵循此手动方法,而不使用SDK。 . 您将添加一个自定义XML资源,其中包含模板的更改/资源 如果你不需要那么灵活,你可以在Word中使用标准的内容控件/图片内容控件,然后在C#中替换

我使用一个Office Word文件(模板),在这个文件中有重复的默认文本和照片,我必须用另一个图片和文本替换它


如何在模板中定义特定区域,然后在C#中找到这些区域以替换它们?

我认为最好的方法是找到如何操作word xml结构以包含所需数据

对于模板填充和修改,可以使用Microsoft提供的XML

您也可以在这里遵循此手动方法,而不使用SDK。 . 您将添加一个自定义XML资源,其中包含模板的更改/资源

如果你不需要那么灵活,你可以在Word中使用标准的内容控件/图片内容控件,然后在C#中替换它们-这取决于你在替换元素时的灵活程度。。
您可以在这里找到一个使用图片内容控制的好的完整示例:

好的,最后我尝试了这种方法;将Word文件与内容控件一起使用,并使用XML文件将数据绑定到它们

为此,我使用以下代码:

string outFile = @"D:\template_created.docx";
string docPath = @"D:\template.docx";
string xmlPath = @"D:\template.xml";

File.Copy(docPath, outFile);

using (WordprocessingDocument doc = WordprocessingDocument.Open(outFile, true))
{
    MainDocumentPart mdp = doc.MainDocumentPart;
    if (mdp.CustomXmlParts != null)
    {
        mdp.DeleteParts<CustomXmlPart>(mdp.CustomXmlParts);
    }
    CustomXmlPart cxp = mdp.AddCustomXmlPart(CustomXmlPartType.CustomXml);

    FileStream fs = null;
    try
    {
        fs = new FileStream(xmlPath, FileMode.Open);

        cxp.FeedData(fs);
        mdp.Document.Save();
    }
    finally
    {
        if (fs != null)
        {
            fs.Dispose();
        }
    }
}
stringoutfile=@“D:\template\u created.docx”;
字符串docPath=@“D:\template.docx”;
字符串xmlPath=@“D:\template.xml”;
文件副本(docPath,outFile);
使用(WordprocessingDocument doc=WordprocessingDocument.Open(outFile,true))
{
MainDocumentPart mdp=doc.MainDocumentPart;
if(mdp.CustomXmlParts!=null)
{
mdp.DeleteParts(mdp.CustomXmlParts);
}
CustomXmlPart cxp=mdp.AddCustomXmlPart(CustomXmlPartType.CustomXml);
FileStream fs=null;
尝试
{
fs=新文件流(xmlPath,FileMode.Open);
cxp.FeedData(fs);
mdp.Document.Save();
}
最后
{
如果(fs!=null)
{
fs.Dispose();
}
}
}

当我运行应用程序时,它创建了自定义XML文件并将其附加到我的Word文件中。当我打开Word文件时,没有出现错误,但所有的内容控制都没有填写。

我的最终方法是在Word文档中使用唯一id的内容控制。然后我可以用C#找到这些id并替换内容。

嗨,马克,谢谢你的帮助。我只是发现我们可以在Word文件中添加特殊控件,并为每个控件指定一个特定的名称。你认为在C#app中按名称搜索这些文章是否是一个好的idéea?你是指内容控制/图片内容控制吗?取决于您希望在替换元素时的灵活性。。如果这个控件能让你做你想做的事,我会先试试这个解决方案!您可以在这里找到一个使用图片内容控件的完整示例:我将此选项添加到我的答案中以供将来参考是的,内容控件(富文本、图片等)。我认为这是一种在Word文档中指定区域并在找到区域后添加值的好方法。但“灵活”是什么意思?使用内容控件,您只能更改设置的控件并替换该控件中的对象。。使用上述解决方案,您可以操作整个xml结构,这是非常强大的。。。只是想提一下,因为你想要“另一种方法”(根据你的问题)