我是这样与excel表建立关联的:
excelapp:=CreateOleObject('excel.application');
workbook:=CreateOleObject('excel.sheet');
workbook:=excelapp.workbooks.open(myexclefile);我这样写:workbook.columns.count,但提示workbook没有columns这个属性。另外,我在excel的宏编辑器中找到sheet1.columns.count,但是excel.sheets却没有columns这个属性,sheet1与excel.sheets有什末关系和不同呢?再有excel.application.columns.count统计出的是什末呢,我试过了,反正不是excel的列数。
excelapp:=CreateOleObject('excel.application');
workbook:=CreateOleObject('excel.sheet');
workbook:=excelapp.workbooks.open(myexclefile);我这样写:workbook.columns.count,但提示workbook没有columns这个属性。另外,我在excel的宏编辑器中找到sheet1.columns.count,但是excel.sheets却没有columns这个属性,sheet1与excel.sheets有什末关系和不同呢?再有excel.application.columns.count统计出的是什末呢,我试过了,反正不是excel的列数。
解决方案 »
- 提前祝大家51快乐!
- 关于如何用Delphi做自动升级软件? 急!!
- 请教高手,关于身份验证的问题
- fileopen
- 如何从SQL Server2000数据库中选择一个表,保存为Access数据库
- 在线等待:DBF数据库如何彻底删除一条已经做删除标记的记录
- 请教:为何多线程ado查询sql server7,效果没有明显的改善?而且保持连接在查竟然比查完了就free还要慢?!!!!!
- 关于鼠标的控制!
- 出差回来了~~高兴!!!散分~~~~~~
- 请问在ESMTP中的AUTH命令 client <--->server 是怎样具体交换的,用户名是怎样验证的请讲一讲具体原理和过程?
- 怎样可以用nmpop3接收邮件的附件,不管附件的文件格式是何格式,
- 用sql创建表的操作,用ADO的哪个组件比较好?
FieldCount参数是你的答案。
不要使用ExcelApp,速度很慢。
excel的列数从A~Z,AA~ZZ,列数目很大,
自编函数去测有数据的列数吧。
有意义的列应是在程式设计中预约的,
所以一般不会出现这种要求,
不知道为什么你一定要知道excel的列数?
1.假设该表的左上角在单元格 a1,并且该表中间没有空行和空列,则:
sheets['sheet1'].range['a1'].CurrentRegion.rows.count
返回该表的行数,Columns返回该表的列数2.可以利用VBA中的SpecialCells函数,返回一个 Range 对象,此对象代表与指定类型及
值相匹配的所有单元格,下面为其可用的常数:xlCellTypeAllFormatConditions 任意格式的单元格
xlCellTypeAllValidation 具有有效条件的单元格
xlCellTypeBlanks 空单元格
xlCellTypeComments 包含注释的单元格
xlCellTypeConstants 包含常量的单元格
xlCellTypeFormulas 包含公式的单元格
xlCellTypeLastCell 已用区域的最后一个单元格 /////××××//这个常数在确定范围最有用!
xlCellTypeSameFormatConditions 具有相同格式的单元格
xlCellTypeSameValidation 具有相同有效条件的单元格
xlCellTypeVisible 所有可见单元格 比如我们可以利用这个函数确定最后一个包含数据的单元格:
ExcelApp.WorkBooks.ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell,EmptyParam).Activate;
lastRow := ExcelApp.ActiveCell.Row;
lastCol := ExcelApp.ActiveCell.Column;在用Servers组件 和用 Use comobj 两种方法上调用VBA函数有所不同,前面的方法不能
省略常数(如上面的EmptyParam),但好处是可以直接用其常量(如xlCellTypeLastCell),
而后者则可省略一些默认常数(比如EmptyParam可不用写,不过不知道是不是对所有的都适用)
在不知道VBA函数一些参数是有这种方法比较好,可以像VBA那样直接调用,但也有个很大缺陷
就是不能直接用那些常量,而须是其直接代表的常数(所以有了上面的那张常用常量对照表)
var
filename:string;
ExcelApp: Variant;
lastrow,lastcol:integer;
begin
if importopendialog.Execute then
begin
filename:=importopendialog.FileName;
ExcelApp := CreateOleObject( 'Excel.Application' );
ExcelApp.Visible := false;
ExcelApp.WorkBooks.Open(filename);
ExcelApp.WorkSheets[1].Activate; ExcelApp.Cells.SpecialCells(11,EmptyParam).Activate;
lastRow := ExcelApp.ActiveCell.Row;
lastCol := ExcelApp.ActiveCell.Column;
showmessage(inttostr(lastrow));
showmessage(inttostr(lastcol)); ExcelApp.WorkBooks.Close;
ExcelApp.Quit;
end;
end;
--------------
ExcelApp.Cells.SpecialCells(11,EmptyParam).Activate;
中的11就是xlCellTypeLastCell的值