下面是我的原码,当运行时错误提示
cell不支持动态对象,何解?高手指点!!!
procedure Tkfb_query.Button15Click(Sender: TObject);
var
range: Variant;
varexcel: Variant;
i,j,k :integer;
xxx1,xr:string;
begin
if(ListBox2.Items.Count=0) then
begin
Showmessage('没有选择目标字段!');
exit;
end;
if DM.kfb_hetongchaxun.Active =true then
begin
if DM.kfb_hetongchaxun.RecordCount >0 then
begin
Screen.Cursor:=crSqlWait;
kfb_query.StatusBar1.panels[0].text :='正在载入Excel,请稍候......';
kfb_query.StatusBar1.refresh;
try
Screen.cursor :=crHourGlass;
try
varexcel := createoleobject('excel.application');
if not varisempty(varexcel) then
begin
//添加工作簿
varexcel.Workbooks.add;
varexcel.Workbooks[1].worksheets[1].name :='合同信息';
end;
except
Showmessage('请确认是否安装Excel');
exit;
end;
begin
//写入标题
range :=varexcel.workbooks[1].worksheets[1].columns;
for i:=0 to kfb_query.ListBox2.items.count -1 do
begin
varexcel.workbooks[1].worksheets[1].cell[2,i+1].value := kfb_query.ListBox2.items.strings[i];// varexcel.workbooks[1].worksheets[1].cell[2,i+1] :=Trim(kfb_query.ListBox2.items[i]); varexcel.workbooks[1].worksheets[1].cell[2,i+1].Font.bold :=true;
// range.columns[i+1].columnwidth := DM.kfb_hetongchaxun.FieldByName(Trim(kfb_query.ListBox2.items[i])).Displaywidth;
range.columns[i+1].columnwidth := DM.kfb_hetongchaxun.FieldByName(kfb_query.ListBox2.items.strings[i]).Displaywidth;
range.columns[i+1].HorizontalAlignment :=xlCenter;
end;
///////////////
//循环写入数据
try
DM.kfb_hetongchaxun.first;
j :=3;
while not DM.kfb_hetongchaxun.eof do
begin
for i:=1 to DM.kfb_hetongchaxun.RecordCount do
begin
if varisnull(Trim(DM.kfb_hetongchaxun.FieldValues[Trim(kfb_query.ListBox2.items.strings[i])])) then
varexcel.workbooks[1].worksheets[1].cell[j,i+1].value :=''
else
varexcel.workbooks[1].worksheets[1].cell[j,i+1].value := Trim(DM.kfb_hetongchaxun.FieldValues[Trim(kfb_query.ListBox2.items.strings[i])]);
end;
DM.kfb_hetongchaxun.next;
j:=j+1;
end;
except
MessageDlg('导出Excel错误!',mtError,[mbOk],0);
Screen.Cursor:=CrDefault;
exit;
end;
// DM.kfb_hetongchaxun.e;
kfb_query.statusbar1.panels[0].text:='';
k:=i-1+ord('A');
xxx1 :=chr(k);
xxx1 :='A2:'+xxx1+inttostr(j-1);
//将数据表格画线
range := varexcel.workbooks[1].worksheets[1].range[xxx1];
range.borders.linestyle :=xlcontinuous;
k:=k+i-1+ord('A');
xxx1 :=chr(k);
xxx1 :='A1:'+xxx1+'1';
//数据标题列居中
range:= varexcel.workbooks[1].worksheets[1].range[xxx1];
range.HorizontalAlignment :=xlCenter;
range.verticalAlignment := xlCenter;
range.MergeCells :=true;
//对报表标题进行修饰
varexcel.workbooks[1].worksheets[1].range['a1:a1']:=kfb_query.title.Text;
varexcel.workbooks[1].worksheets[1].range['a1:a1'].Font.Name :='楷体';
varexcel.workbooks[1].worksheets[1].range['a1:a1'].Font.Size:='18';
varexcel.workbooks[1].worksheets[1].range['a1:a1'].Font.fontstyle :='bold';
varexcel.Visible :=true;
end;
except
ShowMessage('数据导出错误!');
end;
screen.cursor :=crArrow;
end;
end;
end;
end.
cell不支持动态对象,何解?高手指点!!!
procedure Tkfb_query.Button15Click(Sender: TObject);
var
range: Variant;
varexcel: Variant;
i,j,k :integer;
xxx1,xr:string;
begin
if(ListBox2.Items.Count=0) then
begin
Showmessage('没有选择目标字段!');
exit;
end;
if DM.kfb_hetongchaxun.Active =true then
begin
if DM.kfb_hetongchaxun.RecordCount >0 then
begin
Screen.Cursor:=crSqlWait;
kfb_query.StatusBar1.panels[0].text :='正在载入Excel,请稍候......';
kfb_query.StatusBar1.refresh;
try
Screen.cursor :=crHourGlass;
try
varexcel := createoleobject('excel.application');
if not varisempty(varexcel) then
begin
//添加工作簿
varexcel.Workbooks.add;
varexcel.Workbooks[1].worksheets[1].name :='合同信息';
end;
except
Showmessage('请确认是否安装Excel');
exit;
end;
begin
//写入标题
range :=varexcel.workbooks[1].worksheets[1].columns;
for i:=0 to kfb_query.ListBox2.items.count -1 do
begin
varexcel.workbooks[1].worksheets[1].cell[2,i+1].value := kfb_query.ListBox2.items.strings[i];// varexcel.workbooks[1].worksheets[1].cell[2,i+1] :=Trim(kfb_query.ListBox2.items[i]); varexcel.workbooks[1].worksheets[1].cell[2,i+1].Font.bold :=true;
// range.columns[i+1].columnwidth := DM.kfb_hetongchaxun.FieldByName(Trim(kfb_query.ListBox2.items[i])).Displaywidth;
range.columns[i+1].columnwidth := DM.kfb_hetongchaxun.FieldByName(kfb_query.ListBox2.items.strings[i]).Displaywidth;
range.columns[i+1].HorizontalAlignment :=xlCenter;
end;
///////////////
//循环写入数据
try
DM.kfb_hetongchaxun.first;
j :=3;
while not DM.kfb_hetongchaxun.eof do
begin
for i:=1 to DM.kfb_hetongchaxun.RecordCount do
begin
if varisnull(Trim(DM.kfb_hetongchaxun.FieldValues[Trim(kfb_query.ListBox2.items.strings[i])])) then
varexcel.workbooks[1].worksheets[1].cell[j,i+1].value :=''
else
varexcel.workbooks[1].worksheets[1].cell[j,i+1].value := Trim(DM.kfb_hetongchaxun.FieldValues[Trim(kfb_query.ListBox2.items.strings[i])]);
end;
DM.kfb_hetongchaxun.next;
j:=j+1;
end;
except
MessageDlg('导出Excel错误!',mtError,[mbOk],0);
Screen.Cursor:=CrDefault;
exit;
end;
// DM.kfb_hetongchaxun.e;
kfb_query.statusbar1.panels[0].text:='';
k:=i-1+ord('A');
xxx1 :=chr(k);
xxx1 :='A2:'+xxx1+inttostr(j-1);
//将数据表格画线
range := varexcel.workbooks[1].worksheets[1].range[xxx1];
range.borders.linestyle :=xlcontinuous;
k:=k+i-1+ord('A');
xxx1 :=chr(k);
xxx1 :='A1:'+xxx1+'1';
//数据标题列居中
range:= varexcel.workbooks[1].worksheets[1].range[xxx1];
range.HorizontalAlignment :=xlCenter;
range.verticalAlignment := xlCenter;
range.MergeCells :=true;
//对报表标题进行修饰
varexcel.workbooks[1].worksheets[1].range['a1:a1']:=kfb_query.title.Text;
varexcel.workbooks[1].worksheets[1].range['a1:a1'].Font.Name :='楷体';
varexcel.workbooks[1].worksheets[1].range['a1:a1'].Font.Size:='18';
varexcel.workbooks[1].worksheets[1].range['a1:a1'].Font.fontstyle :='bold';
varexcel.Visible :=true;
end;
except
ShowMessage('数据导出错误!');
end;
screen.cursor :=crArrow;
end;
end;
end;
end.
解决方案 »
- delphi Messagebox对话框显示 “确定”“取消”
- 100分,StringGrid变色,并且会自动换行,并自动调整行高的程序,出现闪烁,并cpu全占用的问题
- 如何设置代理服务器?
- 有谁敢向这个题目挑战,不强的人不要来
- ADO,用.udl文件在程序中建立数据库连接,如何写这段代码?
- 如何实现ActiveX版的Indyhttp功能(超过上贴4小时的UP有分)
- 100分,请教SQL SERVER2000存储过程的调试方法
- 我的小软件升级了!欢迎大家下载使用,并提供宝贵意见。
- 在D6中存储图像的问题
- 什么控件可以像Excel那样下拉批量赋值
- 下载了一个扩展名为IMG的xp安装文件,请问怎么用啊?
- 奇怪~~我的专家分为什么没有加上去?
var
xlApp, xlSheet: Variant;
ARow, iLoop: word;
begin
//try
xlApp := CreateOleObject('Excel.Application');
xlSheet := CreateOleObject('Excel.Sheet');
xlSheet := xlApp.WorkBooks.Add;
//表格标题
xlSheet.WorkSheets[1].Cells[1, 1] := TitleCaption;
for iLoop := 0 to ColCount-1 do
begin
xlSheet.WorkSheets[1].Cells[2, iLoop+1] := ColVar[iLoop];
end;
// 数据
ARow := 3;
with MakeQuery do
begin
First;
while not Eof do
begin
for iLoop := 0 to Fields.Count - 1 do
begin
xlSheet.WorkSheets[1].Cells[ARow, iLoop+1] := Fields[iLoop].AsString;
end;
Inc(ARow);
Next;
end;
end;
try
xlSheet.SaveAs(FileName);
Application.MessageBox('导出完毕!', '提示', MB_IconExclamation);
xlSheet.Close;
except
on EOleException do
end;
XLApp.displayAlerts:=false;
XLApp.ScreenUpdating:=true;
xlApp.Quit;
xlApp := UnAssigned;
end;
Dialogs, StdCtrls, DB, DBTables, Grids, DBGrids, ActiveX, ComObj,
Excel2000, OleServer;测试环境: OS:Win2k Pro;Excel2k;Delphi6.0源程序: {
功能描述:把DBGrid输出到Excel表格(支持多Sheet)
设计:CoolSlob
日期:2002-10-23
支持:[email protected]
调用格式:CopyDbDataToExcel([DBGrid1, DBGrid2]);
}
procedure CopyDbDataToExcel(Args: array of const);
var
iCount, jCount: Integer;
XLApp: Variant;
Sheet: Variant;
I: Integer;
begin
Screen.Cursor := crHourGlass;
if not VarIsEmpty(XLApp) then
begin
XLApp.DisplayAlerts := False;
XLApp.Quit;
VarClear(XLApp);
end;
try
XLApp := CreateOleObject(‘Excel.Application‘);
except
Screen.Cursor := crDefault;
Exit;
end;
XLApp.WorkBooks.Add;
XLApp.SheetsInNewWorkbook := High(Args) + 1;
for I := Low(Args) to High(Args) do
begin
XLApp.WorkBooks[1].WorkSheets[I+1].Name := TDBGrid(Args[I].VObject).Name;
Sheet := XLApp.Workbooks[1].WorkSheets[TDBGrid(Args[I].VObject).Name];
if not TDBGrid(Args[I].VObject).DataSource.DataSet.Active then
begin
Screen.Cursor := crDefault;
Exit;
end;
TDBGrid(Args[I].VObject).DataSource.DataSet.first;
for iCount := 0 to TDBGrid(Args[I].VObject).Columns.Count - 1 do
Sheet.Cells[1, iCount + 1] := TDBGrid(Args[I].VObject).Columns.Items[iCount].Title.Caption;
jCount := 1;
while not TDBGrid(Args[I].VObject).DataSource.DataSet.Eof do
begin
for iCount := 0 to TDBGrid(Args[I].VObject).Columns.Count - 1 do
Sheet.Cells[jCount + 1, iCount + 1] := TDBGrid(Args[I].VObject).Columns.Items[iCount].Field.AsString;
Inc(jCount);
TDBGrid(Args[I].VObject).DataSource.DataSet.Next;
end;
end;
XlApp.Visible := True;
Screen.Cursor := crDefault;
end;