从数据库中取出数据并按格式写入动态数组中。
动态数组中的数据按类型EXCEL可能要生成多个Sheet,SheetName不同,内容不同。
参考了以下的程序,但Excel只能生成一个Sheet,且SheetName和文件名一样。该如何调整才能我所需要的实现?
arXlsBegin: array[0..5] of Word = ($809, 8, 0, $10, 0, 0); 
arXlsEnd: array[0..1] of Word = ($0A, 00); 
arXlsString: array[0..5] of Word = ($204, 0, 0, 0, 0, 0); 
arXlsNumber: array[0..4] of Word = ($203, 14, 0, 0, 0); 
arXlsInteger: array[0..4] of Word = ($27E, 10, 0, 0, 0); 
arXlsBlank: array[0..4] of Word = ($201, 6, 0, 0, $17);    接着调用下面的函数。 Procedure ExportExcelFile(FileName: string; bWriteTitle: Boolean; aDataSet: TDataSet); 
var 
 i, j: integer; 
 Col, row: word; 
 ABookMark: TBookMark; 
 aFileStream: TFileStream; 
 procedure incColRow; //增加行列号 
begin 
 if Col = ADataSet.FieldCount - 1 then 
 begin 
  Inc(Row); 
  Col :=0; 
 end 
 else 
  Inc(Col); 
 end; procedure WriteStringCell(AValue: string);//写字符串数据 
var 
 L: Word; 
begin 
 L := Length(AValue); 
 arXlsString[1] := 8 + L; 
 arXlsString[2] := Row; 
 arXlsString[3] := Col; 
 arXlsString[5] := L; 
 aFileStream.WriteBuffer(arXlsString, SizeOf(arXlsString)); 
 aFileStream.WriteBuffer(Pointer(AValue)^, L); 
 IncColRow; 
end; 
begin 
if FileExists(FileName) then DeleteFile(FileName); //文件存在,先删除 
 aFileStream := TFileStream.Create(FileName, fmCreate); 
 Try 
  //写文件头 
  aFileStream.WriteBuffer(arXlsBegin, SizeOf(arXlsBegin)); 
  //写列头 
  Col := 0; Row := 0; 
  if bWriteTitle then 
  begin 
   for i := 0 to aDataSet.FieldCount - 1 do 
    WriteStringCell(aDataSet.Fields[i].FieldName); 
   end; 
   //写数据集中的数据 
   aDataSet.DisableControls; 
   ABookMark := aDataSet.GetBook; 
   aDataSet.First; 
   while not aDataSet.Eof do 
   begin 
    for i := 0 to aDataSet.FieldCount - 1 do 
     case ADataSet.Fields[i].DataType of 
      ftSmallint, ftInteger, ftWord, ftAutoInc, ftBytes: 
      WriteIntegerCell(aDataSet.Fields[i].AsInteger); 
      ftFloat, ftCurrency, ftBCD: 
      WriteFloatCell(aDataSet.Fields[i].AsFloat) 
     else 
      WriteStringCell(aDataSet.Fields[i].AsString); 
     end; 
     aDataSet.Next; 
    end; 
    //写文件尾 
    AFileStream.WriteBuffer(arXlsEnd, SizeOf(arXlsEnd)); 
    if ADataSet.BookValid(ABookMark) then aDataSet.GotoBook(ABookMark); 
    Finally 
     AFileStream.Free; 
    ADataSet.EnableControls; 
   end; 
 end;