失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Delphi OLE方法操作Excel

Delphi OLE方法操作Excel

时间:2022-03-24 01:16:08

相关推荐

Delphi OLE方法操作Excel

Delphi OLE方法操作Excel

来源:/ceshi/ruanjianceshikaifajishu/rjcskfyy//0519/154269.html

引用下面单元文件

Uses ComObj, Variants;

首先创建Excel对象,使用ComObj:

varExcelApp:Variant;

ExcelApp:=CreateOleObject(’Excel.Application’);

注意程序结束时释放变量ExcelApp:=unassigned;

1显示当前窗口:ExcelApp.Visible:=True;

2更改Excel标题栏:ExcelApp.Caption:=’应用程序调用MicrosoftExcel’;

3添加新工作簿:ExcelApp.WorkBooks.Add;

4 添加工作表ExcelApp.WorkSheets.add;

5打开已存在的工作簿:ExcelApp.WorkBooks.Open(’C:ExcelDemo.xls’);

6设置第2个工作表为活动工作表:

ExcelApp.WorkSheets[2].Activate;或ExcelApp.WorksSheets[’Sheet2’].Activate;

【导出Excel范例】

来源: /question/154677351.html

procedure QueryToExcel(Q:TAdoQuery;Tit:string;FileName:string);

var

XlApp,XlWorkbook,XlSheet:Olevariant;

i,j:integer;

Range:OleVariant;

begin

Try

XlApp:=createOleObject('Excel.Application');

XLApp.visible:=false;

XlWorkbook:=XlApp.workbooks.add;

XlSheet:=Xlworkbook.sheets.add;

except

showmessage('你还没有安装Microsoft Excel,请先安装!');

XlApp.Quit;

XlSheet:=Unassigned;

XlWorkbook:=Unassigned;

Xlapp:=Unassigned;

exit;

end;

for i:=0 to Q.FieldCount-1 do

begin

Xlsheet.Cells[1,i+1]:=Q.Fields[i].DisplayName ;

end;

for i:=1 to Q.RecordCount do

begin

for j:=0 to Q.FieldCount -1 do

begin

if ((j=0) or (j=6) or (j=22)) and (Q.Fields[j].AsString<>'') then

Xlsheet.cells[i+1,j+1]:=''''+Q.Fields[j].Asstring else

Xlsheet.cells[i+1,j+1]:=Q.Fields[j].AsString;

end;

Q.Next;

end;

Xlsheet.rows[1].insert;

Range:=Xlsheet.range[XlSheet.cells[1,1],XlSheet.cells[1,Q.FieldCount-DelCollist.count]];

Range.merge;

Range.HorizontalAlignment:= xlCenter;

Range.VerticalAlignment:= xlCenter;

Range.WrapText:=true;

Range.Font.size:=14;

Xlsheet.cells[1,1]:=Tit;

Xlsheet.Columns.EntireColumn.AutoFit;

if FileExists(FileName) then

begin

if MessageDlg('文件已经存在,要替换吗?',mtConfirmation,[mbyes,mbno],0)=mrno then

begin

XlApp.Quit;

XlSheet:=Unassigned;

XlWorkbook:=Unassigned;

Xlapp:=Unassigned;

exit;

end;

end;

try

XlWorkbook.SaveAs(FileName);

except

showmessage('导出失败,请检查你对该文件是否有写权限!');

XlApp.Quit;

XlSheet:=Unassigned;

XlWorkbook:=Unassigned;

Xlapp:=Unassigned;

exit;

end;

showmessage('导出成功!请不要改动导出的Excel表中的列标题!否则将不能将该Excel表再导入!');

XlWorkBook.Saved:=true;

XlApp.Quit;

XlSheet:=Unassigned;

XlWorkbook:=Unassigned;

Xlapp:=Unassigned;

// XlSheet:=Unassigned;

// XlWorkbook:=Unassigned;

// XlApp:=Unassigned;

end;

慢慢看吧

调用这个过程

SaveDialog1.Filter:='Microsoft Excel|*.xls';

if SaveDialog1.Execute then

begin

if SaveDialog1.FileName <>'' then

begin

FilesName:=SaveDialog1.FileName;

TitleName:='XXXX基本信息表';

QueryToExcel(DataM.Qr_EquipmentDetails,TitleName,FilesName);

end;

end;

【导入Excel范例】

procedure TfrmExcelIO.btnOkClick(Sender: TObject);

var

sFileName: String;

ExcelApp:variant;

iRow, iCol: Integer;

sSql, sValue: String;

begin

sFileName := txtFile.Text;

if not FileExists(sFileName) then

begin

ShowMyMsg('系统提示', '导入文件不存在,请重新选择!');

Exit;

end;

//

Screen.Cursor := crHourGlass;

//

if radNew.Checked then

begin

TSqlProc.Execute('truncate table stk_TMHS');

end;

//

ExcelApp := CreateOleObject('Excel.Application');

ExcelApp.visible:=False;

ExcelApp.workbooks.open(sFileName);

//自适应宽度

ExcelApp.worksheets[1].Cells.EntireColumn.AutoFit; //整个表所有列

labNumber.Caption := '';

labNumber.Visible := True;

iRow := 3; //从第3行开始导入

try

while ExcelApp.worksheets[1].cells[iRow, 1].text <> '' do

begin

sSql := 'insert into stk_TMHS(Row, Tag, TaxState, OrdNo, CarNo, Model, CarInfo, BatteryBrand, Qty, MastHeight, ForkSize, Battery, BatteryCharger, TireType, Attachment, StockState, PONo, Remark) ' +

'Values(';

//有18列

for iCol := 1 to 18 do

begin

sValue := ExcelApp.worksheets[1].cells[iRow, iCol].text;

//

if iCol = 1 then

labNumber.Caption := sValue;

//

if not (iCol in [1, 9]) then

sValue := QuotedStr(sValue);

//

if iCol = 18 then

sSql := sSql + sValue + ')'

else

sSql := sSql + sValue + ',';

end;

//

TSqlProc.Execute(sSql);

//换一行

iRow := iRow + 1;

end;

//

labNumber.Visible := False;

ExcelApp.Activeworkbook.close(false);

ExcelApp.quit;

ExcelApp:=unassigned; //释放变量ExcelApp, 去掉Excel.exe的进程

Screen.Cursor := crHourGlass;

ShowMyMsg('系统提示', '导入完毕,共导入' + IntToStr(iRow - 3) + '行数据!');

except

labNumber.Visible := False;

ExcelApp.Activeworkbook.close(false);

ExcelApp.quit;

ExcelApp:=unassigned; //释放变量ExcelApp, 去掉Excel.exe的进程

Screen.Cursor := crHourGlass;

WarnMyMsg('系统提示', '导入第'+ IntToStr(iRow) + '行时出现错误, 请修正后再以追加模式导入!');

end;

//

Self.ModalResult := mrOk;

end;

如果觉得《Delphi OLE方法操作Excel》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。