delphi word技术融合

 

新一篇: delphi动态创建的TMSComm串口控件不起作用!

<script></script>

procedure TExprmResultDlg.PreviewExprmReport;
var
    Template, NewTemplate,DocumentType,OleVisible:oleVariant;
    strTitle_Prior,strText_Prior,strTitle_Last,strText_Last:String;
begin
    Try
        Wordapplication1.Connect;
    Except
        Application.MessageBox('您尚未安装 Word应用程序,请先安装Word2000,然后再运行本程序!',
                                '系统提示',mb_Ok +MB_ICONWARNING);
        Abort;
    End;

    Template := EmptyParam;  //表示不使用模板
    NewTemplate := False;  //表示新建新建文档的类型为文档

    Doc.ConnectTo(WordApplication1.Documents.Add(Template, NewTemplate,DocumentType,OleVisible));

    //关闭拼音查找和语法查找,以便提高程序运行的效率
    WordApplication1.Options.CheckSpellingAsYouType := False;
    WordApplication1.Options.CheckGrammarAsYouType := False;

    //添加页眉
    AddRepPageHeader(18,Edit_RepHeader.Text,alCenter);

    //添加页脚  页码设置
    AddRepPageFooder(1,alCenter);

    m_wordSesson:= WordApplication1.Selection;
    WordFont1.ConnectTo(m_wordSesson.Font);
    WordFont1.Name := '宋体';

    //输出报告信息
    AddParagraphTitle('模块信息');//添加段落标题

    strTitle_Prior:='厂站名称:';
    strText_Prior:=Edit_FactoryName.Text;

    AddParagraphContentSingle(strTitle_Prior,strText_Prior);

    strTitle_Prior:='测试人:';
    strText_Prior:=Edit_TestPeoson.Text;
    strTitle_Last:='测试时间:';
    strText_Last:=FormatDateTime('yyyy"年"mm"月"dd"日"',now);

    AddParagraphContentDouble(strTitle_Prior,strText_Prior,strTitle_Last,strText_Last);

    //输出报告内容
    AddParagraphTitle('试验结果');//添加段落标题
    WriteReportInformation;


    AddParagraphTitle('试验结论');//添加段落标题
    m_wordSesson.TypeParagraph;
    m_wordSesson.TypeParagraph;
    m_wordSesson.TypeParagraph;

    Wordapplication1.Disconnect;

end;

 


procedure TExprmResultDlg.AddRepPageHeader(const nFontSize:integer;const strText:String;Const PageFoodAlign:TPageFoodAlign);//添加页眉
var
    alTextAlign:OleVariant;
begin
    Case PageFoodAlign of
        alLeft:alTextAlign:=wdAlignParagraphLeft;
        alCenter:alTextAlign:=wdAlignParagraphCenter;
        alRight:alTextAlign:=wdAlignParagraphRight;
        alJustify:alTextAlign:=wdAlignParagraphJustify;
    end;


    WordApplication1.ActiveWindow.ActivePane.View.SeekView :=wdSeekCurrentPageHeader;
    WordApplication1.Selection.ParagraphFormat.Alignment := alTextAlign;

    WordApplication1.Selection.Font.Size:=18;
    WordApplication1.Selection.Font.Color:=ClBlack;
    WordApplication1.Selection.InsertAfter(strText);
   
end;

procedure TExprmResultDlg.AddRepPageFooder(const nFistPageNum:integer;Const PageFoodAlign:TPageFoodAlign);//添加页脚  页码设置
var
    mmm,nPageNum,aaa,alTextAlign:OleVariant;
begin
    Case PageFoodAlign of
        alLeft:alTextAlign:=wdAlignParagraphLeft;
        alCenter:alTextAlign:=wdAlignParagraphCenter;
        alRight:alTextAlign:=wdAlignParagraphRight;
        alJustify:alTextAlign:=wdAlignParagraphJustify;
    end;

    mmm:=wdLine;
    nPageNum:=nFistPageNum;
    aaa:=wdFieldPage;
    WordApplication1.ActiveWindow.ActivePane.View.SeekView :=wdSeekCurrentPageFooter;
    WordApplication1.Selection.Move(mmm,nPageNum);
    WordApplication1.Selection.ParagraphFormat.Alignment := alTextAlign;

    WordApplication1.Selection.InsertAfter('第');
    mmm:=wdCharacter;
    WordApplication1.Selection.Move(mmm,nPageNum);
    WordApplication1.Selection.Fields.Add(WordApplication1.Selection.Range,aaa,mmm,nPageNum);

    aaa:=wdFieldNumPages;
    WordApplication1.Selection.InsertAfter('页/共');
    WordApplication1.Selection.Move(mmm,nPageNum);
    WordApplication1.Selection.Fields.Add(WordApplication1.Selection.Range,aaa,mmm,nPageNum);

    WordApplication1.Selection.InsertAfter('页');
    WordApplication1.ActiveWindow.ActivePane.View.SeekView := wdSeekMainDocument;
end;

 

procedure TExprmResultDlg.PastePicToWord(Const imageName:TImage);
var
    AFormat:word;
    AData :cardinal;
    APalette : hpalette;
begin
    imageName.Picture.SaveToClipboardFormat(AFormat,AData,APalette);
    Clipboard.SetAsHandle(AFormat,AData);
    doc.Sentences.Last.Paste;
end;


procedure TExprmResultDlg.AddParagraphTitle(const strTitle:String);//添加段落标题
begin
    //加回车键,形成段落:
    ParaFmt.SpaceBefore := 30;
    ParaFmt.SpaceAfter := 30;
    //m_wordSesson.TypeParagraph;
    WordFont1.Size:=14;
    WordFont1.Bold:=1;
    m_wordSesson.TypeText(strTitle + #13);

    m_tableNum:=m_tableNum + 1;

end;

procedure TExprmResultDlg.AddParagraphContentSingle(Const strTitle,strText:String);
var
    i:integer;
    TableBehavior,AutoFitbehavior:oleVariant;
begin
    TableBehavior:=FALSE;
    AutoFitbehavior:=FALSE;
    Doc.Tables.Add(WordApplication1.Selection.Range, 1 , 4, TableBehavior,AutoFitbehavior);//创建表格

    m_tableRow:=m_tableRow + 1;

    for i:=1 to 4 do
    begin
        Doc.Tables.Item(m_tableNum).Cell(m_tableRow,i).Range.Font.Size := 12;
        Doc.Tables.Item(m_tableNum).Cell(m_tableRow,i).Range.Font.Bold:=0;

        //去掉表格边框
        Doc.Tables.Item(m_tableNum).Cell(m_tableRow,i).Range.Borders.item(wdBorderLeft).LineStyle := wdLineStyleNone;
        Doc.Tables.Item(m_tableNum).Cell(m_tableRow,i).Range.Borders.item(wdBorderRight).LineStyle := wdLineStyleNone;
        Doc.Tables.Item(m_tableNum).Cell(m_tableRow,i).Range.Borders.item(wdBorderTop).LineStyle := wdLineStyleNone;
        Doc.Tables.Item(m_tableNum).Cell(m_tableRow,i).Range.Borders.item(wdBorderBottom).LineStyle := wdLineStyleNone;
    end;


    Doc.Tables.Item(m_tableNum).Cell(m_tableRow,2).Merge(Doc.Tables.Item(m_tableNum).Cell(m_tableRow,3));
    Doc.Tables.Item(m_tableNum).Cell(m_tableRow,2).Merge(Doc.Tables.Item(m_tableNum).Cell(m_tableRow,3));

    Doc.Tables.Item(m_tableNum).Cell(m_tableRow,1).Range.ParagraphFormat.Alignment:=wdAlignParagraphRight;
    Doc.Tables.Item(m_tableNum).Cell(m_tableRow,2).Range.ParagraphFormat.Alignment:=wdAlignParagraphLeft;


    Doc.Tables.Item(m_tableNum).Cell(m_tableRow,1).Range.Text:=strTitle;
    Doc.Tables.Item(m_tableNum).Cell(m_tableRow,2).Range.Text:=strText;


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


procedure TExprmResultDlg.AddParagraphContentDouble(Const strTitle_Prior,strText_Prior,strTitle_Last,strText_Last:String);
var
    i:integer;
    TableBehavior,AutoFitbehavior:oleVariant;
begin
    TableBehavior:=FALSE;
    AutoFitbehavior:=FALSE;
    Doc.Tables.Add(WordApplication1.Selection.Range, 1 , 4, TableBehavior,AutoFitbehavior);//创建表格
    m_tableRow:=m_tableRow + 1;

    for i:=1 to 4 do
    begin
        Doc.Tables.Item(m_tableNum).Cell(m_tableRow,i).Range.Font.Size := 12;
        Doc.Tables.Item(m_tableNum).Cell(m_tableRow,i).Range.Font.Bold:=0;

        //去掉表格边框
        Doc.Tables.Item(m_tableNum).Cell(m_tableRow,i).Range.Borders.item(wdBorderLeft).LineStyle := wdLineStyleNone;
        Doc.Tables.Item(m_tableNum).Cell(m_tableRow,i).Range.Borders.item(wdBorderRight).LineStyle := wdLineStyleNone;
        Doc.Tables.Item(m_tableNum).Cell(m_tableRow,i).Range.Borders.item(wdBorderTop).LineStyle := wdLineStyleNone;
        Doc.Tables.Item(m_tableNum).Cell(m_tableRow,i).Range.Borders.item(wdBorderBottom).LineStyle := wdLineStyleNone;       
    end;


    Doc.Tables.Item(m_tableNum).Cell(m_tableRow,1).Range.ParagraphFormat.Alignment:=wdAlignParagraphRight;
    Doc.Tables.Item(m_tableNum).Cell(m_tableRow,2).Range.ParagraphFormat.Alignment:=wdAlignParagraphLeft;

    Doc.Tables.Item(m_tableNum).Cell(m_tableRow,3).Range.ParagraphFormat.Alignment:=wdAlignParagraphRight;
    Doc.Tables.Item(m_tableNum).Cell(m_tableRow,4).Range.ParagraphFormat.Alignment:=wdAlignParagraphLeft;
                                                            
    Doc.Tables.Item(m_tableNum).Cell(m_tableRow,1).Range.Text:=strTitle_Prior;
    Doc.Tables.Item(m_tableNum).Cell(m_tableRow,2).Range.Text:=strText_Prior;
    Doc.Tables.Item(m_tableNum).Cell(m_tableRow,3).Range.Text:=strTitle_Last;
    Doc.Tables.Item(m_tableNum).Cell(m_tableRow,4).Range.Text:=strText_Last;

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

1.所需的三个控件: ChooseWA: TWordApplication; ChooseWD: TWordDocument; ChooseWF: TWordFont; 2.检查计算机是否安装了WORD try ChooseWA.Connect; except MessageBox(handle,'无法链接,请确认电脑上是否安装Word XP/2003及以上版本','连接出错', MB_Ok or MB_ICONERROR); Abort; end; 3.关闭WORD拼写检查 //因为Word进行拼写检查需要很多时间,所以首先关闭检查 ChooseWA.Options.CheckSpellingAsYouType := False; ChooseWA.Options.CheckGrammarAsYouType := False; 4.新建一个文档并设置文档的标题 var NewDocument: _Document; ItemIndex: OleVariant; ItemIndex := 1; NewDocument := ChooseWA.Documents.Add(EmptyParam,EmptyParam,EmptyParam,EmptyParam); ChooseWD.ConnectTo(NewDocument); ChooseWD.Windows.Item(ItemIndex).Caption := '我新建的第一个文档';//此文档的第一个窗口的标题,试卷 名称 5.写入数据 ChooseWD.Range.InsertAfter('第一行数据'+#13);//#13代表换行 6.设置字体格式 procedure SetFont(aBold,aItalic,aShadow,aSize:integer); begin ChooseWF.ConnectTo(ChooseWD.Sentences.Get_Last.Font); ChooseWF.Name := '宋体'; ChooseWF.Bold := aBold; ChooseWF.Italic := aItalic; ChooseWF.Shadow := aShadow; ChooseWF.Size := aSize; end; 如:SetFont(1,0,0,22);//设置字体为22号 7.向WORD中写入表格 (1)插入表格: ChooseWD.Tables.Add(ChooseWD.Words.Last, RowNum, ColNum,EmptyParam,EmptyParam);//RowNum为行数, ColNum为列数 (2)插入数据: ChooseWD.Tables.Item(1).Cell(1,1).Range.Text := '第一行第一列'; ChooseWD.Tables.Item(1).Cell(2,1).Range.Text := '第二行第一列'; 8.向WORD写入图片 var Img: TImage; MyFormat: Word; AData: Cardinal; APalette: HPALETTE; Img.Picture.LoadFromFile('文件路径');//从文件夹中导入图片至控件 Img.Picture.SaveToClipboardFormat(MyFormat,AData,APalette);//将图片转存到剪贴板中 Clipboard.SetAsHandle(MyFormat,AData);//将剪贴板中的图片复制出来,注意添加Clipbrd单元 ChooseWD.Sentences.Last.Paste;//在WORD中粘贴图片 9.在界面中显示WORD文档 ChooseWA.Visible:=true; 10.断开与WORD的链接 ChooseWA.Disconnect; ChooseWD.Disconnect; Chart1.SaveToBitmapFile(‘文件名.bmp’);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值