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;
宏:
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;
相关文章推荐
- delphi调用C# WEB服务,参数传递问题 (转)
- 关于delphi 的函数调用和参数传递方式深入研究之疑惑
- Delphi动态事件深入分析(对象方法在调用的时候会传递一个隐含的Self指针,而该指针的值在EAX中。即左边第一个参数)
- 在SAP出口增强中调用自定义屏幕。如何进行参数传递
- 给定时器settimeout、setInterval调用传递参数
- java中调用存储过程并传递list集合参数的方法
- @selector 调用方法 传递多参数
- C#调用C++DLL,及回调函数、string参数传递的总结
- Delphi通过POST传递参数给PHP
- 调用oracle存储过程的例子,其参数的传递方法与SQLSERVER有区别注意区分
- 关于Java中方法调用时参数的传递
- 关于函数调用中参数传递的一些思考
- 关于C语言中函数调用和参数传递机制的探讨(三 .传递多个参数等)
- JAVA中函数调用参数传递的理解(值传递和引用传递的理解)
- JavaScript调用传递变量参数的相关问题及解决办法
- js调用方法传递变量作为参数的问题
- c++函数调用参数传递
- C# 调用带有复杂参数的C++ ,delphi dll 注意事项备注。(C++ dll 怎么回调C# 程序,参数怎么写?)
- Linux Debugging(三): C++函数调用的参数传递方法总结(通过gdb+反汇编)