Domanda

Ho cercato di creare una libreria per sostituire il mergefields su un documento di Word 2003, tutto funziona bene, tranne che perdo lo stile applicato al campo quando lo sostituisco, c'è un modo per tenerlo?

Questo è il codice che sto usando per sostituire i campi:

private void FillFields2003(string template, Dictionary<string, string> values)
{
    object missing = Missing.Value;
    var application = new ApplicationClass();
    var document = new Microsoft.Office.Interop.Word.Document();

    try
    {
        // Open the file

        foreach (Field mergeField in document.Fields)
        {
            if (mergeField.Type == WdFieldType.wdFieldMergeField)
            {
                string fieldText = mergeField.Code.Text;
                string fieldName = Extensions.GetFieldName(fieldText);

                if (values.ContainsKey(fieldName))
                {
                    mergeField.Select();
                    application.Selection.TypeText(values[fieldName]);
                }
            }
        }
        document.Save();
    }
    finally
    {
        // Release resources
    }
}

Ho provato utilizzando i metodi CopyFormat e PasteFormat nella selezione, utilizzando anche il get_style e set_style ma senza exent.

È stato utile?

Soluzione

Invece di usare TypeText sopra la parte superiore della selezione utilizzare la proprietà il risultato del campo:

          if (values.ContainsKey(fieldName))
          {
             mergeField.Result = (values[fieldName]);
          }

Ciò assicurerà la formattazione nel campo viene mantenuto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top