精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>● Delphi>>OLE&Activex>>使用Word做模版打印(原创)

主题:使用Word做模版打印(原创)
发信人: simonwall(肥猫朱古力)
整理人: teleme(2003-04-30 12:05:16), 站内信件
微软的Word提供了完善的OLE接口,程序员可以通过这些
OLE接口很容易地控制Word(Excel也一样)。下面就是一个
通过接口利用Word做模版打印的例子

procedure TfmSaleBooking.DoPrintExecute(Sender: TObject);
var
  aSelection,
  aDocument : Variant;
  Replace,
  FileName : OleVariant;
  //替换子函数,用来替换掉模版中的项目
  procedure FReplace(FindText : String; ReplaceWith : String);
  begin
    aSelection.Find.ClearFormatting;
    aSelection.Find.Replacement.ClearFormatting;
    aSelection.Find.Text := FindText;
    aSelection.Find.Replacement.Text := ReplaceWith;
    aSelection.Find.Forward := True;
    aSelection.Find.Wrap := wdFindContinue;
    aSelection.Find.Format := False;
    aSelection.Find.MatchCase := False;
    aSelection.Find.MatchWholeWord := False;
    aSelection.Find.MatchByte := True;
    aSelection.Find.MatchWildcards := False;
    aSelection.Find.MatchSoundsLike := False;
    aSelection.Find.MatchAllWordForms := False;
    replace := wdReplaceAll;
    aSelection.Find.Execute(EmptyParam, EmptyParam, EmptyParam,
    EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam,
    EmptyParam, replace, EmptyParam, EmptyParam, EmptyParam, EmptyParam);
  end;
begin
  if qryData.Active and not qryData.IsEmpty then
  with WordApp do
  begin
    Connect;
    Visible := False;
    FileName := Global.ExePath + '购房订单.doc';
    aDocument := Documents.OpenOld(FileName, EmptyParam, EmptyParam, EmptyParam,
      EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam);
    aSelection := Selection;
    FReplace('<甲方>', qryData.FieldByName('company').AsString);
    FReplace('<乙方>', CustName);
    FReplace('<单元>', qryData.FieldByName('lk_village').AsString
      + qryData.FieldByName('lk_building').AsString
      + qryData.FieldByName('room_number').AsString);
    FReplace('<建筑面积>',  qryData.FieldByName('area').AsString);
    FReplace('<单价>',  qryData.FieldByName('unit_price').AsString);
    FReplace('<总价>',  qryData.FieldByName('cal_TotalPrice').AsString);
    FReplace('<付款方式>', qryData.FieldByName('lk_pay_mode').AsString);
    FReplace('<甲方电话>', qryData.FieldByName('phone').AsString);
    FReplace('<甲方地址>', qryData.FieldByName('addr').AsString);
    FReplace('<甲方邮编>', qryData.FieldByName('post_code').AsString);
    FReplace('<乙方联系电话>', ContactPhone);
    FReplace('<乙方地址>', Address);
    FReplace('<乙方邮编>', PostCode);
    FReplace('<乙方身份证号>', IdCode);
    FileName := Global.ExePath + Global.NewGUID + '.doc';
    aDocument.SaveAs(FileName, EmptyParam, EmptyParam, EmptyParam, EmptyParam,
      EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam);
    Visible := True;
    Disconnect;
  end;
end;

[关闭][返回]