Получить значение из поля слияния C# Word VSTO

Название говорит все, но я объясню более подробно. Вот эта вещь.

В настоящее время я разрабатываю дополнительный код в надстройке Word VSTO, которая использует поля слияния в шаблоне. Поля слияния в шаблоне заполняются с использованием данных из внешнего файла. Что мне нужно, это прочитать значение из поля слияния, но я совершенно не знаю, как это сделать. Я искал несколько дней, но ни одна из статей, которые я прочитал, не сработала для меня...

Итак, вопрос:

Как я могу получить значение из определенного поля слияния в Word, используя VSTO?

1 ответ

Mailmerge довольно прост во ВСТО, вот две магические линии, которые будут делать

//Pass in the path of external file    
document.MailMerge.OpenDataSource(Name: vm.FilePath.FullName);
document.MailMerge.Destination = WdMailMergeDestination.wdSendToNewDocument;

Я нашел еще один полный пример здесь

Этот кодовый блок извлекает все поля в документе

public static List<string> GetFieldsUsedInDocument(Document document)
        {
            var fields = new List<string>();

            foreach (MailMergeField fld in document.MailMerge.Fields)
            {
                if (fld.Code != null)
                {
                    fields.Add(fld.Code.Text.ToUpper());
                }
            }
            return fields;
        }

Чтобы получить имена MergeField из списка полей, возвращенных выше GetFieldsUsedInDocument

 public static List<string> GetMergeFields(List<string> allFields)
        {
            var merges = new List<string>();

            foreach (var field in allFields)
            {
                var isNestedField = false;
                foreach (var fieldChar in field)
                {
                    int charCode = fieldChar;
                    if (charCode == 19 || charCode == 21)
                    {
                        isNestedField = true;
                        break;
                    }
                }
                if (!isNestedField)
                {
                    var fieldCode = field;
                    if (fieldCode.Contains("MERGEFIELD"))
                    {
                        var fieldName = fieldCode.Replace("MERGEFIELD", string.Empty).Replace('"', ' ').Trim();
                        var charsToGet = fieldName.IndexOf(" ");
                        if (charsToGet < 0)
                            charsToGet = fieldName.IndexOf(@"\");

                        charsToGet = charsToGet > 0 ? charsToGet : fieldName.Length;

                        fieldName = fieldName.Substring(0, charsToGet);

                        if (!merges.Contains(fieldName))
                        {
                            merges.Add(fieldName);
                        }
                    }
                }
            }
            return merges;
        }
Другие вопросы по тегам