向word文档中输出表格及图形

  • 来源: 互联网 作者: rocket   2008-03-20/14:07
  • 工作中遇到一个软件开发项目,该项目要求将相关数据报表存为word格式文档(涉及表格、图形的输出),便于用户修改。

    本人在开发过程中,发现此类资料较少,且介绍相对简单,大多只是文本数据的的简单输出。现将个人摸索出的一些方法及心得体会告诉大家,以求共同探讨,共同提高!

     

    form上放置以下控件:一个Tadoquery组件,名称为ADOQuery1;

                      一个TWordFont组件,名称为WordFont1;

                      一个TWordApplication组件,名称为WordApplication1;

                      一个TWordDocument1组件,名称为Doc;

                      一个TWordParagraphFormat组件,名称为ParaFmt;

                      一个TIMAGE组件,名称为IMAGE1; 

                      一个TBUTTON组件,名称为Button1;

      

                     

     

    procedure TFrm_TravilRDXL.EnterText;//自定义函数

    var

      S: Selection;

      MyFormat : Word;

     // Bitmap : TBitMap;

      AData :cardinal;

      APalette : hpalette;

     

    begin

      S := WordApplication1.Selection;

      WordFont1.ConnectTo(S.Font);

     

      S.TypeText(´甘肃省兰州市旅游管理局热点线路统计表´);

      //加回车键,形成第一个段落:Doc.Paragraphs.Item(1)

     

      S.TypeParagraph;

     

      //输入文字

      S.TypeText(txt_DateFrom.Text+´至´+txt_DateTo.text);

      //加回车键,形成第二个段落:Doc.Paragraphs.Item(2)

      S.TypeParagraph;

     

      S.TypeText(´使用部门:´+´销售部´+#13);

      S.TypeText(´时间范围:´+´2002-8-8至2002-8-28´+#13 );

      S.TypeText(´线路类型:´+´团体线´+#13);

      s.TypeText(´线路等级:´+´豪华线´+#13);

      //加回车键,形成第三个段落:Doc.Paragraphs.Item(3)

      S.TypeParagraph;

     

     

      //--------------------------设置段落1属性-------------------//

        ParaFmt.ConnectTo(Doc.Paragraphs.Item(1).Format);

        //绑定WordFont1与Doc.Paragraphs.Item(1).Range.Font

     

        WordFont1.ConnectTo(Doc.Paragraphs.Item(1).Range.Font);

        //设置段落对齐方式

        ParaFmt.Alignment := wdAlignParagraphCenter;

        //设置段落行距(磅)

        ParaFmt.SpaceAfter := 24;

     

        //画单水平线

        ParaFmt.Borders.Item(3).LineStyle := wdLineStyleSingle;

        WordFont1.Size := 18;

        WordFont1.Name := ´Arial´;

        WordFont1.Bold := integer(True);

        WordFont1.ColorIndex:=5;   //粉红色字体

     

      //--------------------------设置段落2属性-------------------//

        ParaFmt.ConnectTo(Doc.Paragraphs.Item(2).Format);

        //绑定WordFont1与Doc.Paragraphs.Item(1).Range.Font

     

        WordFont1.ConnectTo(Doc.Paragraphs.Item(2).Range.Font);

        //设置段落对齐方式

        ParaFmt.Alignment := wdAlignParagraphCenter;

        //设置段落行距(磅)

        ParaFmt.SpaceAfter := 12;

        WordFont1.Size := 18;

        WordFont1.Name := ´Arial´;

     

    end;

     

     

    procedure TFrm_TravilRDXL.Button1Click(Sender: TObject);

    var

      i,j:integer;

    begin

        i:=2;//初始化

        j:=1;

     

      WordApplication1.Connect;

     

       Doc.ConnectTo(WordApplication1.Documents.Add(EmptyParam, EmptyParam));

       WordApplication1.Visible := True;//显示word文档

     

       EnterText;//自定义函数---添加文本

     

     

        WordApplication1.Selection.SetRange(100,100);//设定段落范围

     

     

        doc.Tables.Add(WordApplication1.Selection.Range,ADOQuery1.RecordCount+1,5);//创建表格

     

        doc.Tables.Item(1).Columns.Item(1).Width:=120;//设定第一列宽度

     

    //--------------------------设定第一列字体属性-----------------------//

     

        while j<6 do begin

        doc.Tables.item(1).cell(1,j).Range.Bold:=integer(true);

        WordFont1.ConnectTo(doc.Tables.item(1).cell(1,j).Range.Font);

        WordFont1.ColorIndex:=10;

        j:=j+1;

        end;

    //--------------------------向表格中添加数据----------------------------------------//

        doc.Tables.Item(1).Cell(1,1).Range.Text:=´线路名称´;

        doc.Tables.Item(1).cell(1,2).Range.text:=´人数´;

        doc.Tables.item(1).cell(1,3).Range.text:=´销售额(元)´;

        doc.Tables.item(1).cell(1,4).Range.text:=´毛利润´;

        doc.Tables.Item(1).cell(1,5).Range.text:=´毛利润率´;

        while not ADOQuery1.Eof do begin

     

          doc.Tables.Item(1).Cell(i,1).Range.Text:=ADOQuery1.fieldbyname(´linename´).asstring;

          doc.Tables.Item(1).cell(i,2).Range.text:=ADOQuery1.Fieldbyname(´STUFFNUM´).asstring;

          doc.Tables.Item(1).cell(i,3).Range.text:=ADOQuery1.Fieldbyname(´TOTALACCOUNT´).asstring;

          doc.Tables.Item(1).cell(i,4).Range.text:=ADOQuery1.Fieldbyname(´TOTAL´).asstring;

          doc.Tables.Item(1).cell(i,5).Range.text:=ADOQuery1.Fieldbyname(´ration´).asstring;

          ADOQuery1.Next;

          i:=i+1;

     

        end;

     

    //----------------------------------------------------------------------//

     

        WordApplication1.Selection.SetRange(350,350);//设定段落范围

        ParaFmt.ConnectTo(WordApplication1.Selection.Paragraphs.item(1).Format);

        ParaFmt.Borders.Item(3).ColorIndex:=6;

        ParaFmt.Borders.Item(3).LineStyle:=wdLineStyleSingle;//画底线

     

    //-----------设置段落字体----------------------------------------//

        WordFont1.ConnectTo(WordApplication1.Selection.Paragraphs.Item(1).Range.Font);

        WordFont1.Bold:=integer(true);

        WordFont1.Size:=16;

     

     //-----------------------------粘贴图形-------------------------//

        Image1.Picture.SaveToClipboardFormat(MyFormat,AData,APalette);

        Clipboard.SetAsHandle(MyFormat,AData);

        doc.Sentences.Last.Paste;

     

     

    //--------------------------插入记录-------------------------------------//

       doc.Range.InsertAfter(#13+´操作员:´+ G_username);//G_username为全局变量

     

     

    end;   


    评论 {{userinfo.comments}}

    {{money}}

    {{question.question}}

    A {{question.A}}
    B {{question.B}}
    C {{question.C}}
    D {{question.D}}
    提交

    驱动号 更多