delphi操作excel高手请进,怎样返回excel中已有数据的最后一行的行数(100分)

  • 主题发起人 主题发起人 lmeagle01
  • 开始时间 开始时间
L

lmeagle01

Unregistered / Unconfirmed
GUEST, unregistred user!
我想在已有数据的excel中追加数据,所以必须知道末尾的行数,然后再追加数据,不想用循环来一个个判断单元格是否为空,请问那位高手知道,本人愿100相赠
 
怎么都没有人会吗,高手都哪里去了?
 
我给你研究以下啊,等。。。。。。。
 

Adoquery1.sql.add('select * from [sheet1]');
Adoquery1.open
adoquery1.append
 
高守,我是想返回某一行为空的excel行数和列数,如excelworksheet1.cells.item[7,1],假如一行全为空,你的方法可能行(我还没试验,等我试验一下),但如我想判断某一列的某行为空,则在此列此行后,追加数据,你的方法就不行了,能不能为我更详细的操作代码,有实例最好,其他的高手也请多帮忙!!
 
我觉得高守的法子不错呀?
 
则在此列此行后,追加数据,这是什么意思?
我觉得 用 高守的法子没问题,如果还遇到其他的问题那是基础问题
另外什么叫某一列的某行?
我以前 弄这个的时候 比这个复杂多了,
 
[h1]不行呀,总出错,我把详细信息那来了,高手帮看看[/h1]
[h2]因为有23口井的数据,一个为汇总excel文件,每个sheet记录一口井的数据(井一sheet名为MUDI 1,井二sheet名为MUDI 2,以此类推),
另有若干日报excel,将每日的日报excel文件(一个sheet,有23行,每行记录一口井的数据),我用如下程序实现将日报中的各口井数据,
导到汇总excel文件的相应位置上,主要程序如下:
for i:=1 to 23 do//23口井
begin
For j:=1 to ExcelWorkBook2.Worksheets.Count do
begin //strtoint()是用来取井数的,从一一直到23
if i=strtoint(trim(copy(trim((ExcelWorkBook2.Worksheets.Item[j] as _WorkSheet).Name),6,2))) then//将日报中井号的数据,拷到对应上的动态excel sheet下
begin
ExcelWorksheet2.ConnectTo(ExcelWorkBook2.Worksheets.Item[j] as _WorkSheet);
ExcelWorksheet2.Activate;//将要导出数据的日报sheet设为缺省的打开sheet.
//下面是程序判断excel中是否为空的字段(用高守的方法)
ADOQuery1.Close;
ADOQuery1.SQL.Clear; //下面是取打开的sheet名
ADOQuery1.sql.add('select * from [(ExcelWorkBook2.Worksheets.Item as _WorkSheet).Name]');
ADOQuery1.open ;//到此处出错,错误信息为:Missing Connection or ConnectionString
end;
end;
if trim(copy(trim(excelworksheet1.cells.item[7+i,1]),6,2))='1' then //如果井号是1
begin
ADOQuery1.append ;
ADOQuery1.FieldValues['1']:='哈哈哈';//添加赋值语句
ADOQuery1.Post; //保存
end
else if trim(copy(trim(excelworksheet1.cells.item[7+i,1]),6,2))='2' then //如果井号是2
begin

end;
end;[/h2]
 
uses OleServer, ComObj;
var X: Variant;
begin
X:=CreateOLEObject('Excel.Application');//创建对象
X.WorkBooks.Open(XLSName);//打开指定的表
Gauge1.MaxValue:=X.ActiveSheet.usedRange.Rows.count;
showmessage(Format('总行数=%d',[Gauge1.MaxValue]);
end;
 
wangzhi2,你那种方法是返回excel总的行数吧,我只想在一个已有数据的excel文件后面,追加数据,你看看我的说明。
高手都那去了,谁能帮我呀,最好有详细代码,谢谢了!!
 
高手都那去了,这个问题这么久都没有一个人能真正给解决,太离谱了吧,哎,想给分竟然没人呀:(
 
高手呀,快来吧,100分不够,我再加
 
这个问题很难吗?怎么没人回答呀,哎,灌水也行呀[:(]
 
你可以试试把excel文件导入stringgrid中,或变成其他格式,算出末行来
 
设一个全局变量,每次向excel加数据后赋值,此值为每次excel操作的总行数
 
to xiaolingzh5,变成什么格式呀,我就是没办法,才求助大家的呀,大家帮我处处注意吧
to yanghx_yhx,你的那种方法有局限性,因为我是将日报数据导到月报中去,而且是一个日报的数据包含23口井的所有日报数据,将他到导月报表中,而月报一个sheet代表一个井(也就是有23个sheet),你那种方法要求系统始终在运行,或者将全局变量存在某文件中,但他不灵活,处理我这种情况很麻烦,谁由好方法,直接能获得excel的非空的最末一行行数!
 
begin
ExcelWorksheet2.ConnectTo(ExcelWorkBook2.Worksheets.Item[j] as _WorkSheet);
ExcelWorksheet2.Activate;//将要导出数据的日报sheet设为缺省的打开sheet.
//下面是程序判断excel中是否为空的字段(用高守的方法)
ADOQuery1.Close;
ADOQuery1.SQL.Clear; //下面是取打开的sheet名
ADOQuery1.sql.add('select * from [(ExcelWorkBook2.Worksheets.Item as _WorkSheet).Name]');
ADOQuery1.open ;//到此处出错,错误信息为:Missing Connection or ConnectionString
end;
这段代码是可以的,但 高守 没有给你全部信息,
没有给你连接字符串,你改成这样:
begin
ExcelWorksheet2.ConnectTo(ExcelWorkBook2.Worksheets.Item[j] as _WorkSheet);
ExcelWorksheet2.Activate;//将要导出数据的日报sheet设为缺省的打开sheet.
//下面是程序判断excel中是否为空的字段(用高守的方法)
ADOQuery1.Close;
ADOQuery1.connectionstring:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source=G:/mysmallexe/excel2sql/yp.xls;Extended Properties=excel 8.0';
ADOQuery1.SQL.Clear; //下面是取打开的sheet名
ADOQuery1.sql.add('select * from [(ExcelWorkBook2.Worksheets.Item as _WorkSheet).Name]');
ADOQuery1.open ;//到此处出错,错误信息为:Missing Connection or ConnectionString
end;
 
谢谢chenshaizi,程序行得通了。但是新的问题又来了,当open我的excel文件中一个sheet(共23个sheet)时,足足用了一分多钟,而以后我的数据量肯定是虽时间增加的,那岂不是更慢,何况只是一个sheet,而且这种open的方法它区分不了有空值的数据行(他会认为那有数据,不过这个问题不大),谁有更好的办法呀,也希望大家多提建议,都来讨论一下,多提宝贵意见,谢谢!!
 
怎么又没有人回答了?高手何在呀?[?]
 
如果闲分不够,本人可以再加!
 
后退
顶部