我是这样与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的列数。

解决方案 »

  1.   

    使用ADO连接Excel,就像对数据库中的表一样。
    FieldCount参数是你的答案。
    不要使用ExcelApp,速度很慢。
      

  2.   

    多谢 wyj1974(迷茫的帅哥),我知道用其它的方法能够实现,我也是帮忙朋友问的,他的程序已经写的差不多了,要再改的话不太可能了,我想知道使用excel.application怎样解决这个问题呢?
      

  3.   

    excel的列数与有数据的列数是不同的,
    excel的列数从A~Z,AA~ZZ,列数目很大,
    自编函数去测有数据的列数吧。
    有意义的列应是在程式设计中预约的,
    所以一般不会出现这种要求,
    不知道为什么你一定要知道excel的列数?
      

  4.   

    在其他地方看到的,没用过,你试试吧如何知道UsedRange的行数和列数?
    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那样直接调用,但也有个很大缺陷
    就是不能直接用那些常量,而须是其直接代表的常数(所以有了上面的那张常用常量对照表)
      

  5.   

    测试了一下,通过,可以得到已用的行数和列数procedure TForm1.Button1Click(Sender: TObject);
    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;
      

  6.   

    补充一下 xlCellTypeLastCell=11
    --------------
    ExcelApp.Cells.SpecialCells(11,EmptyParam).Activate;
      中的11就是xlCellTypeLastCell的值
      

  7.   

    多谢大家帮忙,尤其是cxreal(夜晚的猪),多谢!