`
宋科明
  • 浏览: 99740 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Delphi自动化控制Excel

阅读更多

如何控制Excel程序来输出数据,插入公式并根据数据画出图表来呢?Delphi 5 提供了一组封装了Office 97和Office 2000的控件,这组控件位于控件面板的Servers页面上,它可以极大地简化对Office的调用。不过糟糕的是,Borland并没有为这些控件提供使用帮助,但实际上使用这些控件是非常简单的,并且Office的对象体系也在Office的帮助中有着详细的说明。

  下面我们将编写一个程序来演示如何控制Excel来创建月份销售情况的报表和图表的。程序运行结果如图1.29所示。

连接Excel

  同Excel建立连接可以使用Connect 方法。控件由于某些原因可能同Excel无法建立连接,因此应该为连接代码建立一个异常处理,代码示意如下:

  try

   ExcelApplication1.Connect; 

   except

   on E: Exception do

   begin

    E.Message := ’无法连接Excel’; 

    Raise; 

   end;

  end;

  ExcelApplication1.Visible[0] := True; 

  建立连接的方式依赖于Server组件的两个重要属性:第一个是AutoConnect 属性,如果为True,表明程序启动后无须调用connect方法就能自动连接Excel;另一个属性是ConnectKind ,它决定了如何建立连接:ckRunningOrNew 表明首先尝试连接到一个当前的服务器上,如果服务器还没运行,则创建服务器的一个实例,然后连接。

  ckNewInstance 总是创建一个新的服务器实例,当我们希望不同用户之间保持相互独立的时候比较有用。

  ckRunningInstance 只同当前运行的服务器相连接。

  ckRemote 同一个由RemoteMachineName指定的远程机器上运行的服务器相连接。

  ckAttachToInterface 表示并不同服务器绑定,但程序使用ConnectTo方法提供一个接口。

  调用方法或设定Server控件的属性也能隐式地建立连接。比如设定Visible 属性为True就会自动建立连接,当然设定为True还会自动显示Excel的界面,如果我们不想显示Excel的界面,就可还是用前面的方法来建立连接。

  Server组件相互间还可以通过ConnectTo方法连接。下面的代码把ExcelWorkbook对象同一个ExcelApplication对象新创建的Workbook相连接:

  ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks.Add(Empty Param,0)); 

  ExcelWorkbook 对象可以直接同Add 方法的返回值相连接,这是因为引入Excel类型库文件时,Workbook的引用被修改为对ExcelWorkbook的引用。然而,一些返回对对象引用的属性或方法必须映射为正确的类型。比如下面代码把第一个WorkSheet的返回值映射为_Worksheet,然后同ExcelWorkSheet组件相连接:

  ExcelWorksheet1.ConnectTo(ExcelWorkbook1.Sheets[1] as _Worksheet); 

向自动化服务器传递参数

  绝大多数的自动化服务器使用variant 作为参数类型。客户端使用Variant传递参数,而服务器会把参数转换为正确的数据类型。与一般数据类型相比,Variant 会占用更多的内存,运行更慢,但它比较灵活。而且,它允许不支持相同数据类型的程序同服务器进行通讯。 对于未使用或是缺省的参数我们可以使用EmptyParam代表:

  ExcelApplication1.Workbooks.Add(EmptyParam, 0); 

  另外,很多Excel的方法需要一个LCID 参数。这个参数代表语言支持,Locale ID可以用来抵消控制面板中区域设置强迫使用ID代表的语言。除非程序有国际化需求,否则我们通常使用0,它代表使用系统缺省的本地设置。

Excel的对象模型 

  为了正确使用Excel Server组件,我们需要了解Excel的对象模型以及Excel的功能如何实现。Excel的对象模型可以从随Excel发布的帮助文件中找到(对于Office 97来说是vbaxl8.hlp文件,对于Office 2000来说是vbaxl9.chm文件)。 

  Application对象是Excel对象体系的最顶层,通过Application对象我们可以获得所有其他的Excel对象。Excel中的文档叫workbooks,一个workbook是一组worksheets和Sheets的集合。每个worksheet包含单元格来储存数据和公式。同时单元格还有相应的格式信息,比如字体颜色和布局等。Range 对象用来定义一个单元格或连续的单元格选区的范围。

  程序执行的顺序类似于用户界面操作的顺序。比如要想在单元格中输入文本,如同用户的操作一样,首先要打开Excel,然后使用当前workbook或新建一个。接着使用当前的worksheet或创建一个新的worksheet。最后,选择一个单元格,输入文本。

  这些步骤只使用ExcelApplication 组件就可以实现,但调用比较麻烦,而使用其他Sever组件配合ExcelApplication 组件会更容易。比如下面我们将讲解如何使用ExcelApplication、ExcelWorkbook和ExcelWorksheet 组件。

Workbooks和Worksheets

  有几种方式可以同workbook连接:调用一个已打开的workbook,创建一个新的workbook或打开一个先前已经保存了的workbook。前面的例子使用Workbooks 对象创建了一个新的workbook并与之连接。而Excel中已打开的workbooks则可以通过名字、索引或ActiveWorkbook 属性来得到:

  ExcelWorkbook1.ConnectTo(ExcelApplication1.ActiveWorkbook); 

  上面代码获得了当前激活的Workbook,而下面代码打开一个已保存的workbook并与之连接: 

   ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks.Open(

    ’c:codeexcelbook1.xls’, EmptyParam, EmptyParam, EmptyParam, 

   EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, 

   EmptyParam, EmptyParam, EmptyParam, EmptyParam, 0)); 

  获取worksheets同上面类似。先前的例子显示了通过索引连接第一个worksheet,下面例子则演示如何通过名字连接worksheet:

  ExcelWorksheet1.ConnectTo(ExcelWorkbook1.Sheets[’sheet1’] as _Worksheet); 

输入数据和公式

  获得worksheet后,就可以在单元格中输入数据了。这里有很多输入数据到Excel中的方法。如果数据可以用ODBC读取的话,ExcelQueryTable 控件是最适合直接把数据输入worksheet中的。Excel还可以直接打开逗号分割的文件,所以也可以把数据写到文件中去,然后用Excel打开。对于少量的数据来说可以直接写到单元格中去。下面的代码是从演示程序中提取的,它遍历数据库,然后把销售日期写到第一列,把数量写到第二列。

  iRow := 1; 

  while not Query1.Eof do begin

   ExcelWorksheet1.Cells.Item[iRow + 1,1] := Query1.FieldByName(’SaleDate’).AsString; 

   ExcelWorksheet1.Cells.Item[iRow + 1,2] := FloatToStr(

   Query1.FieldByName(’ItemsTotal’).AsCurrency); 

   ExcelWorksheet1.Cells.Item[iRow + 1,2].Style := ’currency’; 

   Inc(iRow); 

   Query1.Next; 

  end;

  公式的输入与此相类似,下面的代码把一个公式输入到第二列的底部来计算销售总和:

  ExcelWorksheet1.Cells.Item[iRow + 2,2] := ’=SUM(B1:B’ + IntToStr(iRow) + ’)’; 
如何生成图表

  我们可以使用ExcelChart 组件来创建或修改图表,图表既可以嵌入在Sheet中,也可以是单独的图表Sheet。下面的代码使用Sheets对象来创建一个图表worksheet:

  ExcelChart1.ConnectTo(ExcelWorkbook1.Sheets.Add(EmptyParam, 

   EmptyParam, 1, Variant(xlChart), 0) as _Chart) 

  创建图表可以调用ChartWizard方法,下面的代码演示了如何使用这个方法。方法的第一个参数是包含源数据的range对象,range的第一列包含月份名,第二列对应相应月份的销售总和。PlotBy 属性设为xlRows而SeriesLabels属性设为1是因为数据是按列来打标签的。

  var

   oRange: Variant; 

  begin

   // 定义数据源的范围 

   oRange := ExcelWorksheet1.Range[’A1’, ’B13’]; 

   // 使用ChartWizard方法 

   ExcelChart1.ChartWizard(

   oChartRange,  // 数据源 

   Variant(xl3DColumn),  // Gallery类型图表

   4,  // 格式 

   Variant(xlRows),  // 按列作图 

   0,  // 分类标签 

   1,  // Series标签 

   True,  // 有插图 

   ’Monthly Sales’,  // 标题 

   ’Month’,   // 分类标题 

   EmptyParam,  // 数值标题 

   EmptyParam,  // 额外标题 

   0);   // 语言代码 

  end;



图1.30

  创建的图表如图1.30所示。

  ExcelChart 对象还提供了大量的事件,可以利用这些事件来开发交互式图表。演示程序中还提供了嵌入到Worksheet的图表的例子。 

调用Excel 2000

  缺省条件下,Delphi中安装的Server组件是基于Office 97的,但是Office 2000是向后兼容的,所以也可以用来调用Office 2000。然而要想利用Excel 2000中的新特性的话,必须安装Excel 2000的server组件,由于Office 97和Office 2000的组件类使用相同的名字,所以两者不能同时安装。所以要想安装Office 2000的Server组件,首先要移去Office 97组件(DclAxServer50.bpl),然后添加/bin目录下的Dcloffice2k50.bpl包文件来注册Office 2000组件。

  Excel 2000的对象体系有很多变化,表现在引入的类型库从Office 97的1830KB增加到了4915KB。主要的新特性包括对ADO的直接支持、Office 2000 Web组件(允许电子表格和图表被保存为动态网页)以及网页脚本。

分享到:
评论

相关推荐

    用Delphi实现Excel自动化

    用Delphi实现Excel自动化 用Delphi实现Excel自动化

    delphi的ExcelApplication控件excel操作

    delphi的ExcelApplication控件excel操作

    Delphi编写的Excel表格自动化控制器

    摘要:Delphi源码,报表打印,Delphi表格  Delphi编写的Excel表格自动化控制器,需要Office软件中的Exce编程控件支持,因此编译前请先准备好支持库文件,编译时会有提示的。

    Delphi 实现数据库到Excel的数据传输.rar

    Delphi 实现数据库到Excel的数据传输功能,演示OLE自动化控制器的使用方法,本例是使用Delphi中的CreateOLEObject('Excel.Application')来操作处理Excel文件,建立OLE对象,使Excel可见,并将本程序最小化,以观察...

    Delphi使用OLE对象读入Excel XLS文件

     一个基于Delphi语言编写的OLE自动化控件器,让Delphi支持打开.xls格式的Excel表格文件,简要概述一下实现步骤:建立OLE对象、使Excel可见,并将本程序最小化,以观察Excel的运行情况、使Excel窗口不可见、注意:...

    delphi--excel.rar_DELPHI OLE excel_delphi excel报表_excel 图

    Delphi作为一个出色的RAD,强大的...Delphi从版本5开始提供的Excel组件极大地简化了OLE自动化技术的应用。不过缺漏多多的帮助文件一直是Delphi最令人诟病的地方,这些新组件也不例外,本文试图对此作一较详细地介绍。

    delphi操作excel模块,图片,表格,读写删除

    不需Excel也可讀寫xls檔的Delphi控件 用来读取Excel,Access的控件 读写任何单元值 数字型、字符型、布尔型以及错误型。但是你了解日期和时间型单元吗?在Excel中没有这样的单元。Excel是和Delphi一样的方式来存储...

    利用OLE自动化和VBA的Delphi动态报表的研究与实现

    利用OLE自动化和VBA的Delphi动态报表的研究与实现

    Delphi使用OLE自动转换Excel的程序源码.rar

    Delphi使用OLE自动转换Excel的程序源码,建立OLE对象,使Excel可见,并将本程序最小化,以观察Excel的运行情况,支持数据库到Excel的数据传输,注意:Delphi中的数组的下标是从0开始的,而Excel的表格是从1开始编号...

    delphi 是增强型TExcel

    作者: Stefan Hoffmeister. T(Adv)Excel 是增强型TExcel,支持Excel 4/5/7/8,将数据直接送入 Microsoft Excel 比OLE自动化和其它方法快很多.

    Delphi动态报表的设计与实现

    本文介绍在Delphi 环境中利用Delphi 自带控件生成动态报表 ,以及通过 Excel 自动化技术增强 Delphi 动态报表处理功能 的方法。该方法灵活、简便、实用性强。

    Delphi7组件应用实例

    13.4 实例——使用TWordDocument组件连接Word自动化服务器 13.5 实例——建立与Excel连接 13.6 实例——以OLE方式建立与Excel连接 第14章 Internet组件页 14.1 Web服务器应用程序的结构 14.2 TWebDispatcher...

    教育办公自动化(初中版)

    通过对重庆和贵州几十个中、小学校的调查,开发的《教育办公自动化系统》软件几乎覆盖了中小学校日常管理和数据处理。她广泛吸收了各个中小学学校教学管理及其他管理的经验,使系统功能不断得以拓展、流程更加标准...

    C#操作EXCEL集合

    Excel是微软公司办公自动化套件中的一个软件,他主要是用来处理电子表格。Excel以其功能强大,界面友好等受到了许多用户的欢迎。在办公的时候,正是由于Excel的这么多的优点,许多重要的数据,往往以Excel电子表格的...

    [C#]Visual C#的Excel编程

    Excel是微软公司办公自动化套件中的一个软件,他主要是用来处理电子表格。Excel以其功能强大,界面友好等受到了许多用户的欢迎。在办公的时候,正是由于Excel的这么多的优点,许多重要的数据,往往以Excel电子表格的...

    全球办公自动化系统V3.0全部源代码

    SQL.exe 通用数据库查询系统 {支持各类数据库格式的查询,支持Undo 及 Redo 操作,可以保存任意中间结果 ,支持对任意结果的n次查询 支持查询结果导入excel表 支持多表查询操作} 需要 BDE skynet.exe 电子邮件系统...

    信息化项目成本自动计算器EXCEL版.rar

    信息化项目成本自动估计计算器,填写项目基本信息,规模估算,功能点工作量估算,投入人力成本表,关键资源估算表,项目估计汇总,Delphi估计方法,类比估算法,复用计算与FP估算法。总影响度因子是14个系统特征值的...

Global site tag (gtag.js) - Google Analytics