在介绍使用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;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, ExcelXP, OleServer, StdCtrls, ComObj;typeTForm1 = 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;varForm1: TForm1;constEXCEL_OPEN_PATH: string = 'C:\testExcelDemo.XLS';EXCEL_SAVE_PATH: string = 'C:\testExcelDemo.xls';implementation{$R *.dfm}procedure TForm1.btn1Click(Sender: TObject);
constROW_COL: STRING = '第%d行,第%d列';
varwkExcel: _Workbook;wsExcel: _Worksheet;i, j: Integer;strSaveExcelName: string;
begin// 创建Exceltry// 连接到ExcelexclApp1.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列的字号为18exclSht1.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 dobeginfor j := 1 to 4 dobeginexclSht1.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]  thenbeginShowMessage('工作薄尚未保存!');exclBk1.Saved[0] := True; // 放弃存盘end;exclSht1.Disconnect;exclBk1.Disconnect;exclApp1.Disconnect;exclApp1.Quit;end;
end;procedure TForm1.btn2Click(Sender: TObject);
varwkExcel: _Workbook;wsExcel: _Worksheet;i, j: Integer;strSaveExcelName: string;iValidRows: Integer; // 工作表的有效行iValidCols: Integer; // 工作表的有效列strContent: string;  // 工作表的内容
beginmmo1.Clear;// 读Exceltry// 连接到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 dobeginstrContent := ''; // 清空内容for j := 1 to iValidCols dobegin// 读工作表单元格strContent :=strContent + string(exclSht1.Cells.Item[i, j]) + ', ';end;// 显示在mmo1中mmo1.Lines.Add(strContent);end;finallyexclSht1.Disconnect;exclBk1.Disconnect;exclApp1.Disconnect;exclApp1.Quit;end;
end;end.

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

delphi自带控件操作excel相关推荐

  1. 使用GemBox.Spreadsheet控件操作Excel文件

    最近在给cc帮忙做一个客户账单处理的小工具,需要打开xls编辑处理后再另存自定义样式的新xls文件,无意间发现了GemBox的这个控件,简直不能好用更多啊,就一个dll导入后不管目标机器上是否安装Ex ...

  2. C# 使用微软自带控件导出excel

    导出excel:使用微软默认的dll,通过点击导出按钮启用js的open方法新建出一个ashx页面将文件导出到浏览器进行下载,此处放出部分代码以大概表示出顺序,完整代码见https://www.cnb ...

  3. 使用Aspose.Cell控件实现Excel高难度报表的生成(三)

    在之前几篇文章中,介绍了关于Apsose.cell这个强大的Excel操作控件的使用,相关文章如下: 使用Aspose.Cell控件实现Excel高难度报表的生成(一) 使用Aspose.Cell控件 ...

  4. HQChart使用教程5- K线图控件操作函数说明

    K线图控件操作函数说明 周期切换 切换股票 切换指标 增加一个窗口指标 AddIndexWindow indexName option 增加一个自定义通达信脚本指标窗口 AddScriptIndexW ...

  5. Delphi XE2 新控件 布局Panel TGridPanel TFlowPanel

    Delphi XE2 新控件 Firemonkey 布局Panel Windows平台VCl TGridPanel TFlowPanel FMX 跨平台 TLayout TGridLayout TFl ...

  6. 五、QPushButton按钮和QLineEdit控件操作

    在第四节基础上,下面来进行QPushButton按钮和QLineEdit控件操作. 1.在主界面添加三个QLineEdit编辑框(其控件对象依次为lineEditNum1.lineEditNum2.l ...

  7. C#下使用第三方开源控件读取Excel文件的内容

    使用了两个开源控件读取Excel文件的内容,不需要安装Excel或Office,开发环境可能需要vs2008(2005没测试过) NPOI,       读取xls文件(Excel2003及之前的版本 ...

  8. 206_QT_功能实现代码、界面控件操作代码分开实现,很不错【采用了Q_CLASSINFO、Q_PROPERTY、setProperty对控件设置属性、qobject_cast】

    动图: setProperty对控件设置属性,用于判断是哪一个控件,很巧妙 使用qobject_cast,对类指针进行下行转换,也很不错 qperson.h–年龄增加功能实现 #ifndef QPER ...

  9. C#自带控件实现圆形led指示灯

    C#自带控件实现圆形led指示灯 前段时间做项目需要用到圆形指示灯,在网上找了很久都没找到需要的,有说用用户自定义控件自己画一个,有说直接用按钮做指示灯,只是按钮的话,四方形的,不好看.下载了一个圆形 ...

  10. Delphi常用通讯控件的应用札记

    Delphi常用通讯控件的应用札记 1.SPComm串口控件 2.TClientSocket

最新文章

  1. 如何快速设计元器件原理图库和PCB封装库?
  2. dp背包九讲(待补充,暂时前两讲)
  3. java微信群自动回复_微信自动回复机器人选哪个好?参考这四点
  4. linux下根据进程查找文件启动文件
  5. nginx作为tcp代理 虚拟主机配置 模板
  6. JSON数据格式以及与后台交互数据转换实例
  7. mysql创建表属性引_【学习之Mysql数据库】mysql数据库创建表的属性详解
  8. 一个秒杀系统,居然比八股文还好使!
  9. python 并发编程 多线程 event
  10. Key ssd_300_vgg/block3_box/L2Normalization/gamma not found in checkpoint的解决方案
  11. 移动端适配的理解——REM方案
  12. 怎么用计算机算一元三次方程,一元三次方程计算器求解(附使用方法)
  13. react-native 轮播组件 looped-carousel使用介绍
  14. Bootstrap系列之进度条(Progress)
  15. c++、7-5 估算数学常数e的值
  16. eclipse的plugins导入hadoop-eclipse-plugin-2.6.0.jar后Preference下没有hadoop Map/Reduce的解决方法
  17. 名字生成器 php,中文名字随机生成器
  18. this is a prerequisite condition to test whether the packagecompat-libstdc++-33-3.2.3-61.x86_64
  19. word中运行Mathtype报错问题解决方案(The MathType DLL cannot be found)
  20. openlayers 显示闪烁的图标点

热门文章

  1. java审批流_activiti实现工作流审批
  2. 如何批量将多个 Txt、Json、Html 以及记事本等文本文档快速合并成一个文档
  3. 3d建模师是吃青春饭的吗?混子上限也就8K,资历能力都很重要
  4. D5从零开始学Flash游戏开发系列教程
  5. 计算机系统基础第二版_2020年注册环保工程师公共基础考试题库
  6. 小马哥讲Spring核心编程思想 - 第二章 重新认识IoC
  7. Codesys提示【CmContainer/Wibukey runtime system is not installed】的解决方法
  8. 中望cad2012专业破解版
  9. SSM项目实战之十四:分页实现
  10. 项目管理project模板_项目管理常用的10张图表推荐