操作excel
如何从a.xls中的sheet1复制内容到b.xls中的sheet2中?
还有怎么取得sheet的名字?
谢谢!
问题点数:20、回复次数:2Top
1 楼PrettyMurphy(土豆)回复于 2006-03-14 10:14:53 得分 20
我原来写的一个函数,你可以参考一下:
////////////////////////////////////////////////////////////////////
//相关说明: //
// EApp为EXCEL对象 //
// EBook为EXCEL文件对象 //
// ESheet为EXCEL文件页面对象 //
// EBook.Worksheets.Count 描述页数 //
// EBook.Worksheets[页] as _Worksheet 描述指定页 //
// ESheet.UsedRange[LocID].Columns.Count 描述当前页列数 //
// ESheet.UsedRange[LocID].Rows.Count 描述当前页行数 //
// ESheet.Cells.Item[行,列].Value 描述当前页指定单元格值 //
////////////////////////////////////////////////////////////////////
function GetXLS(aFile:String):TStrings; //检索EXCEL文件.
var EApp: TExcelApplication;
EBook: TExcelWorkbook;
ESheet: TExcelWorksheet;
LocID:LCid;
// ExcelApp:Variant;
reStr:TStrings;
i,j,s,t:Integer;
tmpStr:TStrings;
begin
reStr:=TStringList.Create;
tmpStr:=TStringList.Create;;
LocID:=GetUserDefaultLCID;
//LocID:=0;
EApp:=TExcelApplication.Create(nil);
EBook:=TExcelWorkbook.Create(nil);
ESheet:=TExcelWorksheet.Create(nil);
Try
Try
Try
EApp.Connect;
EApp.Visible[LocID]:=False;
Except
//不做处理.
LogDataList.Add('***警告***:['+TimeToStr(Time())+']'+'在提取:'+aFile+'时,EXCEL OLE对象出现异常,已忽略!');
end;
EApp.Workbooks.Open(aFile,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,LocID);
EBook.ConnectTo(EApp.Workbooks.Item[1] as _Workbook);
//EBook.ConnectTo(EApp.Workbooks.Open(aFile,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,LocID) as _Workbook);
Except
//EApp.Quit; //出问题再次尝试连接
EApp.Disconnect;
EApp.Free;
LogDataList.Add('***警告***:['+TimeToStr(Time())+']'+'在提取:'+aFile+'时,EXCEL OLE对象连接异常,已中断重新连接!');
Try
EApp:=TExcelApplication.Create(nil); //重构连接.
LocID:=GetUserDefaultLCID;
EApp.Connect;
EApp.Visible[LocID]:=False;
EApp.Workbooks.Open(aFile,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,LocID);
EBook.ConnectTo(EApp.Workbooks.Item[1] as _Workbook);
Except //再次发生错误,则退出.
LogDataList.Add('***错误***:['+TimeToStr(Time())+']'+'在提取:'+aFile+'时出现严重错误:被调用的对象已与其客户断开连接,已跳过!');
MessageBox(Application.Handle,PChar('在提取:'+aFile+'文件时出错,单击确认跳过!'),'错误',MB_ICONERROR+MB_OK);
Result:=reStr;
Exit;
end;
end;
for s:=1 to EBook.Worksheets.Count do begin
ESheet.ConnectTo(EBook.Worksheets[s] as _Worksheet); //设定指定页
MainFrm.RefInit(ESheet.UsedRange[LocID].Rows.Count*ESheet.UsedRange[LocID].Columns.Count);
for i:=1 to ESheet.UsedRange[LocID].Rows.Count do //循环行
for j:=1 to ESheet.UsedRange[LocID].Columns.Count do begin //循环列
if StopFlag then begin
Result:=reStr;
MainFrm.RefInitB;
Exit;
end;
tmpStr:=IsPhone(ESheet.Cells.Item[i,j].Value);
for t:=0 to tmpStr.Count-1 do begin
//reStr.Add(tmpStr.Strings[t]);
MainFrm.RefSystemA(tmpStr.Strings[t]);
end;
end;
ESheet.Disconnect;
end;
Except
ON E:Exception DO LogDataList.Add('***错误***:['+TimeToStr(Time())+']'+'在提取:'+aFile+'时,读取单元格出现错误:'+E.Message+',已跳过!');
//ON E:Exception DO ShowMessage(E.Message);
end;
ESheet.Disconnect;
EBook.Disconnect;
EApp.Quit;
EApp.Disconnect;
Result:=reStr;
reStr.Free;
end;Top
2 楼biao_227(飙)回复于 2006-03-14 11:34:13 得分 0
楼主信誉值好像有问题啊.
Top




