Word Interop Верхний и нижний колонтитулы с несколькими полями - PullRequest
0 голосов
/ 18 декабря 2018

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

        // Set headers
        foreach (Word.Section section in doc.Sections)
        {
            Word.Range headerRange = section.Headers[Word.WdHeaderFooterIndex.wdHeaderFooterPrimary].Range;
            headerRange.Fields.Add(headerRange, Word.WdFieldType.wdFieldPage);
            headerRange.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphRight;
        }

        // Set footers
        foreach (Word.Section wordSection in doc.Sections)
        {
            Word.Range footerRange = wordSection.Footers[Word.WdHeaderFooterIndex.wdHeaderFooterPrimary].Range;
            footerRange.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;
            footerRange.Font.ColorIndex = Word.WdColorIndex.wdDarkRed;
            footerRange.Font.Size = 20;
            footerRange.Text = "Confidential";
        }

В этом коде я пытаюсь получить слово «Конфиденциально» для перезаписисреднее поле.В настоящее время среднее поле не заполнено.В левом и правом полях указаны номер страницы и дата соответственно.Когда я запускаю код, он заменяется на «Конфиденциальный» код.Он также полностью удаляет фигуру, которая помещается в нижний колонтитул как фоновый цвет.

enter image description here Табуляция останавливается на 3,25 "и 6,5"

enter image description here

Как изменить существующие поля?Будет ли форма удаляться таким образом?

update: Следующий код - это то, что я получил до того, как почувствовал, что иду по кругу.Все это выглядит очень последовательно, как будто вы физически печатаете \ редактируете документ.Ик.В любом случае, это близко.Форматирование почему-то игнорируется, и я не могу заставить его применить его только к центральному тексту.Кроме того, если я раскомментирую строку поля даты, весь нижний колонтитул будет удален.

        // Set footers
        foreach (Word.Section wordSection in doc.Sections)
        {
            Word.Range footerRange = wordSection.Footers[Word.WdHeaderFooterIndex.wdHeaderFooterPrimary].Range;
            footerRange.Collapse(Word.WdCollapseDirection.wdCollapseEnd);
            footerRange.Paragraphs.TabStops.Add(wordApp.InchesToPoints(3.25F), Word.WdTabAlignment.wdAlignTabCenter);
            footerRange.Paragraphs.TabStops.Add(wordApp.InchesToPoints(6.5F), Word.WdTabAlignment.wdAlignTabRight);

            footerRange.Fields.Add(footerRange, Word.WdFieldType.wdFieldPage, "\t", true);
            footerRange.Font.ColorIndex = Word.WdColorIndex.wdDarkRed;
            footerRange.Font.Size = 20;
            footerRange.Text = "\tCONFIDENTIAL\t";
            footerRange.InsertBefore("01-DEC-18");
            //footerRange.Fields.Add(footerRange, Word.WdFieldType.wdFieldDate);
        }

enter image description here

Ответы [ 2 ]

0 голосов
/ 19 декабря 2018

Следующее заменяет «Конфиденциально» с указанным форматированием для того, что в настоящее время находится во втором разделе каждого основного диапазона нижнего колонтитула в документе.(«вторая секция» означает содержимое между первой и второй остановками табуляции).

Ключ находит две позиции табуляции в «Range местоположениях» и устанавливает цель Range для контента в одном символе послепервая позиция табуляции и один символ, предшествующий второй позиции табуляции.

Word.Range ftr = null;
Word.Paragraph para = null;
Word.Range paraRng = null;
Word.Range tStop1 = null;
Word.Range tStop2 = null;
int nrTabs;

foreach (Word.Section sec in doc.Sections)
        {
    ftr = sec.Footers[Word.WdHeaderFooterIndex.wdHeaderFooterPrimary].Range;
    para = ftr.Paragraphs[1];
    nrTabs = para.TabStops.Count;
    if (nrTabs == 2)
    {
        paraRng = para.Range;
        tStop1 = paraRng.Duplicate;
        tStop1.Find.Execute("^t", missing, missing, missing, missing, missing,
            missing, missing, Word.WdFindWrap.wdFindStop);
        tStop1.MoveStart(Word.WdUnits.wdCharacter, 1); //put it after the tab character
        tStop2 = tStop1.Duplicate;
        tStop2.Find.Execute("^t", missing, missing, missing, missing, missing,
            missing, missing, Word.WdFindWrap.wdFindStop);
        tStop2.MoveEnd(Word.WdUnits.wdCharacter, -1); //put it before the tab character
        tStop1.End = tStop2.End;
        tStop1.Text = "Confidential";
        tStop1.Font.ColorIndex = Word.WdColorIndex.wdDarkRed;
        tStop1.Font.Size = 20f;
    }
}
0 голосов
/ 19 декабря 2018

Я просто пошел вперед и сделал это вручную, чтобы получить лучшие результаты.

        string tab = "\t";
        string note = "Confidential";
        string dt = DateTime.Today.Date.ToString("d");
        int pg = 0;
        // Set footers
        foreach (Word.Section wordSection in doc.Sections)
        {
            pg += 1;
            Word.Range footerRange = wordSection.Footers[Word.WdHeaderFooterIndex.wdHeaderFooterPrimary].Range;
            footerRange.Collapse(Word.WdCollapseDirection.wdCollapseEnd);
            footerRange.Paragraphs.TabStops.Add(wordApp.InchesToPoints(3.25F), Word.WdTabAlignment.wdAlignTabCenter);
            footerRange.Paragraphs.TabStops.Add(wordApp.InchesToPoints(6.5F), Word.WdTabAlignment.wdAlignTabRight);
            string footerString = $"pg. {pg.ToString()}{tab}{note}{tab}{dt}";
            footerRange.Text = footerString;
        }
...