function Tmaindb.DataSetToExcel(DataSet1: TDataSet; xlsFile: string): Boolean; var ExcelFile1: TBIFF5; strtemp: Pchar; strtemp1: string; rFlag, cFlag: integer; begin ExcelFile1.init(xlsfile); strtemp := stralloc(128); DataSet1.DisableControls; try for rFlag := 0 to DataSet1.RecordCount do begin for cFlag := 0 to DataSet1.fields.Count - 1 do begin if rFlag = 0 then //写字段名 begin strtemp1 := DataSet1.Fields[cFlag].DisplayName; strpcopy(strtemp, strtemp1); ExcelFile1.WriteData(CellLabel, rFlag, cFlag, strtemp); DataSet1.first; end else begin //写记录 strtemp1 := DataSet1.Fields[cFlag].asstring; strpcopy(strtemp, strtemp1); ExcelFile1.WriteData(CellLabel, rFlag, cFlag, strtemp); end; end; if rFlag <> 0 then DataSet1.Next; end; finally DataSet1.EnableControls; end; ExcelFile1.Done; result := True; end;
最好???
程序已经做好了,所以条件还是用Quick.Report控件
function Tmaindb.DataSetToExcel(DataSet1: TDataSet; xlsFile: string): Boolean;
var
ExcelFile1: TBIFF5;
strtemp: Pchar;
strtemp1: string;
rFlag, cFlag: integer;
begin
ExcelFile1.init(xlsfile);
strtemp := stralloc(128); DataSet1.DisableControls;
try
for rFlag := 0 to DataSet1.RecordCount do
begin
for cFlag := 0 to DataSet1.fields.Count - 1 do
begin
if rFlag = 0 then //写字段名
begin
strtemp1 := DataSet1.Fields[cFlag].DisplayName;
strpcopy(strtemp, strtemp1);
ExcelFile1.WriteData(CellLabel, rFlag, cFlag, strtemp);
DataSet1.first;
end
else
begin //写记录
strtemp1 := DataSet1.Fields[cFlag].asstring;
strpcopy(strtemp, strtemp1);
ExcelFile1.WriteData(CellLabel, rFlag, cFlag, strtemp);
end;
end;
if rFlag <> 0 then
DataSet1.Next;
end;
finally
DataSet1.EnableControls;
end; ExcelFile1.Done;
result := True;
end;
--------------------------------------------
DataSet的导出已经有了,毕业DataSet汇总数据有限,很多统计的在DataSet中都做不到或者很难做到;用Quick Report的原因,是因Quick Report报表已经做好,现在想直接导出即可;