zoukankan      html  css  js  c++  java
  • DELPHI,Office编程1

     

    1、可供选择的技术:

    (1) 通过Delphi的控件TOleContainer 将Office嵌入,这是最简单的Ole嵌入,能够直接将Office文档调用,只需要使用ToleContainer.Run就可以将Office文档直接启动。且这样启动的Office文档与Delphi程序是一个整体(从界面上看),但是它存在不可克服的缺点,即不能通过Delphi控制Office文档,也就不能实现将灵活操纵Office的目的。基本上排除这项技术。

    (2) 使用Delphi提供的Servers控件调用Office,使用Office的属性,使用Delphi的Servers控件来操纵Office,在编程时Delphi能够实现代码提示,总体上看能够较好的实现Delphi对Office的控制,但是还有一些Office的功能不能在Delphi中调用(比如自己编写的VBA宏代码)。且实现功能时本来在VBA代码中可选择参数在Delphi调用的时候必须添加,否则,连编译都不能通过。这种方式启动的Office与Delphi程序分属两个窗体。

    (3) 使用CreateOleObject将启动Office,然后以Ole方式对Office进行控制。这种办法是使用以CreateOleObjects方式调用Office,实际上还是Ole,相比(2)Service控件的最大缺点就不支持代码Code的自动生成,但是咱们充分的利用VBA代码Code就能够弥补那个功能,这种方式能够真正做到完全控制Office文件,能够使用Office的所有属性,包括自己编写的VBA宏代码。与Servers控件和Com技术相比,本方法能够真正地使用Office的各种属性,和在VBA中编写自己的代码基本一样,可以缺省的代码也不需要使用。重点放在这种技术的使用上。

    2Delphi使用CreateOleObject 技术操控Office文档。

    原理性描述:

    1、 生成VBA代码Code。Word本身具有很强的可扩展性,尤其是支持用户自定义功能,其呈现
    的主要方法就经过VBA代码Code来呈现的。在“视图->宏->查看宏”(ALT+F8) 里面就能够看
    到具体的宏代码Code,能够直接编辑。而且还能够应用录制宏的功能自动生成宏代码Code。窍门是
    选取“视图->宏->录制宏”,然后执行自己希望经过程式呈现的功能,如存盘、打印等功能,
    此时Word一边执行您要呈现功能,一边将您的操作录制生成了唯一宏,在呈现功能后,能够选取
    “视图->宏->查看宏”(ALT+F8),查看生成的宏代码Code。
    例如:咱们要将文档中的“研讨”全部替换成“研讨”。
    a. 点击“视图->宏->录制宏”,直接点击确定,默认的宏保存到了Normal.dot操作系统公
    用模板里面。
    b. 点击“编辑->查找”,呈现弹出对话框,输入查找和替换的字,点确定。停止替换。
    c. 结束宏的录制,点击结束按钮。
    d. “视图->宏->查看宏”(ALT+F8)。缺省查看Normal里面
    的模块里面的NewMacros模块。
    以下是生成的宏代码Code:

    Sub ething宏1()

    '

    ' ething宏1 宏

    ' 替换

    '

    Selection.Find.ClearFormatting

    Selection.Find.Replacement.ClearFormatting

    With Selection.Find

    .Text = "你"

    .Replacement.Text = "您"

    .Forward = True

    .Wrap = wdFindContinue

    .Format = False

    .MatchCase = False

    .MatchWholeWord = False

    .MatchByte = True

    .MatchWildcards = False

    .MatchSoundsLike = False

    .MatchAllWordForms = False

    End With

    Selection.Find.Execute Replace:=wdReplaceAll

    End Sub

    2、 精简宏代码Code。通常,生成的宏代码Code有很多语句对您要呈现的功能来说都是多余的。咱们要
    做的就找到咱们需求的代码Code。此时咱们查看具体的代码Code,剔除明显没有用途的代码Code,然后光
    标停留在宏上面,按F5执行,看也许呈现功能,逐步精简,得到最小代码Code。此步骤可参考Word的
    VBA帮助来判断代码Code也许有用。
    如上例,精简下来,剩下以下代码Code。
    Sub Macro1()
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
    .Text = "你"
    .Replacement.Text = "您"
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    End Sub
    3、 转换成DELPHI编程代码Code。这一步其实很简单,对于VBA代码Code,只需求在前面添加Word的句柄或者
    文档的句柄或者文档的句柄.Application就能够直接操作了。
    例:逐句中英对译:(Word_Handle是Word的句柄)
    (VB) Selection.Find.ClearFormatting
    (DELPHI编程) Word_Handle.Selection.Find.ClearFormatting;
    (VB) Selection.Find.Replacement.ClearFormatting
    (DELPHI编程) Word_Handle.Selection.Find.Replacement.ClearFormatting;
    以上两句简单添加上Word的句柄就能够了。
    (VB) With Selection.Find
    Text = "研讨"
    Replacement.Text = "研讨"
    End With
    (DELPHI编程) Word_Handle.Selection.Find.Text := '研讨';
    Word_Handle.Selection.Find.Replacement.Text := '研讨';
    以上几句由于DELPHI编程不支持Variant的With框架,所以分开写。同时转换成DELPHI编程语句语言规则。
    (VB) Selection.Find.Execute Replace:=wdReplaceAll
    (DELPHI编程) Word_Handle.Selection.Find.Execute(Replace:=2);
    上面一句存在唯一小窍门,找到常量wdReplaceAll的数值为2?
    那里有几个办法,
    一:直接use Word2000或者word97单元(可以通过加入TServer中的Word,查看Uses,决定Word2000 还是WordXp),那么直接应用常量wdReplaceAll就能够了;
    二:到Word2000.pas或者Word97.pas里面查找wdReplaceAll的数值;
    三:直接应用VBA代码Code见wdReplaceAll的数值呈现出来。办法是写唯一小过程,然后执行,如下:
    Sub ShowValue()
    MsgBox wdReplaceAll
    End Sub
    最后补充一下,很多涉及Word的资料能够从Word的VBA帮助里面获得。具体文档在
    ?:"Program files"Microsoft Office"Office10"2052(XP)下,VBAWD10.CHM,更多有联系版本路径基本类似。

    例子:

    使用CreateOleObject将启动Office,然后以Ole方式对Office进行控制。以Excel表格为例(表格的格式可以是事先设定好的,也可以是自己自由定义的,这里以事先设定好表格的格式为例),进行说明:

    (1) 在Uses中添加Comobj类;

    (2) 申请一个全局变量:FvExcel ,类型为Variant; 表示是Excel对象

    (3) 定义一个函数用来启动Excel,如定义function OpenExcel(strFileName : string) : Boolean;

    Function Tform1. OpenExcel(strFileName : string) : Boolean;

    begin

                 Result := True;

                 try

                       FvExcel := CreateOleObject('Excel.Application');

                        except

                  Application.MessageBox('打开Excel失败',PChar(Application.Title),MB_ICONERROR);

                          Result := False;

                       end;

                       FvExcel.Visible := True;

                       FvExcel.Caption := '';

                       FvExcel.WorkBooks.Open(strFileName); //打开工作簿

                       FvExcel.WorkSheets[1].Activate;  //设置第1个工作表为活动工作表

    end;

    (4) 向FvExcel中插入数据

    FvExcel.cells[row,col].value:=’中国’;//row表示行,col表示列;

    (5) 设置格式

    fvexcel.rows[row].font.color:=clred; //设置某一行数据的颜色

    fvexcel.ActiveSheet.PageSetup.LeftMargin:=1;//设置左页边距

    fvexcel.ActiveSheet.PageSetup. RightMargin:=1;//设置右页边距

    fvexcel.ActiveSheet.PageSetup.Zoom:=100;//设置显示比例

    fvexcel.ActiveSheet.PageSetup.PaperSize:= xlPaperA4;//设置打印纸张大小

     

     

    资料备查,源自网络

    http://www.cnblogs.com/chinahbzm/articles/1086971.html

    http://www.huinu.com/?action-viewnews-itemid-45961

     
     
    作者:易简.道    
     
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    一:ORM关系对象映射(Object Relational Mapping,简称ORM)
    How to manage concurrency in Django models
    python实现redis三种cas事务操作
    django autocommit的一个坑,读操作的事务占用导致锁表
    Unity3d载入外部图片文件
    MySQL 查询某个列中同样值的数量统计
    Android_自己定义切换控件SwitchView
    SWTBOK測试实践系列(5) -- 项目中使用手动和自己主动化的策略
    自己定义一个Dialog样式的Activity窗体,切换到Dialog的方法
    搜狗语音云开发入门(二)——使用离线语音识别服务
  • 原文地址:https://www.cnblogs.com/xyicheng/p/1678394.html
Copyright © 2011-2022 走看看