MS Word InsertBreak引发异常

时间:2018-09-14 14:15:44

标签: c++ vba ms-word ms-office

当尝试使用参数(例如wdPageBreak或wdLineBreak)通过Range插入InsertBreak时,出现错误“类型不匹配”。没关系,对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

1 个答案:

答案 0 :(得分:1)

如果没有办法使Word对象模型的此部分的C ++版本正常运行,则可以通过使用ANSI字符代码插入某些类型的中断来解决该问题。 (它们也可用于搜索/识别文档文本中的分隔符。)

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.