/ / Las propiedades personalizadas no se actualizan para la palabra a través de openXML - c # -3.0, office-interop, openxml-sdk

Las propiedades personalizadas no se actualizan para la palabra a través de openXML - c # -3.0, office-interop, openxml-sdk

Estoy tratando de actualizar las propiedades personalizadas de la palabraDocumento a través de la programación Open XML, pero parece que las propiedades actualizadas no se guardan correctamente para el documento Word. Entonces, cuando abro el documento después de la ejecución exitosa del código de la propiedad personalizada de actualización, aparece el cuadro de mensaje que es "Este documento contiene un campo que puede hacer referencia a otros archivos; ¿desea actualizar los campos del documento?" Si presiono el botón "NO", no se guardarán todas las propiedades de actualización en el documento. Si optamos por la opción sí, se actualizarán las propiedades, pero debo guardar las propiedades explícitamente. Sugiera guardar las propiedades en el documento sin recibir un mensaje de confirmación o corromper el documento. :)

el fragmento de código se da como abajo,

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();
}
}

Estoy utilizando .Net framework 3.5 con Open XML SDK 2.0 y Office 2013.

Respuestas

0 para la respuesta № 1

Prueba este

        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();

Tienes que actualizar tus campos de documento en abierto.