动态内容控制映射的mswordc#
本文关键字:mswordc# 映射 内容控制 动态 | 更新日期: 2023-09-27 17:55:02
我使用的代码是这样的:
public void BindControlsToCustomXmlPart()
{
wordApp = (Word.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Word.Application");
foreach (Word.ContentControl contentControl in wordApp.ActiveDocument.ContentControls)
{
if (contentControl.Tag == "FieldName")
{
string xPathFieldName = "ns:records/ns:record/ns:FieldName";
contentControl.XMLMapping.SetMapping(xPathFieldName,
prefix, currentWordDocumentXMLPart);
}
最后发生的是,我想添加的每一个新字段,我都必须重复这个冗余代码:
if (contentControl.Tag == "FieldName2")
{
string xPathFieldName2 = "ns:records/ns:record/ns:FieldName2";
contentControl.XMLMapping.SetMapping(xPathFieldName2,
prefix, currentWordDocumentXMLPart);
}
是否有一种方法,我可以写这段代码一次,并有"FieldName"部分得到动态更新的每个字段?也就是说,有一些类型的循环,将增量通过每个xml文件中的xmlnode(在这种情况下,它将映射xml节点FieldName与FieldName标签的内容控件,然后映射xml节点FieldName2与FieldName2标签的内容控件
一个好的开始是创建一个函数来转换控件并多次重用该函数,如下所示
public contentControl BindControlsOperation(contentControl control, string pFieldName)
{
if (control.Tag == pFieldName)
{
string xPathFieldName = String.Format("ns:records/ns:record/ns:{0}",pFieldName);
control.XMLMapping.SetMapping(xPathFieldName,prefix, currentWordDocumentXMLPart);
}
return control;
}
然后您可以按照以下方式使用它
foreach (Word.ContentControl contentControl in wordApp.ActiveDocument.ContentControls)
{
contentControl = BindControlsOperation(contentControl,"FieldName")
}
下一步是有一个你想要用于字段的名称列表,并使用for循环
将其提供给你的算法....
List<string> names = "x,y,z";
for(int i=0;i < names.length();i++)
{
wordApp.ActiveDocument.ContentControls[i] = BindControlsOperation(wordApp.ActiveDocument.ContentControls[i],name[i])
}
希望能有所帮助