【问题标题】:MS Word page break inserting in wrong placeMS Word 分页符插入错误的位置
【发布时间】:2010-06-04 21:03:43
【问题描述】:

我在 VS 2008 中完全通过 C# 创建一个 MS Word 文档。我试图插入一个分页符,当插入分页符时,不是插入它并在底部添加一个新页面,而是插入休息并在顶部添加一个页面。这导致第一页是最后一页。

下面是插入分页符的代码:

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

此外,如果这有助于诊断,则每个页面都由一个表使用

【问题讨论】:

  • 看起来是在插入“之前”而不是“之后”。
  • 是的,这正是它正在做的事情。但我不知道如何更正它以便它在之后插入。

标签: c# ms-word insert page-break


【解决方案1】:

InsertBreak 在选择之后从不插入。注意MSDN remarks

当您插入分页符或分栏符时,所选内容将替换为分页符。如果您不想替换所选内容,请在使用InsertBreak 方法之前使用Collapse 方法。当您插入分节符时,会立即插入分节符Selection 对象之前。

(我的重点。)要在页面末尾休息一下,我认为您必须在文档末尾不选择任何内容(因为您在这里)。

我不记得Document 是否有自己的范围。你能从myDoc.Characters得到一个包罗万象的范围吗?

如果没有,我会尝试的第一件事是

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

如果这不起作用,您可以求助于ComputeStatistics()。像这样的:

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

然后根据该值创建您的范围。希望我能提供更多帮助,但对我来说已经有一段时间了。祝你好运!

【讨论】:

  • 我将采纳你对角色统计的想法,看看我能做些什么。我有一个想法,但我需要对我的代码进行大量更改才能使其正常工作。我将使用 Document.Characters.First.Start 和 Document.Characters.Last.End 范围,看看我是否可以用它们做点什么。
  • 这个角色的想法奏效了,它现在比你插入到当前页面之后
【解决方案2】:

您需要将rngDoc 设置为插入到ActiveDocument.Range 的末尾。这是一些很容易移植到 C# 的 VBA。

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

【讨论】:

    【解决方案3】:

    我使用了 Todds 方法,但在 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
    

    【讨论】:

      【解决方案4】:

      我不是这方面的专家,所以这只是一个猜测,虽然你选择了一个从 0 到 0 的范围然后折叠它,但这看起来有点奇怪。从 0 到 0 的范围听起来像是文档的开头,我猜您需要选择文档的最后一位,但不知道该怎么做。

      【讨论】:

      • 是的,这就是我的猜测,但是由于文档页面有一个占用整个区域的表格,因此会导致下一页出现错误。我不确定要得到什么“结局”。
      猜你喜欢
      • 1970-01-01
      • 2015-04-01
      • 2019-03-26
      • 1970-01-01
      • 2018-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多