Как я могу вставить формулу в заголовок документа Word? - PullRequest
1 голос
/ 22 марта 2019

Я пытаюсь добавить формулу / выражение в мой документ Word программно. В моем сценарии мне нужно получить количество страниц минус 1. Если вы попытаетесь сделать это в самом документе, он должен выглядеть следующим образом:

{={NUMPAGES \*MERGEFORMAT }-1}

Теперь, когда я пытаюсь сделать это с помощью кода, с которым я борюсь ... Я пытался сделать это:

RangeWord.Fields.Add(this.Range, Interop.WdFieldType.wdFieldExpression, "{NUMPAGES \*MERGEFORMAT }-1", true)

Но в этом случае {NUMPAGES \*MERGEFORMAT} работает не как поле, а как обычный текст. Как я могу достичь того, чего хочу? Должен ли я добавить новое поле для {NUMPAGES \*MERGEFORMAT}?

1 Ответ

1 голос
/ 22 марта 2019

Не думаю, что так будет. Ввод скобок в код никак не работает. Это, однако, должно хорошо сработать:

doc.Variables.Add("myNumPages", doc.ComputeStatistics(Interop.WdStatistic.wdStatisticPages) - 1);
RangeWord.Fields.Add(this.Range, Interop.WdFieldType.wdFieldDocVariable, "myNumPages");

.

Edit / AddIt: Существует другой способ, с преимуществом наличия динамического поля, которое можно обновлять:

  1. Вставьте обычное поле {NUMPAGES} и нарисуйте его белым шрифтом или сделайте его скрытым
  2. Выберите поле, добавьте закладку "numpages", охватывающую все это поле
  3. Теперь добавьте поле Формула с формулой =numpages-1
* * Пример тысяча двадцать-один: * * 1 022
var hidField = RangeWord.Fields.Add(this.Range, Interop.WdFieldType.wdFieldExpression, "NUMPAGES");
hidField.Result.Bookmarks.Add("numpages");
hidField.Result.Font.Hidden = 1;
RangeWord.Fields.Add(this.Range, Interop.WdFieldType.wdFieldFormula, "numpages-1");

Возможно, вам придется поиграться с переменной диапазона, чтобы не перезаписывать ваше скрытое поле.

...