begin stringlist:= TStringList.Create; try for i := 0 to DBGrid.DataSource.DataSet.FieldCount - 1 do if DBGrid.Columns[i].Visible then strLine := strLine + DBGrid.DataSource.DataSet.Fields[i].FieldName + chr(9); stringlist.Add(strLine); DBGrid.DataSource.DataSet.First; while( not DBGrid.DataSource.DataSet.Eof) do begin strLine :=''; for i := 0 to DBGrid.DataSource.DataSet.FieldCount - 1 do if DBGrid.Columns[i].Visible then strLine := strLine + DBGrid.DataSource.DataSet.Fields[i].AsString + chr(9); stringlist.Add(strLine); DBGrid.DataSource.DataSet.Next; end; finally stringlist.SaveToFile(SaveDialog.FileName); stringlist.Free; end;
chenxc(chenxc),你干什么呀?写这一大段程序,没有看见涉及到Excel方面的问题吗?最起码有下面一段: var Obj: Variant;Obj := CreateOLEObj('Application.Excel'); .....
写成的文件(用xls作后缀), 用Excel打开试试,会有用的
procedure TDMFun.SaveToExcel(Grid:TDBGrid;const FileName,SheetTitle:string); var RowNum,ColNum,RecordNum: integer; ExcelWorkbook1: TExcelWorkbook; ExcelWorksheet1: TExcelWorksheet; ExcelApplication1: TExcelApplication; begin try ExcelApplication1 := TExcelApplication.Create(Self); ExcelWorkbook1 := TExcelWorkbook.Create(Self); ExcelWorkSheet1 := TExcelWorksheet.Create(Self); except showmessage('对不起,您没有安装Excel 2000!'); abort; end; ExcelApplication1.Connect; ExcelApplication1.Workbooks.Add(null,0); ExcelWorkBook1.ConnectTo(ExcelApplication1.Workbooks[1]); ExcelWorkSheet1.ConnectTo(ExcelWorkBook1.Sheets[1] as _WorkSheet); if Grid.DataSource.DataSet.RecordCount > 0 then begin ExcelWorkSheet1.Name:=SheetTiTle; ExcelworkSheet1.Cells.Clear; for ColNum:=0 to Grid.FieldCount-1 do begin ExcelWorkSheet1.cells.Item[2, colNum+1].font.size := 13; ExcelWorkSheet1.cells.Item[2, colNum+1].Font.Bold := True; ExcelWorkSheet1.cells.Item[2, colNum+1] :=Grid.Columns[colnum].Title.Caption; end; Grid.DataSource.DataSet.First; RowNum:=3; for RecordNum := 1 to (Grid.DataSource.DataSet.RecordCount) do begin for ColNum:=0 to Grid.FieldCount-1 do ExcelWorkSheet1.Cells.Item[RowNum, colNum+1]:=Grid.Fields[colNum].Asstring; Grid.DataSource.DataSet.Next; RowNum := RowNum + 1; end; end; ExcelWorkBook1.SaveCopyAs(FileName); ExcelWorkBook1.Saved[0] :=true; ExcelWorksheet1.Free; ExcelWorkbook1.Free; ExcelApplication1.Free; ShowMessage('EXCEL文件输出完成!保存在"我的文档中",文件名为:'+FileName); end;
上过程这样用 procedure TF---.BBSaveExcClick(Sender: TObject); var StrDate,ExePath:string; begin StrDate:=FormatDateTime('YYYYMMDD',DATE); ExePath:=DMFun.ExePath; DMnaemplate.saveToExcel(DBGrid,ExePath + '---' + StrDate + '.xls',self.Caption ); end; 不便的地方自己改进吧!
上过程这样用 procedure TF---.BBSaveExcClick(Sender: TObject); var StrDate,ExePath:string; begin StrDate:=FormatDateTime('YYYYMMDD',DATE); ExePath:=DMFun.ExePath; DMFun.saveToExcel(DBGrid,ExePath + '---' + StrDate + '.xls',self.Caption ); end; 不便的地方自己改进吧!
用两层循环写,外面用while not eof 写,里面用for循环写一条记录的几个字段,
我试了一次,选中两个连续单元格然后将它们合并,录制的宏代码在delphi中不能执行呀?
stringlist:= TStringList.Create;
try
for i := 0 to DBGrid.DataSource.DataSet.FieldCount - 1 do
if DBGrid.Columns[i].Visible then
strLine := strLine + DBGrid.DataSource.DataSet.Fields[i].FieldName + chr(9);
stringlist.Add(strLine);
DBGrid.DataSource.DataSet.First;
while( not DBGrid.DataSource.DataSet.Eof) do
begin strLine :='';
for i := 0 to DBGrid.DataSource.DataSet.FieldCount - 1 do
if DBGrid.Columns[i].Visible then
strLine := strLine + DBGrid.DataSource.DataSet.Fields[i].AsString + chr(9); stringlist.Add(strLine);
DBGrid.DataSource.DataSet.Next;
end; finally
stringlist.SaveToFile(SaveDialog.FileName);
stringlist.Free;
end;
var Obj: Variant;Obj := CreateOLEObj('Application.Excel');
.....
var
RowNum,ColNum,RecordNum: integer;
ExcelWorkbook1: TExcelWorkbook;
ExcelWorksheet1: TExcelWorksheet;
ExcelApplication1: TExcelApplication;
begin
try
ExcelApplication1 := TExcelApplication.Create(Self);
ExcelWorkbook1 := TExcelWorkbook.Create(Self);
ExcelWorkSheet1 := TExcelWorksheet.Create(Self);
except
showmessage('对不起,您没有安装Excel 2000!');
abort;
end;
ExcelApplication1.Connect;
ExcelApplication1.Workbooks.Add(null,0);
ExcelWorkBook1.ConnectTo(ExcelApplication1.Workbooks[1]);
ExcelWorkSheet1.ConnectTo(ExcelWorkBook1.Sheets[1] as _WorkSheet);
if Grid.DataSource.DataSet.RecordCount > 0 then
begin
ExcelWorkSheet1.Name:=SheetTiTle;
ExcelworkSheet1.Cells.Clear;
for ColNum:=0 to Grid.FieldCount-1 do
begin
ExcelWorkSheet1.cells.Item[2, colNum+1].font.size := 13;
ExcelWorkSheet1.cells.Item[2, colNum+1].Font.Bold := True;
ExcelWorkSheet1.cells.Item[2, colNum+1] :=Grid.Columns[colnum].Title.Caption;
end;
Grid.DataSource.DataSet.First;
RowNum:=3;
for RecordNum := 1 to (Grid.DataSource.DataSet.RecordCount) do
begin
for ColNum:=0 to Grid.FieldCount-1 do
ExcelWorkSheet1.Cells.Item[RowNum, colNum+1]:=Grid.Fields[colNum].Asstring;
Grid.DataSource.DataSet.Next;
RowNum := RowNum + 1;
end;
end;
ExcelWorkBook1.SaveCopyAs(FileName);
ExcelWorkBook1.Saved[0] :=true;
ExcelWorksheet1.Free;
ExcelWorkbook1.Free;
ExcelApplication1.Free;
ShowMessage('EXCEL文件输出完成!保存在"我的文档中",文件名为:'+FileName);
end;
procedure TF---.BBSaveExcClick(Sender: TObject);
var StrDate,ExePath:string;
begin
StrDate:=FormatDateTime('YYYYMMDD',DATE);
ExePath:=DMFun.ExePath;
DMnaemplate.saveToExcel(DBGrid,ExePath + '---' + StrDate + '.xls',self.Caption );
end;
不便的地方自己改进吧!
procedure TF---.BBSaveExcClick(Sender: TObject);
var StrDate,ExePath:string;
begin
StrDate:=FormatDateTime('YYYYMMDD',DATE);
ExePath:=DMFun.ExePath;
DMFun.saveToExcel(DBGrid,ExePath + '---' + StrDate + '.xls',self.Caption );
end;
不便的地方自己改进吧!