delphi自带控件操作excel

在介绍使用delphi控件前,我们首先需要了解关于EXCEL的几个基本概念:EXCEL应用程序、工作薄(book)、工作表(sheet),我们每次打开excel应用程序时,都会看到一个工作薄和三张工作表,这些都是EXCEL应用程序默认提供建好的。一个ExceL应用程序可以包含多个工作薄(book),每个工作薄至少需要包含一个工作表(sheet)。

图1 一个空的EXCEL应用程序窗口

图2 具有3个工作薄的EXCEL应用

点击工具栏中“新建”按钮,可以添加新的工作薄,如图3所示:

图3 新建按钮可以创建新的工作薄

图4 工作薄中包含工作表,右击表名(例如sheet1,sheet2...),在弹出的菜单中点击“插入”查单可以添加一张新的工作表。


delphi操作EXCEL的控件

在servers控件选项页面中,选择ExcelApplication、ExcelWorkbook和ExcelWorksheet这3个控件放置在窗体上,如图所示:


图5 控件在servers选项卡中的样式

说明:如果在servers选项卡中找不到这3个控件,请手动安装。以Delphi7为例,点击“component”菜单,在菜单栏中点击“Install Packages...”,在弹出的窗体中点击“Add”按钮,在delphi的安装目录下的bin目录中找到“dclofficexp70.bpl”。选择后进行控件安装即可。

图6

“”

图7


放置好3个控件的示例界面如图8所示:

图8


完整的程序代码如下所示:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExcelXP, OleServer, StdCtrls, ComObj;

type
  TForm1 = class(TForm)
    exclApp1: TExcelApplication;
    exclSht1: TExcelWorksheet;
    exclBk1: TExcelWorkbook;
    btn1: TButton;
    btn2: TButton;
    mmo1: TMemo;
    procedure btn1Click(Sender: TObject);
    procedure btn2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

const
  EXCEL_OPEN_PATH: string = 'C:\testExcelDemo.XLS';
  EXCEL_SAVE_PATH: string = 'C:\testExcelDemo.xls';

implementation

{$R *.dfm}

procedure TForm1.btn1Click(Sender: TObject);
const
  ROW_COL: STRING = '第%d行,第%d列';
var
  wkExcel: _Workbook;
  wsExcel: _Worksheet;
  i, j: Integer;
  strSaveExcelName: string;
begin
  // 创建Excel
  try
    // 连接到Excel
    exclApp1.Connect;
    // 显示询问窗口(比如文件名重复是否保存之类的询问)
    exclApp1.DisplayAlerts[0] := True;
    // 不显示EXCEL窗口
    exclApp1.Visible[0] := True;
    // 设置标题栏内容
    exclApp1.Caption := 'Test Excel Demo';
    // 创建一份空的工作簿,默认包含3个工作表
    wkExcel := exclApp1.Workbooks.Add(EmptyParam, 0);
    // TExcelWorkbook连接到创建的工作簿
    exclBk1.ConnectTo(wkExcel);
    // 激活工作簿
    exclBk1.Activate;
    // 统计工作薄的有几张工作表
//    ShowMessage(IntToStr(exclBk1.Worksheets.Count));

    // 创建一张新的工作表
    wsExcel := (exclBk1.Worksheets.Add(EmptyParam, EmptyParam, EmptyParam, EmptyParam, 0)) as _Worksheet;
    exclSht1.ConnectTo(wsExcel);
    exclSht1.Activate;
    // 设置当前工作表的名称
    exclSht1.Name := 'New Worksheet';
    // 设置EXCEL表的第一行为表的名称
    // 设定从A列到D列的列宽
    exclSht1.Rows.Range['A1','D1'].ColumnWidth := 30;
    // 设定第一行从A列到D列的字体颜色为蓝色
    exclSht1.Rows.Range['A1','D1'].Font.Color := clblue;
    // 设定第一行从A列到D列的字体加粗
    exclSht1.Rows.Range['A1','D1'].Font.Bold := true;
    // 设定第一行从A列到D列的字号为18
    exclSht1.Rows.Range['A1','D1'].Font.Size := 18;
    // 设定第一行从A列到D列合并
    exclSht1.Rows.Range['A1','D1'].Merge(4);
    // 调整第一行行高
    exclSht1.Rows.Range['A1','D1'].Rows.RowHeight := 30;
    // 设置文本垂直居中
    exclSht1.Rows.Range['A1','D1'].VerticalAlignment := xlcenter;
    // 设置文本水平居中
    exclSht1.Rows.Range['A1','D1'].HorizontalAlignment := xlcenter;
    // 填充内容
    exclSht1.Cells.Item[1, 1] := 'TEST EXCEL DEMO';

    // 设置EXCEL表的第二行为表头
    // 设定第二行从A列到D列的字体颜色为红色
    exclSht1.Rows.Range['A2','D2'].Font.Color := clRed;
    
    // 填充第一行,A列到D列的单元格
    exclSht1.Cells.Item[2, 1] := '第一列';
    exclSht1.Cells.Item[2, 2] := '第二列';
    exclSht1.Cells.Item[2, 3] := '第三列';
    exclSht1.Cells.Item[2, 4] := '第四列';

    // 填充一个4x4的表格
    for i := 3 to 7 do
    begin
      for j := 1 to 4 do
      begin
        exclSht1.Cells.Item[i, j] := Format(ROW_COL,[i, j]);
      end;
    end;

    // 给A1到D7整个范围加边框
    exclSht1.Rows.Range['A1','D7'].Borders.LineStyle := 1;

    // 保存excel文件
    try
      // 可以通过FileExists()函数预先判断文件名是否重名
      exclSht1.SaveAs(EXCEL_SAVE_PATH);
    except
      // 发现文件名重复时选择不替换保存会抛出异常
      on e: EOleException do // 引用ComObj单元
      begin
//        exclSht1.Delete; // 删除当前工作表
        ShowMessage(e.ClassName);
      end;
    end;

  finally
    // 如果工作簿没有保存,强制设置为已保存,避免在调用Quit方法时再次提示保存文件
    if not exclBk1.Saved[0]  then
    begin
      ShowMessage('工作薄尚未保存!');
      exclBk1.Saved[0] := True; // 放弃存盘
    end;
    exclSht1.Disconnect;
    exclBk1.Disconnect;
    exclApp1.Disconnect;
    exclApp1.Quit;
  end;
end;

procedure TForm1.btn2Click(Sender: TObject);
var
  wkExcel: _Workbook;
  wsExcel: _Worksheet;
  i, j: Integer;
  strSaveExcelName: string;
  iValidRows: Integer; // 工作表的有效行
  iValidCols: Integer; // 工作表的有效列
  strContent: string;  // 工作表的内容
begin
  mmo1.Clear;
  // 读Excel
  try
    // 连接到excel应用程序
    exclApp1.Connect;
    exclApp1.Visible[0] := False;
    // 打开一个已经存在的EXCEL文件  
    exclApp1.Workbooks.Open(EXCEL_OPEN_PATH, EmptyParam, EmptyParam, EmptyParam, EmptyParam,
      EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam,
      EmptyParam, EmptyParam, EmptyParam, 0);

    // 连接到第一个工作簿
    exclBk1.ConnectTo(exclApp1.Workbooks.Item[1]);

    // 连接到第一个工作表
    wsExcel := exclBk1.Worksheets.Item[1] as _Worksheet;
    exclSht1.ConnectTo(wsExcel);
    // 激活工作表
    exclSht1.Activate(0);
    iValidRows := exclSht1.UsedRange[0].Rows.Count;    // 有效行数
    iValidCols := exclSht1.UsedRange[0].Columns.Count; // 有效列数
    ShowMessage(IntToStr(iValidRows) + ', ' + IntToStr(iValidCols));

    for i := 1 to iValidRows do
    begin
      strContent := ''; // 清空内容
      for j := 1 to iValidCols do
      begin
        // 读工作表单元格
        strContent :=strContent + string(exclSht1.Cells.Item[i, j]) + ', ';
      end;
      // 显示在mmo1中
      mmo1.Lines.Add(strContent);
    end;
  finally
    exclSht1.Disconnect;
    exclBk1.Disconnect;
    exclApp1.Disconnect;
    exclApp1.Quit;
  end;
end;

end.
完整代码示例下载链接:http://download.csdn.net/detail/js0001/6810841
程序运行效果如图所示:




  • 9
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、支持屏幕打印,控制方法多样,可以打印全部rxlib控件全部InfoPower控件,TDBGrid,TStringGrid,TImage,TEdit等,TDBGridEh,f1book,TDecisionGrid等等众多控件。(例子1,例子2,例子3,例子4,例子5)   2、支持最终用户设计、修改报表,只需连接相关的数据源,指出数据的位置(设置报表样式),无论是主从表,子报表,套表,都可迅速生成。开发一个报表只需几分钟的时间。   3、报表样式可以保存为rmf格式,下次可通过读入使用(配合SQL脚本就可以生成报表)。并可以把带数据的报表保存为rmp格式,在任何机器上都可以浏览、打印,而不需要数据库。   4、生成后的报表支持修改,包括字体的设置,边框的设置,修改内容等。   5、报表编辑器内自带ado,bde,ibx,Diamond dao,dbisam等数据访问控件,可以通过这些控件开发独立的报表制作工具。其使用方法和delphi中的控件是一样的。   6、完全、自由自定义页面、边距、字体,标题和页眉页脚,并可以在自认合适的地方插入函数来实现当前日期,页合计,总合计等功能,合计字段可以放在页头,分组头,并支持条件合计,对分组合计,分页合计,总计等只需简单地设置属性即可。   7、完全支持D5--D7,BCB5--BCB6。   8、报表中可以在自认合适的事件(on beforeprint,on afterprint等)中加入程序脚本,以控制、或实现更复杂的打印效果。   9、更新迅速,可根据使用人员与用户的意见,不断的加入新的功能。   10、多种格式转换,可以把做出的报表转换为html,xls,pdf,bmp,jpeg等等格式。   11、自动对超长记录折行,超长的内容也会自动折行,中文换行不会乱码。   12、首家支持缩放打印功能,可以根据打印时选择的纸张自动缩放报表。   13、首家支持即打即停.   14、首家提供类似excel的报表设计器,给你足够灵活方表的报表设计方式。   15、首家提供双报表设计器(第一种,第二种),满足所有的需求。   16、更是提供类似于ObjectPascal的script,实现特殊功能。   17、首家提供web,IntraWeb中的报表解决方案。   18、首家提供报表压缩处理,占用内存更少,生成报表速度更快。   19、首家提供合并单元格功能,更加适应处理复杂的中文报表。   20、自动填空行,每页打印数量等细节处理更完善。
不需Excel也可讀寫xls檔的Delphi控件 用来读取Excel,Access的控件 读写任何单元值 数字型、字符型、布尔型以及错误型。但是你了解日期和时间型单元吗?在Excel中没有这样的单元。Excel是和Delphi一样的方式来存储日期和时间的,即浮点型。那是什么制造了日期或时间值啦,是格式化。 完全支持公式。你可以使用和Excel一样的函数,也支持对外部工作簿引用的公式,你甚至可以从外部引用读取结果。 与操作Delphi的TStringGrid一样的方式操作单元格,或则通过给单元格命名,比如:”D7” 根据单元格的规则以字符串格式读取单元值 根据你的需求格式化单元 格式化很简单。通过获取单元格,你就可以操作单元的格式属性。例如:XLSReadWriteII.Sheet[n].Cell[Col,Row].FontSize := 12; 你也可以对域进行格式化,比如设置边框。 支持所有的Excel格式选项 合并单元格 操作所有的打印选项 选择页面大小,设置边距 设置标题和页脚,包括格式码。 定义打印区域 设置分页符 XLSReadWriteII完全支持Unicode 所有的字符型都是宽字符型。你完全不必担心非英语字符。 控件 你可以插入控件以及定义他们的源和目的单元 绘图 插入所有种类的绘图,从简单的线条到AutoShapes 多行文本和文本框 创建和编辑文本框以及多行文本 图表 创建和Excel中一样选项的图表 复制/移动/删除 可以以Excel一样的行为复制、移动和删除单元 行列也可以像单元一样复制和移动 支持工作簿之间的复制和移动 可以复制整个工作簿 使用命名的域/单元 你可以在你想要的任何地方命名 通过命名访问单元格,例如:XLS.NameAsFloat['MyCell'] := 202.5; 支持指定、内置的名称 支持所有超链接类型 网页和E-mail地址 本地文件 服务器文件 工作薄引用 加密文档 你可以读写加密文件。条件是你需要知道文件的密码。 计算 可计算单元以及整个工作薄 计算引擎将依据单元进行计算。 可读取引用的外部工作薄。这通过一个特殊的快速查询程序进行执行 Rich Text单元 为了轻松地创建多字体格式的单元,单元可以以RTF格式读写 VBA宏 可以读写文件中的宏,使用XLSReadWriteII可以为控件比如:按钮、组合框等添加宏 导入及导出 从下列导入数据… Open Office Calc文档 CSV文件以及其他可以自动识别分隔符、小数分隔符和文本引用字符的文本文件 HTML表格(标签) 数据库 导出数据为… CSV文件 HTML文件 其他 自动过滤 单元验证 有条件的格式 合并单元 PaintCell方法:将单元内容渲染到TCanvas对象的 XLSReadWriteII包还包含下列组件: 从任何数据库中导入数据到工作薄 工作薄导出为HTML文件
### 回答1: DelphiExcel控件有很多选择,但最好的Excel控件要根据具体需求来决定。以下是一些常用的Delphi Excel控件及其特点: 1. FlexCel:FlexCel是一款功能强大的Delphi Excel控件,它支持读取、写入和修改Excel文件,并提供了丰富的API和功能,如合并单元格、添加图表等。同时,FlexCel还支持生成PDF、HTML、图片等多种格式的输出。 2. NativeExcel:NativeExcel是另一个优秀的Delphi Excel控件,它提供了灵活的API和功能,如读取、写入和修改Excel文件,支持单元格样式设置、图表生成等。NativeExcel还支持导入和导出多种格式的数据。 3. TMS FlexCel Studio:TMS FlexCel Studio是一个集成了FlexCel控件套件,它提供了包括FlexCel在内的多个Delphi Excel控件,可以满足不同需求的开发者。TMS FlexCel Studio具有强大的Excel文件处理能力,并提供了丰富的功能,如数据筛选、条件格式设置等。 无论选择哪个Delphi Excel控件,都需要根据项目需求、性能要求、使用难度和成本等因素进行综合考虑。最好的Excel控件应该具备稳定性高、易于使用、功能丰富、性能优越以及有良好的支持和更新服务等特点。因此,在选择Delphi Excel控件时,需要权衡各个方面的因素,并根据具体需求进行决策。 ### 回答2: Delphi是一种应用程序开发工具,可用于创建各种类型的应用程序,包括与Microsoft Excel集成的应用程序。在Delphi中,有许多用于操作和控制Excel控件可供选择,而其中最受欢迎和被认为是最好的Excel控件是由DevExpress公司开发的控件库。 DevExpress的Excel控件库具有很多出色的功能和特性,使开发者能够轻松地操作和管理Excel文档。这个控件库提供了丰富的API和方法,以便在Delphi应用程序中执行各种Excel操作,如创建、编辑、导入和导出Excel文档,以及对工作表、单元格和图表进行操作。 DevExpress的Excel控件库还具有优秀的性能和稳定性。它经过全面的测试和优化,可以处理大量的数据、复杂的计算和高级的Excel功能,同时还能确保应用程序的稳定性和流畅性。 此外,DevExpress还提供丰富的文档和支持资源,帮助开发者快速上手和解决问题。他们提供了详细的文档、示例代码、在线论坛和专家支持,确保开发者能够充分利用Excel控件库的优势,并在开发过程中获得必要的支持。 综上所述,DevExpress的Excel控件库被认为是Delphi中最好的Excel控件,具有丰富的功能、优秀的性能和稳定性,并且提供了全面的文档和支持资源,完全满足开发人员对Excel操作的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值