通过 Delphi 在 word 中创建 Y 的页码 X
Create Page number X of Y in word via Delphi
我想在通过 Delphi 生成的 word 文件中添加第 X 页,第 Y 页编号:
- 不大胆;
- 字体大小为 8;
- 右对齐。
注意:
Y是总页数;
X是页码的索引。
到目前为止我发现了这个:
procedure Print;
var v:olevariant;
v:=CreateOleObject('Word.Application');
v.Documents.Add;
HeaderandFooter;
firstpage:=true;
procedure HeaderandFooter;
var adoc,:olevariant;
begin
adoc.Sections.Item(1).Headers.Item(wdHeaderFooterPrimary).Range.Font.Size := 8;
adoc.Sections.Item(1).Footers.Item(wdHeaderFooterPrimary).PageNumbers.Add(wdAlignPageNumberRight);
我可以更改编号格式:
adoc.Sections.Item(1).Footers.Item(wdHeaderFooterPrimary).PageNumbers.NumberStyle := wdPageNumberStyleLowercaseRoman;
但是没有Y格式的X页选项。我该如何实施?
虽然没有具有这种格式的可选页眉 page-numbering 样式,但您可以通过将特定的 MS Word 文档字段(PAGE 和 NUMPAGES 字段)添加到页眉(或页脚)来实现,或其他地方。
procedure TForm1.MakeDocWithPageNumbers;
var
MSWord,
Document : OleVariant;
AFileName,
DocText : String;
begin
MSWord := CreateOleObject('Word.Application');
MSWord.Visible := True;
Document := MSWord.Documents.Add;
DocText := 'Hello Word!';
MSWord.Selection.TypeText(DocText);
if MSWord.ActiveWindow.View.SplitSpecial <> wdPaneNone then
MSWord.ActiveWindow.Panes(2).Close;
if (MSWord.ActiveWindow.ActivePane.View.Type = wdNormalView) or (MSWord.ActiveWindow.ActivePane.View.Type = wdOutlineView) then
MSWord.ActiveWindow.ActivePane.View.Type := wdPrintView;
MSWord.ActiveWindow.ActivePane.View.SeekView := wdSeekCurrentPageHeader;
MSWord.Selection.TypeText( Text:='Page ');
MSWord.Selection.Fields.Add( Range:= MSWord.Selection.Range, Type:=wdFieldEmpty,
Text:= 'PAGE \* Arabic ', PreserveFormatting:=True);
MSWord.Selection.TypeText( Text:=' of ');
MSWord.Selection.Fields.Add( Range:=MSWord.Selection.Range, Type:=wdFieldEmpty,
Text:= 'NUMPAGES \* Arabic ', PreserveFormatting:=True);
MSWord.Selection.GoTo(What:=wdGoToPage, Which:=wdGoToNext, Count:=1);
AFileName := 'd:\aaad7\officeauto\worddocwithheader.docx';
Document.SaveAs(AFileName);
ShowMessage('Paused');
Document.Close;
end;
我将设置字体大小和 right-alignment 作为 reader 的练习,因为 SO 不应该是 code-writing 服务 ;=)
我想在通过 Delphi 生成的 word 文件中添加第 X 页,第 Y 页编号: - 不大胆; - 字体大小为 8; - 右对齐。
注意: Y是总页数; X是页码的索引。
到目前为止我发现了这个:
procedure Print;
var v:olevariant;
v:=CreateOleObject('Word.Application');
v.Documents.Add;
HeaderandFooter;
firstpage:=true;
procedure HeaderandFooter;
var adoc,:olevariant;
begin
adoc.Sections.Item(1).Headers.Item(wdHeaderFooterPrimary).Range.Font.Size := 8;
adoc.Sections.Item(1).Footers.Item(wdHeaderFooterPrimary).PageNumbers.Add(wdAlignPageNumberRight);
我可以更改编号格式:
adoc.Sections.Item(1).Footers.Item(wdHeaderFooterPrimary).PageNumbers.NumberStyle := wdPageNumberStyleLowercaseRoman;
但是没有Y格式的X页选项。我该如何实施?
虽然没有具有这种格式的可选页眉 page-numbering 样式,但您可以通过将特定的 MS Word 文档字段(PAGE 和 NUMPAGES 字段)添加到页眉(或页脚)来实现,或其他地方。
procedure TForm1.MakeDocWithPageNumbers;
var
MSWord,
Document : OleVariant;
AFileName,
DocText : String;
begin
MSWord := CreateOleObject('Word.Application');
MSWord.Visible := True;
Document := MSWord.Documents.Add;
DocText := 'Hello Word!';
MSWord.Selection.TypeText(DocText);
if MSWord.ActiveWindow.View.SplitSpecial <> wdPaneNone then
MSWord.ActiveWindow.Panes(2).Close;
if (MSWord.ActiveWindow.ActivePane.View.Type = wdNormalView) or (MSWord.ActiveWindow.ActivePane.View.Type = wdOutlineView) then
MSWord.ActiveWindow.ActivePane.View.Type := wdPrintView;
MSWord.ActiveWindow.ActivePane.View.SeekView := wdSeekCurrentPageHeader;
MSWord.Selection.TypeText( Text:='Page ');
MSWord.Selection.Fields.Add( Range:= MSWord.Selection.Range, Type:=wdFieldEmpty,
Text:= 'PAGE \* Arabic ', PreserveFormatting:=True);
MSWord.Selection.TypeText( Text:=' of ');
MSWord.Selection.Fields.Add( Range:=MSWord.Selection.Range, Type:=wdFieldEmpty,
Text:= 'NUMPAGES \* Arabic ', PreserveFormatting:=True);
MSWord.Selection.GoTo(What:=wdGoToPage, Which:=wdGoToNext, Count:=1);
AFileName := 'd:\aaad7\officeauto\worddocwithheader.docx';
Document.SaveAs(AFileName);
ShowMessage('Paused');
Document.Close;
end;
我将设置字体大小和 right-alignment 作为 reader 的练习,因为 SO 不应该是 code-writing 服务 ;=)