用数据倒出行不: procedure GenXlsFile(DBGrid: TDBGrid); //uses ComObj; var ExcelApp: Variant; i, j: integer; SaveDialog:TSaveDialog; strsavefile:string; begin SaveDialog:=TSaveDialog.Create(Nil); SaveDialog.Filter := 'Microsoft Excel 文件|*.xls|Microsoft Word 文件|*.doc'; SaveDialog.Execute; //IntFileType:=SaveDialog.FilterIndex; StrSaveFile:=SaveDialog.FileName; if length(StrSaveFile)=0 then exit; try ExcelApp := CreateOleObject('Excel.Application'); except application.MessageBox('系统中的MS Excel软件没有安装或安装不正确!', '错误', MB_ICONERROR + MB_OK); exit; end; ExcelApp.visible := true; try excelapp.caption := '应用程序调用 Microsoft Excel'; ExcelApp.WorkBooks.Add; //写入标题行 for i := 1 to DBGrid.Columns.Count do //sDataSet.Fields.Count do begin //if DBGrid.Columns[i - 1].Visible then ExcelApp.Cells[1, i].Value := (DBGrid.Columns[i - 1].Title.Caption); end; DBGrid.DataSource.DataSet.First; i := 2; while not DBGrid.DataSource.DataSet.Eof do begin for j := 0 to DBGrid.Columns.Count - 1 do //sDataSet.Fields.Count-1 do begin //if DBGrid.Columns[j].Visible then ExcelApp.Cells[i, j + 1].Value := DBGrid.DataSource.DataSet.FieldByName(DBGrid.Columns[j].FieldName).AsString; //sDataSet.Fields[j].AsString; end; DBGrid.DataSource.DataSet.Next; i := i + 1; end; DBGrid.DataSource.DataSet.First; if application.MessageBox('数据导出完成.确认保存吗?', '问题', MB_ICONQUESTION + MB_YESNO + MB_DEFBUTTON1 + MB_SYSTEMMODAL) = IDYES then begin if not ExcelApp.ActiveWorkBook.Saved then ExcelApp.ActiveWorkBook.SaveAs(strsavefile); end else begin ExcelApp.ActiveWorkBook.Saved := True; //不保存 end; finally excelapp.quit; //退出EXCEL软件 end; end;
直接形成一个Excel文件当然可以了,我准备试验一下楼上阁下的贵码!谢谢!
导出excel不难的界面放入 ea1: TExcelApplication; ews1: TExcelWorksheet; ewb1: TExcelWorkbook; ----------- 代码procedure TForm1.Button2Click(Sender: TObject); var i,k:integer; begin ea1.Connect; //打开excel。 ea1.Visible[0] := True; //可见 ea1.Caption :='测试excel操作'; ewb1.ConnectTo(ea1.Workbooks.Add(emptyparam,0)); // 新建xls文件 ews1.ConnectTo(ewb1.Worksheets[1] as _worksheet); //连接工作页-第1个工作页 ews1.Activate ; //将这个工作页设为当前工作页. //加入列名 for i:=0 to dbgrid1.Columns.Count-1 do begin ews1.Cells.Item[1,i+1]:=dbgrid1.Columns[i].Title.Caption ; end; //载入数据 adoquery1.Open ; adoquery1.First ; k:=2; //从第二行开始 while not adoquery1.Eof do begin for i:=0 to dbgrid1.Columns.Count-1 do begin ews1.Cells.Item[k,i+1]:=adoquery1.FieldByName(dbgrid1.Columns[i].FieldName).AsString ; end; adoquery1.Next ; inc(k); end; ews1.Columns.EntireColumn.AutoFit; //自动列宽 end;
只有在编辑这个单元格的时候可以进行copy,你试一下就知。
要想选中单元格就可以copy,在程序里代码控制,应该也是有办法的,
请问:merkey2002(小样的),你能有什么样例代码吗?我现在有些黔驴技穷了。帮帮我吧!先谢谢了!
procedure GenXlsFile(DBGrid: TDBGrid);
//uses ComObj;
var
ExcelApp: Variant;
i, j: integer;
SaveDialog:TSaveDialog;
strsavefile:string;
begin
SaveDialog:=TSaveDialog.Create(Nil);
SaveDialog.Filter := 'Microsoft Excel 文件|*.xls|Microsoft Word 文件|*.doc';
SaveDialog.Execute;
//IntFileType:=SaveDialog.FilterIndex;
StrSaveFile:=SaveDialog.FileName;
if length(StrSaveFile)=0 then exit;
try
ExcelApp := CreateOleObject('Excel.Application');
except
application.MessageBox('系统中的MS Excel软件没有安装或安装不正确!', '错误', MB_ICONERROR + MB_OK);
exit;
end;
ExcelApp.visible := true;
try
excelapp.caption := '应用程序调用 Microsoft Excel';
ExcelApp.WorkBooks.Add;
//写入标题行
for i := 1 to DBGrid.Columns.Count do //sDataSet.Fields.Count do
begin
//if DBGrid.Columns[i - 1].Visible then
ExcelApp.Cells[1, i].Value := (DBGrid.Columns[i - 1].Title.Caption);
end;
DBGrid.DataSource.DataSet.First;
i := 2;
while not DBGrid.DataSource.DataSet.Eof do
begin
for j := 0 to DBGrid.Columns.Count - 1 do //sDataSet.Fields.Count-1 do
begin
//if DBGrid.Columns[j].Visible then
ExcelApp.Cells[i, j + 1].Value := DBGrid.DataSource.DataSet.FieldByName(DBGrid.Columns[j].FieldName).AsString; //sDataSet.Fields[j].AsString;
end;
DBGrid.DataSource.DataSet.Next;
i := i + 1;
end;
DBGrid.DataSource.DataSet.First;
if application.MessageBox('数据导出完成.确认保存吗?', '问题', MB_ICONQUESTION + MB_YESNO + MB_DEFBUTTON1 + MB_SYSTEMMODAL) = IDYES then
begin
if not ExcelApp.ActiveWorkBook.Saved then
ExcelApp.ActiveWorkBook.SaveAs(strsavefile);
end
else begin
ExcelApp.ActiveWorkBook.Saved := True; //不保存
end;
finally
excelapp.quit; //退出EXCEL软件
end;
end;
ea1: TExcelApplication;
ews1: TExcelWorksheet;
ewb1: TExcelWorkbook;
-----------
代码procedure TForm1.Button2Click(Sender: TObject);
var
i,k:integer;
begin
ea1.Connect; //打开excel。
ea1.Visible[0] := True; //可见
ea1.Caption :='测试excel操作';
ewb1.ConnectTo(ea1.Workbooks.Add(emptyparam,0)); // 新建xls文件
ews1.ConnectTo(ewb1.Worksheets[1] as _worksheet); //连接工作页-第1个工作页
ews1.Activate ; //将这个工作页设为当前工作页. //加入列名
for i:=0 to dbgrid1.Columns.Count-1 do
begin
ews1.Cells.Item[1,i+1]:=dbgrid1.Columns[i].Title.Caption ;
end; //载入数据
adoquery1.Open ;
adoquery1.First ;
k:=2; //从第二行开始
while not adoquery1.Eof do
begin
for i:=0 to dbgrid1.Columns.Count-1 do
begin
ews1.Cells.Item[k,i+1]:=adoquery1.FieldByName(dbgrid1.Columns[i].FieldName).AsString ;
end;
adoquery1.Next ;
inc(k);
end; ews1.Columns.EntireColumn.AutoFit; //自动列宽
end;