Delphi操作Excel(1) ---获取excel的行数和列数

说明:

      程序中使用OLE来操作EXCEL。需要在uses中写上ComObj.

 

使用属性来获取行数和列数:

     使用代码1提供的代码获取的excel中的行数和列数,不包括开头的空行和空列。

 

1    TemperMaxRows   : =  ExcelApp.worksheets[ 1 ].Usedrange.Rows.count;    { 代码1 }
2    TemperMaxcolumns: =  ExcelApp.worksheets[ 1 ].Usedrange.columns.count;

包含开头空行和空列的行数和列数:

    如果想获得最大行数(列数),需要在程序中去判断。

判断方法:

    1、先假设TemperMaxRows为最大行,然后去判断每一列的元素是否都为非空,如果有一列全部为空,则列数加1,最终得到实际的最大列数

    2、根据计算到的实际最大列数,然后去判断每一行的元素是否都为非空,如果有一行全部为空,则行数加1,最终得到实际的最大行数。

代码示例:

  1  unit  Unit1;
  2 
  3  interface
  4 
  5  uses
  6    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7    Dialogs, Grids, Menus,ComObj;
  8 
  9  type
 10    TForm1  =   class (TForm)
 11      strngrd1: TStringGrid;
 12      mm1: TMainMenu;
 13      File1: TMenuItem;
 14      Open1: TMenuItem;
 15      dlgOpen1: TOpenDialog;
 16      ExcelFile1: TMenuItem;
 17      Open2: TMenuItem;
 18       procedure  Open2Click(Sender: TObject);
 19       procedure  FormClose(Sender: TObject;  var  Action: TCloseAction);
 20     private
 21       {  Private declarations  }
 22     public
 23       {  Public declarations  }
 24     end ;
 25 
 26  var
 27    Form1: TForm1;
 28    ExcelApp : Variant;
 29    FileDirectory: string ;
 30 
 31  implementation
 32 
 33  { $R *.dfm }
 34 
 35  procedure  TForm1.FormClose(Sender: TObject;  var  Action: TCloseAction);
 36  begin
 37    ExcelApp.WorkBooks.Close;
 38    ExcelApp.quit;
 39  end ;
 40 
 41 
 42  procedure  TForm1.Open2Click(Sender: TObject);
 43  var
 44    i,j:Integer;
 45    tempermaxRow,maxRow:Integer;
 46    tempermaxcolumn,maxcolumn : Integer;
 47    flag:Boolean;
 48  begin
 49    dlgOpen1.Execute;
 50    FileDirectory : =  dlgOpen1.FileName;  { 获取文件的路径名 }
 51    Text : =  FileDirectory;
 52    ExcelApp : =  CreateOleObject(  ' Excel.Application '  );
 53  {  ExcelApp.Visible := True; }
 54    ExcelApp.workbooks.Open( ' E:\我的文档\Delphi程序\Delphi操作excel\book1.xls ' );
 55 
 56     for  I : =   01   to   20   do   { 读取excel中的数据 }
 57      strngrd1.Cells[ 1 ,i] : =  ExcelApp.cells[i, 2 ];   { excel单元格不是从[0,0]开始的 }
 58 
 59     { 获取数据中的使用的行数和列数,如果开头的行(列)内容全为空,则不计算到总数内。 }
 60     tempermaxRow : =   ExcelApp.worksheets[ 1 ].Usedrange.Rows.count;
 61     tempermaxcolumn : =  ExcelApp.worksheets[ 1 ].Usedrange.columns.count;
 62       ShowMessage(Format( ' 程序中获取的行数:%d,程序中获取的列数%d ' ,[tempermaxRow,tempermaxcolumn]));
 63       Maxcolumn : =  tempermaxcolumn;
 64       maxRow : =  tempermaxRow;
 65       flag : =  false;
 66     for  i  : =   1   to  tempermaxcolumn   do
 67       begin
 68         for  j : =   1   to  maxRow  do
 69           begin
 70             if  ExcelApp.cells[j,i].value  <>   ''   then
 71             begin
 72              flag : =  True;
 73              Continue;
 74             end ;
 75           end ;
 76         if  (flag  =  False)  then
 77          Maxcolumn : =  Maxcolumn  +   1 ;
 78       end ;
 79 
 80 
 81    flag : =  false;
 82     for  i  : =   1   to  tempermaxRow   do
 83       begin
 84         for  j : =   1   to  maxcolumn   do
 85           begin
 86             if  ExcelApp.cells[i,j].value  <>   ''   then
 87             begin
 88              flag : =  True;
 89              Continue;
 90             end ;
 91           end ;
 92         if  (flag  =  False)  then
 93          maxRow : =  maxRow  +   1 ;
 94       end ;
 95 
 96  { 将空行也计算到总数内 }
 97    ShowMessage(Format( ' 实际行数:%d,实际列数%d ' ,[maxRow,Maxcolumn]));
 98  end ;
 99 
100  end .
101 

 后续文章:

    Delphi操作Excel(2) ---Stringgrid导出到Excel

转载于:https://www.cnblogs.com/dabiao/archive/2009/12/09/1620667.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值