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;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相关推荐
- 使用GemBox.Spreadsheet控件操作Excel文件
最近在给cc帮忙做一个客户账单处理的小工具,需要打开xls编辑处理后再另存自定义样式的新xls文件,无意间发现了GemBox的这个控件,简直不能好用更多啊,就一个dll导入后不管目标机器上是否安装Ex ...
- C# 使用微软自带控件导出excel
导出excel:使用微软默认的dll,通过点击导出按钮启用js的open方法新建出一个ashx页面将文件导出到浏览器进行下载,此处放出部分代码以大概表示出顺序,完整代码见https://www.cnb ...
- 使用Aspose.Cell控件实现Excel高难度报表的生成(三)
在之前几篇文章中,介绍了关于Apsose.cell这个强大的Excel操作控件的使用,相关文章如下: 使用Aspose.Cell控件实现Excel高难度报表的生成(一) 使用Aspose.Cell控件 ...
- HQChart使用教程5- K线图控件操作函数说明
K线图控件操作函数说明 周期切换 切换股票 切换指标 增加一个窗口指标 AddIndexWindow indexName option 增加一个自定义通达信脚本指标窗口 AddScriptIndexW ...
- Delphi XE2 新控件 布局Panel TGridPanel TFlowPanel
Delphi XE2 新控件 Firemonkey 布局Panel Windows平台VCl TGridPanel TFlowPanel FMX 跨平台 TLayout TGridLayout TFl ...
- 五、QPushButton按钮和QLineEdit控件操作
在第四节基础上,下面来进行QPushButton按钮和QLineEdit控件操作. 1.在主界面添加三个QLineEdit编辑框(其控件对象依次为lineEditNum1.lineEditNum2.l ...
- C#下使用第三方开源控件读取Excel文件的内容
使用了两个开源控件读取Excel文件的内容,不需要安装Excel或Office,开发环境可能需要vs2008(2005没测试过) NPOI, 读取xls文件(Excel2003及之前的版本 ...
- 206_QT_功能实现代码、界面控件操作代码分开实现,很不错【采用了Q_CLASSINFO、Q_PROPERTY、setProperty对控件设置属性、qobject_cast】
动图: setProperty对控件设置属性,用于判断是哪一个控件,很巧妙 使用qobject_cast,对类指针进行下行转换,也很不错 qperson.h–年龄增加功能实现 #ifndef QPER ...
- C#自带控件实现圆形led指示灯
C#自带控件实现圆形led指示灯 前段时间做项目需要用到圆形指示灯,在网上找了很久都没找到需要的,有说用用户自定义控件自己画一个,有说直接用按钮做指示灯,只是按钮的话,四方形的,不好看.下载了一个圆形 ...
- Delphi常用通讯控件的应用札记
Delphi常用通讯控件的应用札记 1.SPComm串口控件 2.TClientSocket
最新文章
- 如何快速设计元器件原理图库和PCB封装库?
- dp背包九讲(待补充,暂时前两讲)
- java微信群自动回复_微信自动回复机器人选哪个好?参考这四点
- linux下根据进程查找文件启动文件
- nginx作为tcp代理 虚拟主机配置 模板
- JSON数据格式以及与后台交互数据转换实例
- mysql创建表属性引_【学习之Mysql数据库】mysql数据库创建表的属性详解
- 一个秒杀系统,居然比八股文还好使!
- python 并发编程 多线程 event
- Key ssd_300_vgg/block3_box/L2Normalization/gamma not found in checkpoint的解决方案
- 移动端适配的理解——REM方案
- 怎么用计算机算一元三次方程,一元三次方程计算器求解(附使用方法)
- react-native 轮播组件 looped-carousel使用介绍
- Bootstrap系列之进度条(Progress)
- c++、7-5 估算数学常数e的值
- eclipse的plugins导入hadoop-eclipse-plugin-2.6.0.jar后Preference下没有hadoop Map/Reduce的解决方法
- 名字生成器 php,中文名字随机生成器
- this is a prerequisite condition to test whether the packagecompat-libstdc++-33-3.2.3-61.x86_64
- word中运行Mathtype报错问题解决方案(The MathType DLL cannot be found)
- openlayers 显示闪烁的图标点
热门文章
- java审批流_activiti实现工作流审批
- 如何批量将多个 Txt、Json、Html 以及记事本等文本文档快速合并成一个文档
- 3d建模师是吃青春饭的吗?混子上限也就8K,资历能力都很重要
- D5从零开始学Flash游戏开发系列教程
- 计算机系统基础第二版_2020年注册环保工程师公共基础考试题库
- 小马哥讲Spring核心编程思想 - 第二章 重新认识IoC
- Codesys提示【CmContainer/Wibukey runtime system is not installed】的解决方法
- 中望cad2012专业破解版
- SSM项目实战之十四:分页实现
- 项目管理project模板_项目管理常用的10张图表推荐