在Word应用内部,当我输入---
并按ENTER时,Word会插入一条水平线_____
(仅在线下方的边框)。
我需要插入相同的水平线,但使用delphi ole自动化。 谁知道怎么样? 我试过了:
Word := CreateOleObject('Word.Application');
Word.Visible := False;
Doc:=Word.Documents.Add;
Selection:=Word.Selection;
Range:= Word.Selection.Range;
Table:= Word.ActiveDocument.Tables;
View:= Word.ActiveWindow.View;
(...)
Word.ActiveWindow.ActivePane.View.SeekView := 10;
Selection.TypeText(Text :='---'#13#10); <--- No sucess!
欢迎任何帮助。
答案 0 :(得分:3)
我认为我已经找到了您描述的行为差异的原因,以及通过手动输入获得类似效果的几种方法。
当您手动输入内容时,Word的自动更正/自动套用功能设置为&#34;正在收听&#34;对你输入的内容,当它识别出已被编程的东西时,如连续三个连字符,它会介入并采取适当的自动更正/自动套用格式操作。
但是,在自动化调用中,如果插入文本(通过TypeText),如果手动键入,则自动格式化,自动格式化不会自动发生 - 我想这可能是因为TypeText()绕过Word& #39;处理键盘输入的代码。调用TypeText()的Word宏也是这样的。但是 可以 在您的自动化代码中调用它,如下所示:
MSWord.Selection.TypeText('Some text');
MSWord.Selection.TypeText(#13#10);
MSWord.Selection.TypeText('---');
MSWord.Selection.Range.AutoFormat;
我还没有对其他自动套用格式的条目进行彻底的测试,我希望它可以与它们一起使用,所以我想它可能具有&#34;优势&#34;与其他方法相比,你不需要知道格式化实际上是如何完成的:-)。
或者,您可以手动应用效果,如另一个答案中所示,或者我在初次尝试回答您的q时发布的代码,即
Word.Selection.TypeText('Some text');
Word.Selection.TypeText(#13#10);
Word.Selection.InlineShapes.AddHorizontalLineStandard;
Word.Selection.TypeText('More text');
希望在这三种可能性之间,你能够获得你所追求的效果。
答案 1 :(得分:2)
以下添加了一个边框(wdBorderBottom)。
const
wdBorderBottom = -3;
wdLineStyleSingle = 1;
wdLineWidth075pt = 6;
wdColorBlack = 0;
var
Border: OleVariant;
begin
// ...
Border := Word.Selection.Borders[wdBorderBottom];
Border.LineStyle := wdLineStyleSingle;
Border.LineWidth := wdLineWidth075pt;
Border.Color := wdColorBlack;
// ...
end;