gpt4 book ai didi

c#-3.0 - 自定义属性不会通过 openXML 为单词更新

转载 作者:行者123 更新时间:2023-12-05 06:42:29 25 4
gpt4 key购买 nike

我正在尝试通过 Open XML 编程更新 word 文档的自定义属性,但更新的属性似乎没有为 word 文档正确保存。因此,当我在成功执行更新自定义属性代码后打开文档时,我收到消息框“此文档包含可能引用其他文件的字段;您要更新文档中的字段吗?”如果我按下“否”按钮,则所有更新属性都不会保存到文档中。如果我们选择"is"选项,那么它将更新属性,但我需要明确保存属性。请建议在不收到确认消息或损坏文档的情况下将属性保存到文档中。 :)

代码片段如下,

public void SetCustomValue(
WordprocessingDocument document, string propname, string aValue)
{
CustomFilePropertiesPart oDocCustomProps = document.CustomFilePropertiesPart;

Properties props = oDocCustomProps.Properties;

if (props != null)
{
//logger.Debug("props is not null");
foreach (var prop in props.Elements<CustomDocumentProperty>())
{
if (prop != null && prop.Name == propname)
{
//logger.Debug("Setting Property: " + prop.Name + " to value: " + aValue);
prop.Remove();
var newProp = new CustomDocumentProperty();
newProp.FormatId = "{D5CDD505-2E9C-101B-9397-08002B2CF9AE}";
newProp.Name = prop.Name;
VTLPWSTR vTLPWSTR1 = new VTLPWSTR();
vTLPWSTR1.Text = aValue;
newProp.Append(vTLPWSTR1);
props.AppendChild(newProp);
props.Save();
}
}

int pid = 2;

foreach (CustomDocumentProperty item in props)
{
item.PropertyId = pid++;
}

props.Save();
}
}

我正在使用 .Net framework 3.5 与 Open XML SDK 2.0 和 Office 2013。

最佳答案

试试这个

        var CustomeProperties = xmlDOc.CustomFilePropertiesPart.Properties;

foreach (CustomDocumentProperty customeProperty in CustomeProperties)
{
if (customeProperty.Name == "DocumentName")
{
customeProperty.VTLPWSTR = new VTLPWSTR("My Custom Name");
}
else if (customeProperty.Name == "DocumentID")
{
customeProperty.VTLPWSTR = new VTLPWSTR("FNP.SMS.IQC");
}
else if (customeProperty.Name == "DocumentLastUpdate")
{
customeProperty.VTLPWSTR = new VTLPWSTR(DateTime.Now.ToShortDateString());
}
}

//Open Word Setting File
DocumentSettingsPart settingsPart = xmlDOc.MainDocumentPart.GetPartsOfType<DocumentSettingsPart>().First();
//Update Fields
UpdateFieldsOnOpen updateFields = new UpdateFieldsOnOpen();
updateFields.Val = new OnOffValue(true);

settingsPart.Settings.PrependChild<UpdateFieldsOnOpen>(updateFields);
settingsPart.Settings.Save();

您必须在打开时更新文档字段。

关于c#-3.0 - 自定义属性不会通过 openXML 为单词更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36976199/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com