delphi自带控件操作excel

本文介绍了如何使用Delphi中的Excel控件来创建和读取Excel文件。通过示例代码展示了如何新建工作簿、工作表,设置单元格样式,并读取已有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
程序运行效果如图所示:




不需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文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值