在数据库中已有合同的基本资料字段:合同编号、客户名称、合同类别、租用物业地址、物业面积、租用单价、金额、合同起始日期、终止日期、按金等等。要求能由操作员自定义合同正文模板,由系统将以上字段自动写入到Word模板中,生成合同正文。
   请提供源码,多谢!

解决方案 »

  1.   

    这是操作Word 的例了,你改下就好了
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls, Buttons, Db, DBTables, Grids, DBGrids, ComCtrls,comobj,OleServer, Word97,
      Word2000;type
      TForm1 = class(TForm)
        Database1: TDatabase;
        ComboBox1: TComboBox;
        ComboBox2: TComboBox;
        DateTimePicker1: TDateTimePicker;
        DBGrid1: TDBGrid;
        DataSource1: TDataSource;
        Query1: TQuery;
        BitBtn1: TBitBtn;
        WordApp: TWordApplication;
        WordDocument1: TWordDocument;
        Button1: TButton;
        Button2: TButton;
        procedure BitBtn1Click(Sender: TObject);
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.DFM}procedure TForm1.BitBtn1Click(Sender: TObject);
    var
      WordApp,WordDoc,WordTable:OleVariant;
      i,j:integer;
    begin
      WordApp:=CreateOleObject('Word.Application');
      WordApp.Visible:=True;
      form1.WordApp.Connect;
      WordDoc:=WordApp.Documents.open('d:\1.doc',false,false,false,'','',true,'','','wdOpenFormatDocument');
      WordTable:=WordDoc.Tables.Add(WordApp.Selection.Range,1,1);
      //WordTable:=WordDoc.Tables.Add(WordApp.Selection.Range,DBGrid1.DataSource.DataSet.RecordCount+1,DBGrid1.Columns.Count);
     { for i:=1 to 2 do
     //for i:=1 to DBGrid1.Columns.Count do
      WordTable.Cell(1,i).Range.InsertAfter(DBGrid1.Columns[i-1].Title.caption);
      i:=2;
      with DBGrid1.DataSource.DataSet do
      while not eof do
      begin
        for j:=1 to DBGrid1.Columns.Count do
          WordTable.Cell(i,j+1).Range.InsertAfter(DBGrid1.Columns[j-1].Field.Value);
        Next;
        Inc(i);
      end;  }
      wordapp.doucuments.items.text:='aaabbb'{你想要加入的字符串}   //WordTable.Cell(1,1).Range.InsertAfter('sfsfsfsfs');
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
      WordApp,WordDoc,WordTable:OleVariant;
      i,j:integer;
    begin
      WordApp:=CreateOleObject('Word.Application');
      WordApp.Visible:=True;
      form1.WordApp.Connect;
      WordDoc:=WordApp.Documents.open('d:\1.doc',false,false,false,'','',true,'','','wdOpenFormatDocument');
    //  wordapp.doucuments.items.text:='aaabbb'{你想要加入的字符串}
    //worddoc.documents.item(1).Range.InsertAfter('test');//
    end;procedure TForm1.Button2Click(Sender: TObject);
    var
    MSWord:Variant;
    str:string;
    begin
      str:=trim('sdsds');
      MSWord:= CreateOLEObject('Word.Application');
      MSWord.Documents.Open('d:\1.doc',false,false,false,'','',true,'','','wdOpenFormatDocument');//'+trim(dlxtform.Edit3.Text)+'\sfa\'+trim(DataModule1.ADOQuery14.fieldbyname('hybh').AsString)+'.doc', True);//´ò¿ªÍⲿWordÎĵµ
      MSWord.Visible:=1;
      str:='sfsdfsfsdfsdfsdfs';
      MSWord.ActiveDocument.Range(0, 0);
      MSWord.ActiveDocument.Range.InsertAfter(str);
        MSWord.ActiveDocument.Range.InsertAfter(str);
      MSWord.ActiveDocument.Range.InsertParagraphAfter;end;procedure TForm1.FormCreate(Sender: TObject);
    beginend;end.
      

  2.   


    var WordApp: TWordApplication;    WordDoc: TWordDocument;
    var DocInx,FileName,CfCversions,oReadOnly,AddToRctFiles,PswDocument,
        PswTemplate,oRevert,WPswDocument,WPswTemplate,oFormat: OleVariant;
    begin
        DocInx:=1;
        oFileName := InFile;
        oReadOnly:=true;  WordApp:= TWordApplication.Create(nil);
      WordApp.Visible := false;
      WordDoc:= TWordDocument.Create(nil);
      WordApp.Documents.open(FileName,CfCversions,oReadOnly,AddToRctFiles,PswDocument,
                               PswTemplate,oRevert,WPswDocument,WPswTemplate,oFormat);
      WordDoc.ConnectTo(WordApp.Documents.Item(DocInx));  For i := 1 To WordDoc.Tables.Count do   //第 i 个表
      begin
        For iRow := 1 To WordDoc.Tables.Item(i).Rows.Count do
        for iCol:=1 to WordDoc.Tables.Item(i).Columns.Count do
          s:=WordDoc.Tables.Item(i).Cell(iRow,iCol);//取[iRow,iCol]列值
      end;    if Assigned(WordDoc) then
        begin
          WordDoc.Close;
          WordDoc.Disconnect;
          WordDoc.Destroy;
          WordDoc := nil;
        end;    if Assigned(WordApp) then
        begin
          WordApp.Quit;
          WordApp.Disconnect;
          WordApp.Destroy;
          WordApp := nil;
        end;
      
    end;
      

  3.   

    写入字符的方法我知道,你的方法是将字符串写到Word文档最后,但我要求的是能够将指定的数据插入到文档中间,例如:
       已写好的模板:
       甲方代表:张三                 合同编号:“此处插入数据库中的合同编号”
       乙方代表:“此处插入数据库中的客户名称”
       
    要求数据能够插入到文档中的指定位置。