Delphi操作Excel问题 ( 积分: 50 )

  • 主题发起人 主题发起人 wglifs
  • 开始时间 开始时间
W

wglifs

Unregistered / Unconfirmed
GUEST, unregistred user!
我用两种方法操作Excel,都遇到了问题:
第一种:使用控件的源码如下
try
ExcelApplication1:=TExcelApplication.Create(ExcelApplication1);
ExcelWorksheet1:=TExcelWorksheet.Create(ExcelApplication1);
ExcelWorkbook1:= TExcelWorkbook.Create(ExcelWorksheet1);
ExcelApplication1.Connect;
except
application.MessageBox('Excel没有安装!','提示',64);
screen.Cursor:= crDefault;
Abort;
end;
try
ExcelApplication1.Workbooks.Add('Model.xlt',0);
ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks[1]);
ExcelWorksheet1.ConnectTo(ExcelWorkbook1.Worksheets[1] as _worksheet);
ExcelWorksheet1.Cells.Item[1,2]:='123456;
finally
ExcelWorksheet1.SaveAs('123');
ExcelApplication1.Workbooks.Close(0);
ExcelWorkbook1.Free;
ExcelWorkbook1:= nil;
ExcelApplication1.Disconnect;
ExcelApplication1.Quit;
ExcelApplication1.Destroy;
end;
有安装过Office2003和Office2000,都会出现同样的提示:Interface not supported

第二种:使用ComObj,代码如下
try
xlApp := CreateOleObject('Excel.Application');
except
application.MessageBox('Excel没有安装!','提示',64);
screen.Cursor:= crDefault;
Abort;
end;
try
xlApp.WorkBooks.Add;
xlApp.WorkBooks.Open('Model.xls');
xlApp.Cells[1,2].Value:='123456';
finally
xlApp.SaveAs('123.xls');
xlApp.WorkBooks.Close;
xlApp.Quit;
end;
会出现错误提示:Method 'saveas' not supported by automation object.

我是想调出一个模版,然后再将数据导入,哪们大侠有这方面的示例程序吗?
 
不要使用Open方法,该方法直接在模板上操作,可以使用用Add方法替代,这样可以创建一个新文件并复制模板的数据和格式,从而保证不在模板上操作,此时他爱保存在哪里由着他,直接Save就可以了,避开使用Save As功能达到相同的效果.
直接使用xls文件做模板,不必使用专门的xlt模板文件(后者我没有玩过).
 
QQ:292044357
可加我,不便在此放代码
 
用 CreateOleObject 的方式写代码很简单,只要从excel的vb编辑器里编写再复制过来做少许修改就可以了。
 
Temp_OLEObject.ActiveWorkbook.SaveAs(Filename:=SaveDialog1.FileName, AddToMru:=False);
 
procedure lead_excel(ados:TCustomADODataSet;s:string;k:string;da:tdatetime;l:integer);
var
excelapp:variant;
i,j:integer;
save:tsavedialog;
begin
try
save:=tsavedialog.Create(nil);
save.FileName:=s+datetostr(da);
if Save.Execute then
begin
excelapp:=createoleobject('excel.application');
excelapp.workbooks.add;
excelapp.worksheets[1].activate;
excelapp.activesheet.name:=s;
screen.Cursor:=-11;
excelapp.Range['A1:J1'].merge; //合并单元格
excelapp.Range['A1:J1'].value:=s;
excelapp.Range['A1:J1'].HorizontalAlignment:= $FFFFEFF4; //水平居中
excelapp.Range['A1:J1'].font.name:='宋体';
excelapp.Range['A1:J1'].Font.FontStyle:='加粗';
excelapp.Range['A1:J1'].font.size:=18;
excelapp.Range['A1:J1'].Borders.LineStyle:=1 ; //设置边框
excelapp.Range['A2:J2'].merge; //合并单元格
excelapp.Range['A2:J2'].value:=k;
excelapp.Range['A2:J2'].HorizontalAlignment:= $FFFFEFF4; //水平居中
excelapp.Range['A2:J2'].font.name:='宋体';
excelapp.Range['A2:J2'].Font.FontStyle:='加粗';
excelapp.Range['A2:J2'].font.size:=18;
excelapp.Range['A2:J2'].Borders.LineStyle:=1 ; //设置边框
for i:=0 to ados.Fields.count-2 do
begin
ExcelApp.ActiveSheet.Columns[i+1].ColumnWidth := 10; //设置列宽
if i=0 then
ExcelApp.ActiveSheet.Columns[i+1].NumberFormat:='@'
else
ExcelApp.ActiveSheet.Columns[i+1].NumberFormat:='0.00';
excelapp.cells[3,i+1].HorizontalAlignment:= $FFFFEFF4; //水平居中
excelapp.cells[3,i+1].value:=ados.Fields[i+1].FieldName;
excelapp.cells[3,i+1].Borders.LineStyle:=1;
ados.First;
j:=4;
while not ados.Eof do
begin
excelapp.cells[j,i+1].value:=ados.Fields[i+1].Value;
excelapp.cells[j,i+1].Borders.LineStyle:=1;
inc(j);
ados.Next;
end;
end;
screen.Cursor:=0;
excelapp.activesheet.saveas(Save.FileName);
application.MessageBox('导出完成!','消息',0);
excelapp.visible:=false;
excelapp.quit;
save.Free;
end;
except
application.MessageBox('导出发生错误!','消息',16);
end;
end;
 
在加入模版和退出保存时的语句还是有问题
 
有答案了吗?
第二种:使用ComObj,

v:=createoleobject('Excel.Application'); //创建OLE对象
v.visible:=true;
v.workbooks.add; // (-4167) //添加工作表
v.workbooks[1].sheets[1].name:='test';
sheet:=v.workbooks[1].sheets['test'];
result:=v;

保存:v.workbooks[1].saveas(form1.SaveDialog1.FileName);
或 v.SaveAs( 'C:/Excel/Demo1.xls' );
 
v := CreateOleObject('Excel.Application');
v.workbooks.add;
Workbook := v.Workbooks[1];
Workbook.saveas(fileName);

if not VarIsEmpty(v) then
begin
v.DisplayAlerts := False;
v.Quit;
end;
 
多人接受答案了。
 

Similar threads

I
回复
0
查看
847
import
I
I
回复
0
查看
610
import
I
I
回复
0
查看
781
import
I
I
回复
0
查看
618
import
I
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部