关于Word的精彩文章,不容错过!!up有分。(100分)

P

pyk1

Unregistered / Unconfirmed
GUEST, unregistred user!
摘自:http://www.delphicn.com,版权归作者所有(可惜我不知道这位大侠是谁)
在Dephi 5中提供了一组Servers组件,实现了与Office的无缝结合,但有关这一方面的资料却很少,最近笔者接触了一个用户案例,要求最终将数据库中的结果总结成一份Word文档,Word文档中对于标题、正文的字体、字号,文档的纸张大小都有一定的要求,而且还要求以表格的形式体现一部分数据库中的数据。
  笔者通过查找VBA的说明,再对照Dephi的VCL,终于实现了全部功能,现将有关的内容总结如下:
  1、在当前程序目录下建立以标题字段命名的Word文件
  exepath:=application.ExeName;
  for index:=1 to length(exepath) do
  if exepath[index]='/' then
  i:=index;
  exepath:=copy(exepath,1,i);
  doc_file:=exepath+mc+'.doc';
  以标题字段“mc”命名Word文件
  try
  Wordapplication1.connect;
  except
  messagedlg('没有安装Word',mterror,[mbok],0);
  abort;
  end;
  Wordapplication1.Caption := 'XX计划书';
  Wordapplication1.visible := true;
  Worddocument1.activate;
  2、设置纸张大小
  Wordapplication1.ActiveDocument.PageSetup.PageWidth:=XXX;
  Wordapplication1.ActiveDocument.PageSetup.PageHeight:=XXX;
  Wordapplication1.ActiveDocument.PageSetup.LeftMargin := XX;
  //设置左边距
  Wordapplication1.ActiveDocument.PageSetup.rightMargin := XX; 
  //设置右边距
  3、插入页码
  var fpage,pagea:eek:levariant;
  fpage:=true;
  pagea:=wdAlignPageNumberCenter;
  Wordapplication1.activedocument.sections.item(1).Footers.item(1).PageNumbers.Add(pagea,fpage);
  4、设置页面横向打印
  s:=Wordapplication1.selection.start;
  e:=Wordapplication1.selection.start;
  aa:=wdSectionBreakNextPage;
  Wordapplication1.ActiveDocument.Range(s,e).InsertBreak(aa);
  Wordapplication1.Selection.Start:=Wordapplication1.Selection.Start + 1;
  s:=Wordapplication1.Selection.start;
  e:=Wordapplication1.ActiveDocument.Content.End_;
  Wordapplication1.ActiveDocument.Range(S,e).PageSetup.Orientation:=wdOrientLandscape;
  5、设置字体、字号
  Wordapplication1.Selection.Font.Size:=18;
  Wordapplication1.Selection.Font.Name := '黑体';
  Wordapplication1.Selection.TypeParagraph;
  Wordapplication1.Selection.ParagraphFormat.Alignment:= wdAlignParagraphCenter;
  Wordapplication1.Selection.TypeParagraph;
  Wordapplication1.Selection.TypeText(dbedit4.text);
  //标题 
  Wordapplication1.Selection.Font.Size := 14;
  Wordapplication1.Selection.Font.Name := '宋体';
  Wordapplication1.Selection.TypeParagraph;
  Wordapplication1.Selection.TypeParagraph;
  Wordapplication1.Selection.ParagraphFormat.Alignment := wdAlignParagraphJustify;
  Wordapplication1.Selection.TypeText(' '+trim(dbmemo1.text));
  //正文
   ... ...

  6、插入表格
  Wordapplication1.Selection.Font.Size :=10;
  adoquery2.Active:=false;
  adoquery2.active:=true;
  doc:=Wordapplication1.activedocument;
  counts:=adoquery2.RecordCount;
  //记录数决定表格的行数
  t:=doc.tables.Add(Wordapplication1.selection.range,counts+1,5);//5列
  t.cell(1,1).range.text:= '单位';
  t.Cell(1,1).Width:=120;
  t.cell(1,1).range.Paragraphs.Alignment:= wdAlignParagraphCenter;
  t.cell(1,2).range.text:= '姓名';
   ... ...
  //依次写入其他字段的表头
  for i:=2 to counts+1 do
  begin
  t.cell(i,1).range.text:=adoquery2.field
  byname('dw').asstring;
  t.Cell(i,1).Width:=120;
  t.cell(i,1).range.Paragraphs.Alignment:=
   wdAlignParagraphCenter;
  t.cell(i,2).range.text:=adoquery2.field
  byname('xm').asstring;
  ... ...
  Adoquery2.next;
  End;
  使用Dephi将Word与数据库结合,实现了用户文档的自动生成,大大地方便了用户。

我的问题是:在插入表格后,如何在表格之后继续写入正文。望知道的大侠不吝告诉。
谢谢!! Delphi_x@163.com
 
在VBA中录制一个宏,把VBA语句转换成Delphi就可以了。
 
好人呀,分享技术又给分
 
好事,当然顶
 
n年前就采用了!通过vba,怎么都可以!
 
这么好事,我顶!
 
在執行t:=doc.tables.Add(Wordapplication1.selection.range,counts+1,5);//5列
時,不要全部選定下面所有的行,應留一二個空行在後面,在插入表格后,就可以在那一二空行裡正常再插入正文了
 
我这里也有一个,原创的
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1942397
 
请问Moqing大侠:
在執行t:=doc.tables.Add(Wordapplication1.selection.range,counts+1,5);//5列
時,不要全部選定下面所有的行,應留一二個空行在後面,在插入表格后,就可以在那一二空行裡正常再插入正文了,这句话我不明白,能举个例子吗?
谢谢!!
 
再添加一个 Paragraphs 不就可以了
 
to pyk1
我帮你看一下
你顺便帮我看一下这个问题
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1989883
 
收藏! 收藏!
 
你真是个好人啊,又教技术又给分。
 
好人一个.精神可敬.收藏.
 
顶部