OLE方式控制WORD生成一个文档,包括自动生成表格

 

 

 

unit Unit1;

interface

uses  
      Windows,   Messages,   SysUtils,   Classes,   Graphics,   Controls,   Forms,   Dialogs,  
      StdCtrls;  
  type  
      TForm1   =   class(TForm)  
          Button1:   TButton;  
          procedure   Button1Click(Sender:   TObject);  
          procedure   InsertLines(LineNum   :   Integer);  
          procedure   CreateMailMergeDataFile;  
          procedure   FillRow(Doc   :   Variant;   Row   :   Integer;  
                                    Text1,Text2,Text3,Text4   :   String);  
      private  
          {   Private   declarations   }  
      public  
          wrdApp,   wrdDoc:   Variant;  
          {   Public   declarations   }  
      end;  
   
  var  
      Form1:   TForm1;  
   
  implementation  
   
  uses   ComObj;  
   
  Const   wdAlignParagraphLeft   =   0;  
  Const   wdAlignParagraphCenter   =   1;  
  Const   wdAlignParagraphRight   =   2;  
  Const   wdAlignParagraphJustify   =   3;  
  Const   wdAdjustNone   =   0;  
  Const   wdGray25   =   16;  
  Const   wdGoToLine   =   3;  
  Const   wdGoToLast   =   -1;  
  Const   wdSendToNewDocument   =   0;  
   
  {$R   *.DFM}  
   
  procedure   TForm1.InsertLines(LineNum   :   Integer);  
  var  
      iCount   :   Integer;  
  begin  
      for   iCount   :=   1   to   LineNum   do  
            wrdApp.Selection.TypeParagraph;  
  end;  
   
  procedure   TForm1.FillRow(Doc   :   Variant;   Row   :   Integer;  
                                    Text1,Text2,Text3,Text4   :   String);
  begin  
      Doc.Tables.Item(1).Cell(Row,1).Range.InsertAfter(Text1);  
      Doc.Tables.Item(1).Cell(Row,2).Range.InsertAfter(Text2);  
      Doc.Tables.Item(1).Cell(Row,3).Range.InsertAfter(Text3);  
      Doc.Tables.Item(1).Cell(Row,4).Range.InsertAfter(Text4);  
  end;  
   
  procedure   TForm1.CreateMailMergeDataFile;
  var  
      wrdDataDoc   :   Variant;  
      iCount   :   Integer;  
  begin  
      //   Create   a   data   source   at   C:/DataDoc.doc   containing   the   field   data  
      wrdDoc.MailMerge.CreateDataSource('C:/DataDoc.doc',,,'FirstName,   LastName,'   +  
                '   Address,   CityStateZip');  
      //   Open   the   file   to   insert   data  
      wrdDataDoc   :=   wrdApp.Documents.Open('C:/DataDoc.doc');  
      for   iCount   :=   1   to   2   do  
          wrdDataDoc.Tables.Item(1).Rows.Add;  
      //   Fill   in   the   data  
      FillRow(wrdDataDoc,   2,   'Steve',   'DeBroux',  
                  '4567   Main   Street',   'Buffalo,   NY     98052');  
      FillRow(wrdDataDoc,   3,   'Jan',   'Miksovsky',  
                  '1234   5th   Street',   'Charlotte,   NC     98765');  
      FillRow(wrdDataDoc,   4,   'Brian',   'Valentine',  
                  '12348   78th   Street     Apt.   214',   'Lubbock,   TX     25874');  
      //   Save   and   close   the   file  
      wrdDataDoc.Save;  
      wrdDataDoc.Close(False);  
  end;  

  procedure   TForm1.Button1Click(Sender:   TObject);
  var  
      StrToAdd   :   String;  
      wrdSelection,   wrdMailMerge,   wrdMergeFields   :   Variant;  
  begin  
      //   Create   an   instance   of   Word   and   make   it   visible
      wrdApp   :=   CreateOleObject('Word.Application');  
      wrdApp.Visible   :=   True;  
      //   Create   a   new   document  
      wrdDoc   :=   wrdApp.Documents.Add();  
      wrdDoc.Select;  
   
      wrdSelection   :=   wrdApp.Selection;  
      wrdMailMerge   :=   wrdDoc.MailMerge;  
   
      //   Create   MailMerge   data   file  
      CreateMailMergeDataFile;
   
      //   Create   a   string   and   insert   it   into   the   document  
      StrToAdd   :=   'State   University'   +   Chr(13)   +  
                              'Electrical   Engineering   Department';  
      wrdSelection.ParagraphFormat.Alignment   :=   wdAlignParagraphCenter;  
      wrdSelection.TypeText(StrToAdd);  
   
      InsertLines(4);  
   
      //   Insert   Merge   Data  
      wrdSelection.ParagraphFormat.Alignment   :=   wdAlignParagraphLeft;  
      wrdMergeFields   :=   wrdMailMerge.Fields;  
      wrdMergeFields.Add(wrdSelection.Range,'FirstName');  
      wrdSelection.TypeText('   ');  
      wrdMergeFields.Add(wrdSelection.Range,'LastName');  
      wrdSelection.TypeParagraph;  
      wrdMergeFields.Add(wrdSelection.Range,'Address');  
      wrdSelection.TypeParagraph;  
      wrdMergeFields.Add(wrdSelection.Range,'CityStateZip');  
   
      InsertLines(2);  
   
      //   Right   justify   the   line   and   insert   a   date   field   with  
      //   the   current   date  
      wrdSelection.ParagraphFormat.Alignment   :=   wdAlignParagraphRight;  
      wrdSelection.InsertDateTime('dddd,   MMMM   dd,   yyyy',False);  
   
      InsertLines(2);  
   
      //   Justify   the   rest   of   the   document  
      wrdSelection.ParagraphFormat.Alignment   :=   wdAlignParagraphJustify;  
   
      wrdSelection.TypeText('Dear   ');  
      wrdMergeFields.Add(wrdSelection.Range,'FirstName');  
      wrdSelection.TypeText(',');  
      InsertLines(2);  
   
      //   Create   a   string   and   insert   it   into   the   document  
      StrToAdd   :=   'Thank   you   for   your   recent   request   for   next   '   +  
              'semesters   class   schedule   for   the   Electrical   '   +
              'Engineering   Department.     Enclosed   with   this   '   +  
              'letter   is   a   booklet   containing   all   the   classes   '   +
              'offered   next   semester   at   State   University.     '   +  
              'Several   new   classes   will   be   offered   in   the   '   +  
              'Electrical   Engineering   Department   next   semester.     '   +  
              'These   classes   are   listed   below.';  
      wrdSelection.TypeText(StrToAdd);  
   
      InsertLines(2);  
   
      //   Insert   a   new   table   with   9   rows   and   4   columns  
      wrdDoc.Tables.Add(wrdSelection.Range,9,4);  
      wrdDoc.Tables.Item(1).Columns.Item(1).SetWidth(51,wdAdjustNone);  
      wrdDoc.Tables.Item(1).Columns.Item(2).SetWidth(170,wdAdjustNone);  
      wrdDoc.Tables.Item(1).Columns.Item(3).SetWidth(100,wdAdjustNone);  
      wrdDoc.Tables.Item(1).Columns.Item(4).SetWidth(111,wdAdjustNone);  
      //   Set   the   shading   on   the   first   row   to   light   gray  
      wrdDoc.Tables.Item(1).Rows.Item(1).Cells  
              .Shading.BackgroundPatternColorIndex   :=   wdGray25;  
      //   BOLD   the   first   row  
      wrdDoc.Tables.Item(1).Rows.Item(1).Range.Bold   :=   True;  
      //   Center   the   text   in   Cell   (1,1)  
      wrdDoc.Tables.Item(1).Cell(1,1).Range.Paragraphs.Alignment   :=  
                  wdAlignParagraphCenter;  
   
      //   Fill   each   row   of   the   table   with   data  
      FillRow(wrdDoc,   1,   'Class   Number',   'Class   Name',   'Class   Time',    
            'Instructor');  
      FillRow(wrdDoc,   2,   'EE220',   'Introduction   to   Electronics   II',  
            '1:00-2:00   M,W,F',   'Dr.   Jensen');  
      FillRow(wrdDoc,   3,   'EE230',   'Electromagnetic   Field   Theory   I',  
            '10:00-11:30   T,T',   'Dr.   Crump');  
      FillRow(wrdDoc,   4,   'EE300',   'Feedback   Control   Systems',  
            '9:00-10:00   M,W,F',   'Dr.   Murdy');  
      FillRow(wrdDoc,   5,   'EE325',   'Advanced   Digital   Design',  
            '9:00-10:30   T,T',   'Dr.   Alley');  
      FillRow(wrdDoc,   6,   'EE350',   'Advanced   Communication   Systems',  
            '9:00-10:30   T,T',   'Dr.   Taylor');  
      FillRow(wrdDoc,   7,   'EE400',   'Advanced   Microwave   Theory',  
            '1:00-2:30   T,T',   'Dr.   Lee');  
      FillRow(wrdDoc,   8,   'EE450',   'Plasma   Theory',  
            '1:00-2:00   M,W,F',   'Dr.   Davis');  
      FillRow(wrdDoc,   9,   'EE500',   'Principles   of   VLSI   Design',  
            '3:00-4:00   M,W,F',   'Dr.   Ellison');  
   
      //   Go   to   the   end   of   the   document  
      wrdApp.Selection.GoTo(wdGotoLine,wdGoToLast);  
      InsertLines(2);  
   
      //   Create   a   string   and   insert   it   into   the   document  
      StrToAdd   :=   'For   additional   information   regarding   the   '   +  
                            'Department   of   Electrical   Engineering,   '   +  
                            'you   can   visit   our   website   at   ';  
      wrdSelection.TypeText(StrToAdd);  
      //   Insert   a   hyperlink   to   the   web   page  
      wrdSelection.Hyperlinks.Add(wrdSelection.Range,'http://www.ee.stateu.tld');  
      //   Create   a   string   and   insert   it   into   the   document  
      StrToAdd   :=   '.     Thank   you   for   your   interest   in   the   classes   '   +  
                            'offered   in   the   Department   of   Electrical   '   +  
                            'Engineering.     If   you   have   any   other   questions,   '   +  
                            'please   feel   free   to   give   us   a   call   at   '   +  
                            '555-1212.'   +   Chr(13)   +   Chr(13)   +  
                            'Sincerely,'   +   Chr(13)   +   Chr(13)   +  
                            'Kathryn   M.   Hinsch'   +   Chr(13)   +  
                            'Department   of   Electrical   Engineering'   +   Chr(13);  
      wrdSelection.TypeText(StrToAdd);  
   
      //   Perform   mail   merge  
      wrdMailMerge.Destination   :=   wdSendToNewDocument;  
      wrdMailMerge.Execute(False);  
   
      //   Close   the   original   form   document  
      wrdDoc.Saved   :=   True;  
      wrdDoc.Close(False);  
   
      //   Notify   the   user   we   are   done.  
      ShowMessage('Mail   Merge   Complete.');  
   
      //   Clean   up   temp   file  
      DeleteFile('C:/DataDoc.doc');  
  end;

end.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值