您的位置:首页 > 编程语言 > Delphi

delphi 调用excel的宏,并传递参数给宏

2007-10-26 16:48 429 查看
excel单元格中要显示 换行的字符串,没有找到直接的方法,所以通过调用宏来实现
宏:


Sub Macro1(var1 As String, var2 As String)


'


' Macro2 Macro


' 宏由 liuin 录制,时间: 2007-10-26


'


ActiveCell.FormulaR1C1 = var1 + Chr(10) + var2


End Sub

delphi中调用
MySheet.Range['D13'].select;
xlapp.run('macro1','100以上'+qry1.Fields[0].AsString+'台','80以下'+qry1.Fields[1].AsString+'台');

完整代码:


function TFrmDBCZ_JH_FIND.Gen_BYQTSJBS(date: string): Boolean; //变压器台数及表数


var


j:Integer;


begin


filename := ExtractFilePath(Application.ExeName)+'报表模版变压器台数及表数.xls';


savefile := ExtractFilePath(Application.ExeName)+'报表'+copy(date,1,4)+'年'+copy(date,6,2)+'月变压器台数及表数.xls';


if FileExists(savefile) then


begin


if not DeleteFile(savefile) then


begin


ShowMessage('文件'+savefile+'可能被占用,请关闭文件重试');


Result := False;


Exit;


end;


end;


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


xlapp.Workbooks.Open(filename);


MyBooks := xlapp.workbooks[1];


//------------------------------------------------------------------------------


// 生成"sheet1"数据 根据月份修改sheet1的name属性


//------------------------------------------------------------------------------


MySheet := xlapp.workbooks[1].WorkSheets['sheet1'];


MySheet.Name :=Copy(date,1,4) + '.' + Copy(date,6,2) + '.20';


MySheet.Cells[1,1] := copy(date,1,4)+'年'+copy(date,6,2)+'月变压器及计量装置情况统计表';


MySheet.Cells[2,10] := FormatDateTime('yyyy年mm月dd日',Now);




sp_data.Close;


sp_data.ProcedureName := 'P_JH_BYQJLTJB';


sp_data.Parameters.Clear;


sp_data.Parameters.CreateParameter('@date',ftWideString ,pdinput,50,null);


sp_data.Parameters.ParamByName('@date').Value := date;


sp_data.ExecProc;


InitQuery('select * from 变压器及计量装置情况统计表',qry1);


for j := 4 to 11 do


begin


MySheet.Cells[j,2] := qry1.FieldByName('变压器数').AsInteger;


MySheet.Cells[j,3] := qry1.FieldByName('容量').AsInteger;




MySheet.Range['D'+inttostr(j)].select;


//excel中无法换行,用宏实现


xlapp.run('macro1','100以上'+qry1.FieldByName('ts1').AsString+'台','80以下'+qry1.FieldByName('ts2').AsString+'台');


MySheet.Cells[j,5] := qry1.FieldByName('电表数').AsInteger;


MySheet.Cells[j,6] := '低压远程表' + qry1.FieldByName('lbs1').AsString + '块,人工抄收表'+qry1.FieldByName('lbs2').AsString + '块,专线表'+qry1.FieldByName('lbs3').AsString+',块';


qry1.Next;


end;


InitQuery('select sum(ts1),sum(ts2),sum(lbs1),sum(lbs2),sum(lbs3) from 变压器及计量装置情况统计表',qry1);


MySheet.Range['D13'].select;


xlapp.run('macro1','100以上'+qry1.Fields[0].AsString+'台','80以下'+qry1.Fields[1].AsString+'台');


MySheet.Cells[13,6] := '低压远程表' + qry1.Fields[2].AsString + '块,人工抄收表'+qry1.Fields[3].AsString + '块,专线表'+qry1.Fields[4].AsString+',块';


//------------------------------------------------------------------------------


// 报表生成结束


//------------------------------------------------------------------------------




mybooks.saved := True;//如果要关闭某个已更改的工作簿,但又不想保存它或者不想出现保存提示


mybooks.saveas(savefile);


MyBooks.close;


xlapp.quit;


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


xlapp.Workbooks.Open(savefile);


xlapp.visible := True;


result := true;


end;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: