我原来写的一个函数,你可以参考一下: //////////////////////////////////////////////////////////////////// //相关说明: // // 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;
////////////////////////////////////////////////////////////////////
//相关说明: //
// 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;