XlsReadWriteII EXCEL Cell 单元数据读写
下面从编程的眼光,从XlsReadWriteII的角度,谈谈EXCEL的理解。回顾一下EXCEL发展史:
1982年:微软推出了它的第一款电子表格软件:Multiplan。
1985年:推出了EXCEL for Mac。
1987年:推出了EXCEL 2 for windows。
1990年:推出Excel3。
1992年:推出Excel4。
1993年:推出Excel5,从此EXcel捆绑到了Microsoft office,Excel开始支持VBA(宏)。
1995年:推出了Excel95,亦称Excel 7。
1997年:推出了Excel97,亦称Excel 8。
1999年:推出Excel2000,亦称Excel 9。
2001年:推出Excel2001,亦称Excel 10。
2003年:推出Excel2003,亦称Excel 11。
2006年:推出Excel2007,亦称Excel 12。
2010年:推出Excel2010,亦称Excel 14。
2013年:推出Excel2013 - Microsoft Office 2013 亦称Office15。
2016年:推出Excel2016 - Microsoft Office 2016 亦称Office16。
2019年:推出Excel2019 - Microsoft Office 2019 亦称Office17。
2020年:推出Excel2020 - Microsoft Office 2020 亦称Office18。
2021年:推出Excel2021 - Microsoft Office 2021 亦称Office19。
2022年:推出Excel2022 - Microsoft Office 2022 亦称Office20。
.....
以上,最关键的二个版本,分别是Excel 97和Excel 2007。
Excel97,文件后缀名: .xls;
Excel2007,文件后缀名: .xlsx;
后续版本文件后缀名都是: .xlsx。
从编程运用的角度,在软件的运用上,绝大多数软件都支持Excel97和Excel2007这二个版本。
XlsReadWriteII(1-4)仅支持Excel97-2003,从XlsReadWriteII5开始支持Excel2007。这二个版本,是软件使用最多的版本。
EXCEL文件是个二进制文件,内部数据是以类似XML。文件结构上是类似树的结构,根部是簿XLS,分支下属诺干个表Sheets。每个表,双由列、行阵列结构的单元Cell组成。各个表之间可以,调用数据。
从编程的角度,就是对EXCEL进行读(原ECXEL文件)、写(创建EXCEL文件)操作。
一、EXCEL
这是EXCEL的根,主要记载EXCEL相关的属性。例如:页面、打印机等属性。
var XLS:TXLSReadWriteII5;
begin
XLS:=TXLSReadWriteII5.Create(Sender);
XLS.Version := xvExcel2007; // 版本 xvExcel97 Excel2007
end;
二、Sheets
这是EXCEL的分支,至少一个、或多个。
Sheets是组成数据集的场所。
Sheets结构,就是Cell的阵列
// 页面参数
XLS.Sheets[0].PrintSettings.papersize:=psA4; // A4纸
XLS.Sheets[0].PrintSettings.MarginTopCm:=1; // 顶边距
XLS.Sheets[0].PrintSettings.MarginLeftCm:=1; // 左边距
XLS.Sheets[0].PrintSettings.MarginRightCm:=1; // 右边距
XLS.Sheets[0].PrintSettings.MarginBottomCm:=1; // 底边距
XLS.Sheets[0].Zoom:=percent; // 浏览显示比例
// 初始化 Sheet1
XLS.Sheets[0].Name:= '表一'; // 给工作表命名
三、Cell
Cell是构建Sheets的基础,它包含了数据集的基础数据,以及Cell的相关属性。
(一)指定Cell的二种方式
1、单元格名称,这是EXCEL的通用命名方式
(1)列名由A-Z,26个英文大写字母,组建的26进制序列文字。例如,第1列是A,第26列是Z,第27列是AA。
(2)行名由1-0。10个数字,组建10进制数字。注意第1行是1。
注意:编程的序列是,0-(n-1)切记。
(3)Cell命名:列名+行名。例如:A1指定第1列第1行,C4指定第1列第1行,
例如:A1 C8 X12
With XLS.Sheets[0].Range.ItemsRef['A1:G1'] do // 合并单元
begin
.......
end;
2、使用列与行的序列号,这是编辑通行的方式
Col、Row,指定Cell位置,序列0-(n-1),n是列或行的总数。
这是按编程语言习惯的命名方式:
(1)列名序列为0-(n-1),首列0,尾列n-1。例如,第1列是0,第26列是25,第27列是26。
(2)行名序列为1-(n-1),首行0,尾行 n-1。例如,第1列是0,第10列是9,最后一列是n-1。
(3)Cell命名:直接指定列、行的序列号。例如:
XLS.Sheets[0].AsFloat[iCol,iRow]:= 0.001;
3、指定Cell的位置
在编程时,函数指定Cell的值,有的参数是Cell的字符名称,有的是Col和Row的值:
(1)字符名称(单元格名称)指定区域
With XLS.Sheets[0].Range.ItemsRef['A1:T1'] do // 通过2个Cell,指定Cell区域
(2)使用Col、Row,指定Cell位置
XLS.Sheets[0].AsFloat[iCol,iRow]:= 0.001; // 指定Cell
(3)使用二个Cell的Col、Row,指定区域
with XLS.Sheets[0].MergedCells.Add do
begin
iMergedCol1:=0; // 第1列
iMergedRow1:=2; // 第3行
iMergedCol2:=4; // 第5列
iMergedRow2:=6; // 长7行
end;
四、实际操作
声明以下参数:
var iColLast, // 最后一列
iColNow, // 当前操作的列
iRowNow, // 当前操作的行
iCol1, // 操作区域Cell1的列
iCol2, // 操作区域Cell1的行
iRow1, // 操作区域Cell2的列
iRow2 : integer; // 操作区域Cell2的行
在编程时,对Cell的操作,从首列、首行开始,按部就班进行。
begin
iColLast:=15; // 指定有效列数
iColNow:=0; // 从首列开始
iRowNow:=0 // 从首行开始
......
iRowNow:=iRowNow+1; // 从首行开始
iColNow:=0; // 从首列开始
for i:=0 to iColLast-1 do // 循环列序列
begin
......
iColNow:=iColNow+1; // 从首行开始循环
// or i 列的序列号
......
end;
end;
待续