Question

J'ai essayé de créer une bibliothèque pour remplacer les mergefields sur un document Word 2003, tout fonctionne bien, sauf que je perds le style appliqué au champ quand je remplacerai, est-il un moyen de le garder?

Voici le code que je utilise pour remplacer les champs:

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
    }
}

J'ai essayé d'utiliser les méthodes de CopyFormat et PasteFormat dans la sélection, en utilisant aussi le get_style et set_style mais sans exent.

Était-ce utile?

La solution

Au lieu d'utiliser TypeText sur le dessus de votre sélection utiliser la propriété Résultat du champ:

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

Cela permettra d'assurer la mise en forme dans le champ est conservé.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top