因需要,需要从cxgrid导出数据到excel2007,i 不知道怎么写,有什么方法?
我的机器上安装的是office 2007, 为什么 execlAPP := CreateOleObject('Excel.Application');执行这个语句时出错,
提示:无效的类字符串。 谢谢。
我的机器上安装的是office 2007, 为什么 execlAPP := CreateOleObject('Excel.Application');执行这个语句时出错,
提示:无效的类字符串。 谢谢。
文件后缀保存为excel2007的格式即可
usecxGridExportLink;
procedure TForm23.BitBtn3Click(Sender: TObject);
var
filename,fileExt:string;
begin
self.SaveDialog1.FileName:=formatdatetime('信息YYYYMMDDHHMMSS',now);
if SaveDialog1.Execute then
begin
try
FileName := Self.SaveDialog1.FileName;
case self.SaveDialog1.FilterIndex of
1: filename:=filename+'.xls';
2: filename:=filename+'.txt';
3: filename:=filename+'.xml';
4: filename:=filename+'.html';
end; FileExt := LowerCase(ExtractFileExt(FileName));
if FileExt = '.xls' then
ExportGridToEXCEL(FileName, Self.cxGrid1,false,true,true)
else if FileExt = '.xml' then
ExportGridToXML(FileName, Self.cxGrid1,false,false)
else if FileExt = '.txt' then
ExportGridToText(FileName, Self.cxGrid1,false,false)
else if FileExt = '.html' then
ExportGridToHTML(FileName, Self.cxGrid1,false,false)
else
begin
MessageBox(self.Handle ,'不支持的导出文件类型...','系统提示',$00000040);
Exit;
end; except
messagebox(self.Handle,'导出文件保存失败!','错误提示',$00000040);
end; end;end;if SaveDialog1.Execute then
begin
ExportGridToExcel(SaveDialog1.FileName,cxGrid1,True,True,True);
end;
end;
下面是我自己写的一个代码,可是又出错。 procedure Tfrinboundcheck.btn2Click(Sender: TObject);
var
SfileName, str: string;
execlAPP, sheet, data: Variant;
row,i: Integer;
j, k: Integer;
begin dm.dlgSave1.Filter := '*.xls| *.xls';
DM.dlgSave1.DefaultExt := '*.xls';
if DM.dlgSave1.Execute then
begin
//ShowMessage(SfileName);
SfileName := DM.dlgSave1.FileName;
try
execlAPP := CreateOleObject('Excel.Application');
execlAPP.workbooks.add;
except
ShowMessage('创建exce2007失败!');
exit;
end;
for i := 0 to cxgrdbtblvwGrid1DBTableView1.ColumnCount - 1 do
begin
if cxgrdbtblvwGrid1DBTableView1.Columns[i].Visible then
begin
execlAPP.cells[1, i + 1 ] := cxgrdbtblvwGrid1DBTableView1.Columns[i].Caption;
end;
end; i := 2;
aqybase.First;
while not aqybase.Eof do
begin
for j := 0 to aqybase.FieldCount -1 do
begin
if cxgrdbtblvwGrid1DBTableView1.Columns[j].Visible then
begin
// execlAPP.cells[i, j + 1].numberformat :='@';
if not aqybase.FieldByName(aqybase.Fields.Fields[j].FieldName).IsNull then
begin //就是这个j超出了上限14,我是有14个字段,我用的是dbgrid这样写也没有错啊,这个j 就是0 到 13而已,那里到14了?
str := aqybase.fieldbyname(aqybase.Fields.Fields[j].FieldName).Value;
//ShowMessage(str);
execlAPP.cells[i,j + 1] := str;
end;
end;
end;
if i =65535 then
Break;
Inc(i);
Next;
end; execlAPP.ActiveWorkbook.SaveAs(sFileName,xlNormal,'', '',False,False);
execlAPP.workbooks[1].Close;
execlAPP.quit;
execlAPP := Unassigned;
end;