如何控制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中,实现对Microsoft Excel的全面控制是许多应用中的常见需求,无论是用于数据分析、报表生成还是自动化任务处理。以下是从给定的文件标题、描述、标签以及部分内容中提炼出的关键知识点,这些知识点将帮助...
在Delphi 7中,控制Excel图表涉及到使用Microsoft Office的自动化接口,这允许你通过编程方式与Excel交互,创建、修改或操作图表。这个过程主要依赖于`ComObj`单元,它提供了对COM对象(如Excel应用程序)的访问。...
在 Delphi 中,我们可以使用多种方式来操作 Excel,例如使用 OLE 自动化、ADO、DBGridEh 等。其中,使用 OLE 自动化是最常用的方式。使用 OLE 自动化,我们可以使用 Excel 的对象模型来操作 Excel,例如创建工作簿、...
这个控件是通过自动化接口(Automation Interface)来实现的,允许Delphi程序控制Excel应用程序,就像用户直接在Excel中操作一样。 一、ExcelApplication控件介绍 ExcelApplication控件是Delphi中的一个非可视组件...
《Delphi编写的Excel表格自动化控制器》 在IT领域,Delphi是一种强大的对象 Pascal 编程语言,以其高效的代码生成和丰富的组件库而受到开发者喜爱。本项目关注的是使用Delphi进行Excel表格自动化控制,这在数据处理...
通过 Delphi,可以轻松地创建、编辑和操作 Excel 文件,从而实现自动化办公和数据处理等任务。 Delphi 操作 Excel 的方式 Delphi 操作 Excel 主要有两种方式:使用控件和使用 CreateOleObject。 使用控件 使用...
本实例将探讨如何利用Delphi来控制Microsoft Excel,实现数据处理和自动化任务。在Delphi中,我们可以使用ActiveX控件或COM接口来与Excel进行交互。 首先,我们要了解的是`Unit1.dcu`和`Unit1.dfm`。`.dcu`是Delphi...
在IT行业中,使用编程语言控制...通过上述知识,Delphi开发者能够有效地控制Excel,实现自动化处理数据,提高工作效率。在实践中,不断探索和掌握更多的Delphi与Excel交互技巧,将有助于构建更强大的数据处理系统。
在Delphi中控制Excel主要涉及使用Microsoft Office自动化接口,这允许开发者通过编程方式与Excel交互,创建、修改、读取和处理Excel工作簿。本文将深入探讨Delphi中控制Excel的一些关键属性和方法。 首先,我们需要...
在 IT 领域中,自动化工具和技术的应用极为广泛,其中一种常见的需求就是能够自动创建报表。利用 Delphi 这种强大的开发工具,结合 Microsoft Excel 的功能,可以实现高效的数据处理和报表生成。本文将详细介绍如何...
在Delphi编程环境中,我们可以使用多种方法来读取Excel数据,其中最常见的是OLE自动化和ADO(ActiveX Data Objects)。本篇文章将深入探讨如何使用ADO在Delphi中高效地读取Excel数据,并对比OLE方法的优势。 标题...
通过学习和理解这些知识点,开发者可以利用Delphi的强大功能来自动化Excel任务,处理大量数据,创建报告,甚至构建复杂的数据分析工具。在压缩包的“使用说明.txt”中,可能包含了具体的代码示例和步骤指导,帮助...
在Delphi中,实现这一功能通常涉及到对Microsoft Office自动化接口的利用,或者是使用第三方库来处理Excel文件。 首先,我们需要理解Delphi是如何与Excel交互的。Delphi支持COM组件,这使得我们可以通过COM接口调用...
### Delphi控制Excel2000心得 ...这些技巧可以帮助开发人员更高效地处理Excel文件,并实现自动化办公的需求。需要注意的是,虽然这里的示例基于Excel 2000,但大部分功能同样适用于后续版本的Excel。
在Delphi中,通过源码操作Word和Excel,开发者可以实现自动化的工作流程,例如批量处理文档、自动生成报告、从数据库导入数据到Excel等。同时,控件如DevExpress或TMS Software提供的Office兼容组件,可以让界面设计...
总的来说,"Delphi操作excel大全"这个主题涵盖了从基础的读写操作到复杂的Excel自动化控制。Delphi程序员需要理解Excel COM接口,掌握如何创建和管理Excel应用程序实例,以及如何操作工作簿、工作表和单元格。通过...
综上所述,Delphi 操作 Word 和 Excel 主要是通过 OLE 自动化技术实现,涉及到组件的使用、事件处理、数据库数据与 Excel 数据交换等多个环节,这些都需要开发者具备一定的 Delphi 和 OLE 自动化知识。