Вставка разрыва страницы MS Word в неправильном месте - PullRequest
1 голос
/ 05 июня 2010

Я создаю документ MS Word полностью через C # в VS 2008. Я пытаюсь вставить разрыв страницы, и когда вставляется разрыв страницы, вместо того, чтобы вставлять его и добавлять новую страницу внизу, он вставляетперерыв и добавление страницы вверху.Это приводит к тому, что первая страница является последней страницей.

Вот код для вставки разрыва страницы:

                start = 0;
                end = 0;
                Word.Range rngDoc = Range(ref start, ref end);
                rngDoc.Collapse(ref CollapseEnd);
                rngDoc.InsertBreak(ref pageBreak);
                rngDoc.Collapse(ref CollapseEnd);

Кроме того, каждая страница используется таблицей, если это помогает в диагностике

Ответы [ 4 ]

1 голос
/ 13 декабря 2016

Я использовал подход Тодда, но в vb.net:

Private Sub InsertNewPageAtEndofDoc(app As Word.Application)
        Dim rng As Word.Range
        Dim adRange As Word.Range
        adRange = app.ActiveDocument.Range
        rng = app.ActiveDocument.Range(adRange.Start, adRange.End)
        rng.Collapse(Word.WdCollapseDirection.wdCollapseEnd)
        rng.InsertBreak(Word.WdBreakType.wdPageBreak)
        rng.Collapse(Word.WdCollapseDirection.wdCollapseEnd)
End Sub
1 голос
/ 05 июня 2010

InsertBreak никогда не вставляется после выбора. Обратите внимание на замечания MSDN :

При вставке разрыва страницы или столбца выбор заменяется разрывом. Если вы не хотите заменять выделение, используйте метод Collapse перед использованием метода InsertBreak. Когда вы вставляете разрыв раздела, разрыв вставляется сразу перед объектом Selection.

(Мой акцент.) Чтобы сделать перерыв в конце страницы, я думаю, вам не придется ничего выбирать (как вы здесь) в конце документа.

Я не могу вспомнить, имеет ли Document свой собственный диапазон. Можете ли вы просто получить всеобъемлющий диапазон от myDoc.Characters?

Если нет, то первое, что я бы попробовал, это

start = int.MaxValue;
end = int.MaxValue;

Если это не сработает, вы можете прибегнуть к ComputeStatistics(). Примерно так:

WdStatistic stats = WdStatistic.wdStatisticCharacters;
var chars = myDoc.ComputeStatistics(stats, false);

А затем создайте свой диапазон из этого значения. Хотел бы я помочь больше, но это было для меня какое-то время. Удачи!

1 голос
/ 05 июня 2010

Вам необходимо установить rngDoc для вставки в конце ActiveDocument.Range. Вот некоторые VBA, которые было бы легко перенести на C #, которые делают это.

Sub InsertNewPageAtEndofDoc()
    Dim rng As Range
    Dim adRange As Range
    Set adRange = ActiveDocument.Range
    Set rng = ActiveDocument.Range(adRange.Start, adRange.End)
    rng.Collapse (wdCollapseEnd)
    rng.InsertBreak (wdPageBreak)
    rng.Collapse (wdCollapseEnd)
End Sub
0 голосов
/ 05 июня 2010

Я не эксперт в этом, так что это всего лишь предположение, это выглядит немного странно, хотя вы выбираете диапазон от 0 до 0, а затем сворачиваете его. Диапазон от 0 до 0 звучит так, как будто он даст вам самое начало документа, я думаю, что вам нужно выбрать последний бит документа, но не знаете, как это сделать.

...