MS Word InsertBreak 抛出异常

MS Word InsertBreak throws exception

尝试使用参数(例如,wdPageBreak 或 wdLineBreak)通过范围插入中断时,出现错误 "Type mismatch"。不过没关系,给 InsertBreak 无参。我是唯一有这种行为的人,还是另一个 Word API 错误?

//MS Word VBA Reference
Set myRange = ActiveDocument.Paragraphs(2).Range 
With myRange 
 .Collapse Direction:=wdCollapseEnd 
 .InsertBreak Type:=wdPageBreak 
End With

//c++ code
HRESULT hr = pWordDoc->GetParagraphs()->Item(1)->GetRange()->
        InsertBreak(&variant_t(Word::wdPageBreak));  //hr = 0x80020005 TypeMismatch
hr = pWordDoc->GetParagraphs()->Item(1)->GetRange()->
            InsertBreak(&vtMissing);                 // hr = S_OK

如果无法使这部分 Word 对象模型的 C++ 版本正常运行,您可以通过使用 ANSI 字符代码插入某些类型的分隔符来解决这个问题。 (它们也可用于 search/identify 文档文本中的分隔符。)

Page break:      ANSI 12 (= press Ctrl+Enter)
Line break:      ANSI 11 (= press Shift+Enter)
Paragraph break: ANSI 13 (= press Enter)

注意ANSI 12也是各种分节符的字符编码;分页符是默认设置,因此如果需要分页符,您可以插入 ANSI 代码。

要插入分节符,可以使用 Sections.Add 方法。这接受指示分节符在文档中的位置和类型的参数。方法签名:

expression.Add(Range, Start)

其中 expression 是一个代表 Sections 集合的变量。 (例如wordDoc.Sections.Add

Start 的有效值来自 WdSectionStart 枚举:

wdSectionContinuous 0 Continuous section break. 
wdSectionEvenPage   3 Even pages section break. 
wdSectionNewColumn  1 New column section break. 
wdSectionNewPage    2 New page section break. 
wdSectionOddPage    4 Odd pages section break.