请各位大侠指点
有没有实例
首先利用Delphi查询SQL相关表格的数据
然后再利用Delphi将查询出的数据导出为Excel文档
在线等待各位高手指点
 

解决方案 »

  1.   

    TADOQuery -> TDBGridEh -> Excel 
      

  2.   

    网上例子多呀!
    www.2ccc.com
      

  3.   

    给你两个函数,可直接从DataSet输出Excel//**********************************XLS  EXPORTS********************************
    // from http://www.swissdelphicenter.ch/torry/showcode.php?id=379//直接从DataSet输出Excel
    function SaveAsExcelFile(ADataSet: TDataSet; AFileName: string): Boolean;
    const
      {$J+} CXlsBof: array[0..5] of Word = ($809, 8, 00, $10, 0, 0); {$J-}
      CXlsEof: array[0..1] of Word = ($0A, 00);
    var
      FStream: TFileStream;
      ICol, iRow: Integer;    procedure XlsWriteCellLabel(XlsStream: TStream; const ACol, ARow: Word;
          const AValue: string);
        var
          L: Word;
        const
          {$J+}
          CXlsLabel: array[0..5] of Word = ($204, 0, 0, 0, 0, 0);
          {$J-}
        begin
          L := Length(AValue);
          CXlsLabel[1] := 8 + L;
          CXlsLabel[2] := ARow;
          CXlsLabel[3] := ACol;
          CXlsLabel[5] := L;
          XlsStream.WriteBuffer(CXlsLabel, SizeOf(CXlsLabel));
          XlsStream.WriteBuffer(Pointer(AValue)^, L);
        end;
    begin
      Result := False;
      FStream := TFileStream.Create(PChar(AFileName), fmCreate or fmOpenWrite);
      try
        CXlsBof[4] := 0;
        FStream.WriteBuffer(CXlsBof, SizeOf(CXlsBof));
        ADataSet.DisableControls;
        ADataSet.first;iRow := 0;
         while not ADataSet.EOF do
         begin
            iRow := iRow+1;
            for ICol := 0 to ADataSet.FieldCount - 1 do
              XlsWriteCellLabel(FStream, ICol+1, iRow,ADataSet.Fields[ICol].AsString);
            ADataSet.Next;
         end;
         ADataSet.DisableControls;
        FStream.WriteBuffer(CXlsEof, SizeOf(CXlsEof));
        Result := True;
      finally
        FStream.Free;
      end;
    end;//直接从DataSet输出CSV
    function SaveAsCSVFile(ADataSet: TDataSet; AFileName: string;
      sSepar : string =',';sQuote : string ='"'): Boolean;
    var
      tsOut : tStringList;
      ICol,iLen: Integer;
      sTemp,sLine : string;
    begin
      Result := False;
      tsOut := TStringList.Create;
      try
        ADataSet.DisableControls;
        ADataSet.first;
        while not ADataSet.EOF do
        begin
          sLine :='';
          for ICol := 0 to ADataSet.FieldCount - 1 do
          begin
            sTemp := sQuote+ ADataSet.Fields[ICol].AsString + sQuote;
            if ICol >0 then sTemp := sSepar + sTemp;
            sLine := sLine+sTemp;
          end;
          tsOut.Add(sLine);
          ADataSet.Next;
        end;
        tsOut.SaveToFile(AFileName);
        ADataSet.DisableControls;
        Result := True;
      finally
        tsOut.Free;
      end;
    end;