用Server上的控件,或CreateOleObject

解决方案 »

  1.   

    procedure TForm1.DBGridtoExcel(title:string;datetime:string;DBGrid:TDBGrid);
    var
      e:variant;
      i,j:integer;
      x1,x2,y1,y2:integer;
      rowcount,colcount:integer;
      columnwidth:array of integer;
      first,second,last:string;
    begin
      try
        e:=CreateOleObject('Excel.Application');
        e.workbooks.add();
        e.visible:=true;
      except
        showmessage('ÄúµÄ¼ÆËã»úÖÐδ°²×°MicroSoft Excel');
        exit;
      end;
      e.ActiveWindow.DisplayGridlines:=false;
    //µÃµ½ÁÐÊý
      colcount:=DBGrid.Columns.Count ;
      setlength(columnwidth,colcount);
      for i:=low(columnwidth) to high(columnwidth) do
        columnwidth[i]:=0;//Ìîд±êÌâ
        e.Workbooks[1].Sheets[1].Range[e.Workbooks[1].Sheets[1].Cells[2,1],e.Workbooks[1].Sheets[1].Cells[2,ColCount]].HorizontalAlignment := xlGeneral;
        e.Workbooks[1].Sheets[1].Range[e.Workbooks[1].Sheets[1].Cells[2,1],e.Workbooks[1].Sheets[1].Cells[2,ColCount]].VerticalAlignment := xlBottom;
        e.Workbooks[1].Sheets[1].Range[e.Workbooks[1].Sheets[1].Cells[2,1],e.Workbooks[1].Sheets[1].Cells[2,ColCount]].WrapText := False;
        e.Workbooks[1].Sheets[1].Range[e.Workbooks[1].Sheets[1].Cells[2,1],e.Workbooks[1].Sheets[1].Cells[2,ColCount]].Orientation := 0;
        e.Workbooks[1].Sheets[1].Range[e.Workbooks[1].Sheets[1].Cells[2,1],e.Workbooks[1].Sheets[1].Cells[2,ColCount]].AddIndent := False;
        e.Workbooks[1].Sheets[1].Range[e.Workbooks[1].Sheets[1].Cells[2,1],e.Workbooks[1].Sheets[1].Cells[2,ColCount]].ShrinkToFit := False;
        e.Workbooks[1].Sheets[1].Range[e.Workbooks[1].Sheets[1].Cells[2,1],e.Workbooks[1].Sheets[1].Cells[2,ColCount]].MergeCells := True;
        e.Workbooks[1].Sheets[1].Range[e.Workbooks[1].Sheets[1].Cells[2,1],e.Workbooks[1].Sheets[1].Cells[2,ColCount]].HorizontalAlignment := xlCenter;
        e.Workbooks[1].Sheets[1].Range[e.Workbooks[1].Sheets[1].Cells[2,1],e.Workbooks[1].Sheets[1].Cells[2,ColCount]].VerticalAlignment := xlBottom;
        e.Workbooks[1].Sheets[1].Range[e.Workbooks[1].Sheets[1].Cells[2,1],e.Workbooks[1].Sheets[1].Cells[2,ColCount]].Font.Name := 'ºÚÌå';
        e.Workbooks[1].Sheets[1].Range[e.Workbooks[1].Sheets[1].Cells[2,1],e.Workbooks[1].Sheets[1].Cells[2,ColCount]].Font.Size := 16;
        e.Workbooks[1].Sheets[1].Range[e.Workbooks[1].Sheets[1].Cells[2,1],e.Workbooks[1].Sheets[1].Cells[2,ColCount]].Font.Strikethrough := False;
        e.Workbooks[1].Sheets[1].Range[e.Workbooks[1].Sheets[1].Cells[2,1],e.Workbooks[1].Sheets[1].Cells[2,ColCount]].Font.Superscript := False;
        e.Workbooks[1].Sheets[1].Range[e.Workbooks[1].Sheets[1].Cells[2,1],e.Workbooks[1].Sheets[1].Cells[2,ColCount]].Font.Subscript := False;
        e.Workbooks[1].Sheets[1].Range[e.Workbooks[1].Sheets[1].Cells[2,1],e.Workbooks[1].Sheets[1].Cells[2,ColCount]].Font.OutlineFont := False;
        e.Workbooks[1].Sheets[1].Range[e.Workbooks[1].Sheets[1].Cells[2,1],e.Workbooks[1].Sheets[1].Cells[2,ColCount]].Font.Shadow := False;
        e.Workbooks[1].Sheets[1].Range[e.Workbooks[1].Sheets[1].Cells[2,1],e.Workbooks[1].Sheets[1].Cells[2,ColCount]].Font.Underline := xlUnderlineStyleNone;
        e.Workbooks[1].Sheets[1].Range[e.Workbooks[1].Sheets[1].Cells[2,1],e.Workbooks[1].Sheets[1].Cells[2,ColCount]].Font.ColorIndex := xlAutomatic;
      e.Workbooks[1].Sheets[1].Cells[2,1] := Title;
    //Ìîд±¨±íµ¥Î»,ʱ¼ä
      e.Workbooks[1].Sheets[1].Cells[4,1]:='±¨±íµ¥Î»:';
      e.Workbooks[1].Sheets[1].Cells[4,4] :='±¨±íʱ¼ä:'+ DateTime;
    //Ìîд±íÍ·
      e.Workbooks[1].Sheets[1].Cells[5,1] :=DBGrid.Fields[0].DisplayName;
      columnwidth[0]:=length(DBGrid.Fields[0].DisplayName);
      for i:=2 to ColCount do
      begin
        e.Workbooks[1].Sheets[1].Cells[5,i] :=DBGrid.Fields[i-1].DisplayName;
        columnwidth[i-1]:=length(DBGrid.Fields[i-1].DisplayName);
      end;
    //ÌîдÊý¾Ý
      i:=1;
      DBGrid.DataSource.DataSet.First ;
      while not DBGrid.DataSource.DataSet.Eof do
      begin
        for j:=1 to ColCount do
        begin
          e.Workbooks[1].Sheets[1].Cells[5+i,j] := DBGrid.Fields[j-1].AsString;
          if columnwidth[j-1]<length(DBGrid.Fields[j-1].AsString) then
            columnwidth[j-1]:=length(DBGrid.Fields[j-1].AsString);
        end;
        DBGrid.DataSource.DataSet.Next;
        i:=i+1;
      end;
    //&micro;÷&Otilde;&ucirc;excel&Aacute;&ETH;&iquest;í&para;&Egrave;
      for i:=1 to colcount do
        e.Workbooks[1].Sheets[1].Columns[i].ColumnWidth:=columnwidth[i-1];  y1:=5;
      x1:=1;
      y2:=8+DBGrid.DataSource.DataSet.RecordCount-1;
      x2:=ColCount;
      e.Workbooks[1].Sheets[1].Range[e.Workbooks[1].Sheets[1].Cells[y1,x1],e.Workbooks[1].Sheets[1].Cells[y2,x2]].Borders[xlEdgeTop].LineStyle := xlContinuous;
      e.Workbooks[1].Sheets[1].Range[e.Workbooks[1].Sheets[1].Cells[y1,x1],e.Workbooks[1].Sheets[1].Cells[y2,x2]].Borders[xlEdgeTop].Weight := xlThin;
      e.Workbooks[1].Sheets[1].Range[e.Workbooks[1].Sheets[1].Cells[y1,x1],e.Workbooks[1].Sheets[1].Cells[y2,x2]].Borders[xlEdgeTop].ColorIndex := xlAutomatic;
      e.Workbooks[1].Sheets[1].Range[e.Workbooks[1].Sheets[1].Cells[y1,x1],e.Workbooks[1].Sheets[1].Cells[y2,x2]].Borders[xlEdgeBottom].LineStyle := xlContinuous;
      e.Workbooks[1].Sheets[1].Range[e.Workbooks[1].Sheets[1].Cells[y1,x1],e.Workbooks[1].Sheets[1].Cells[y2,x2]].Borders[xlEdgeBottom].Weight := xlThin;
      e.Workbooks[1].Sheets[1].Range[e.Workbooks[1].Sheets[1].Cells[y1,x1],e.Workbooks[1].Sheets[1].Cells[y2,x2]].Borders[xlEdgeBottom].ColorIndex := xlAutomatic;
      e.Workbooks[1].Sheets[1].Range[e.Workbooks[1].Sheets[1].Cells[y1,x1],e.Workbooks[1].Sheets[1].Cells[y2,x2]].Borders[xlEdgeRight].LineStyle := xlContinuous;
      e.Workbooks[1].Sheets[1].Range[e.Workbooks[1].Sheets[1].Cells[y1,x1],e.Workbooks[1].Sheets[1].Cells[y2,x2]].Borders[xlEdgeRight].Weight := xlThin;
      e.Workbooks[1].Sheets[1].Range[e.Workbooks[1].Sheets[1].Cells[y1,x1],e.Workbooks[1].Sheets[1].Cells[y2,x2]].Borders[xlEdgeRight].ColorIndex := xlAutomatic;
      e.Workbooks[1].Sheets[1].Range[e.Workbooks[1].Sheets[1].Cells[y1,x1],e.Workbooks[1].Sheets[1].Cells[y2,x2]].Borders[xlEdgeLeft].LineStyle := xlContinuous;
      e.Workbooks[1].Sheets[1].Range[e.Workbooks[1].Sheets[1].Cells[y1,x1],e.Workbooks[1].Sheets[1].Cells[y2,x2]].Borders[xlEdgeLeft].Weight := xlThin;
      e.Workbooks[1].Sheets[1].Range[e.Workbooks[1].Sheets[1].Cells[y1,x1],e.Workbooks[1].Sheets[1].Cells[y2,x2]].Borders[xlEdgeLeft].ColorIndex := xlAutomatic;
      e.Workbooks[1].Sheets[1].Range[e.Workbooks[1].Sheets[1].Cells[y1,x1],e.Workbooks[1].Sheets[1].Cells[y2,x2]].Borders[xlInsideVertical].LineStyle := xlContinuous;
      e.Workbooks[1].Sheets[1].Range[e.Workbooks[1].Sheets[1].Cells[y1,x1],e.Workbooks[1].Sheets[1].Cells[y2,x2]].Borders[xlInsideVertical].Weight := xlThin;
      e.Workbooks[1].Sheets[1].Range[e.Workbooks[1].Sheets[1].Cells[y1,x1],e.Workbooks[1].Sheets[1].Cells[y2,x2]].Borders[xlInsideVertical].ColorIndex := xlAutomatic;
      e.Workbooks[1].Sheets[1].Range[e.Workbooks[1].Sheets[1].Cells[y1,x1],e.Workbooks[1].Sheets[1].Cells[y2,x2]].Borders[xlInsideHorizontal].LineStyle := xlContinuous;
      e.Workbooks[1].Sheets[1].Range[e.Workbooks[1].Sheets[1].Cells[y1,x1],e.Workbooks[1].Sheets[1].Cells[y2,x2]].Borders[xlInsideHorizontal].Weight := xlThin;
      e.Workbooks[1].Sheets[1].Range[e.Workbooks[1].Sheets[1].Cells[y1,x1],e.Workbooks[1].Sheets[1].Cells[y2,x2]].Borders[xlInsideHorizontal].ColorIndex := xlAutomatic;//  e.visible:=true;//  excel.DisplayAlerts:=true;//&Iacute;&Euml;&sup3;&ouml;&Ecirc;±&sup2;&raquo;&Igrave;á&Ecirc;&frac34;//  e.quit;
    end;
      

  2.   

    我刚做过,是用ado连的,
    1、添加ADOTable1控件,设置下列属性: 
    ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Excel 8.0;Persist Security Info=false;Data Source=c:\abc.xls"; 
    TableDirect=true; 
    TableName="sheet1$"; 
    Active=true; 
    2、添加DataSource1控件,设置下列属性: 
    DataSet=ADOTable1 
    3、添加DBGrid1控件,设置下列属性: 
    DataSource=DataSource1
      

  3.   

    把数据库的内容转换到EXCEL或WORD中去:(.dbf 不行)procedure TForm3.BitBtn2Click(Sender: TObject);
    var f:textfile;
        fs,str:string;
        i,j,k:integer;
    begin
    if not query1.IsEmpty then
    begin
    if savedialog1.execute then
     begin
       fs:=savedialog1.filename;
       assignfile(f,fs);
       rewrite(f);
       for i:=0 to query1.FieldCount-1 do
       begin
         begin
         str:=query1.Fields[i].Displaylabel;
          for j:=query1.Fields[i].datasize to 35 do
           begin
            str:=str+' ';
           end;
         write(f,str);
         end;
       end;
       writeln(f,'');
       query1.first;
       for i:=0 to query1.RecordCount-1  do
        begin
         for j:=0 to query1.FieldCount-1 do
         begin
          str:=query1.Fields[j].Displaytext;
          for k:=query1.Fields[j].datasize to 35 do
           begin
            str:=str+' ';
           end;
         write(f,str);
         end;
         writeln(f,'');
         query1.next;
        end;
       filestr1:=fs;
       closefile(f);
     end;
    end
    else
    begin
     showmessage('empty table');
    end;
    query1.first;
    end;
      

  4.   

    还不如用控件,QuickReport不是有转成excel的功能吗?不过如果数据量有一点点大,跟楼上兄弟的搞法一样慢,要想快最好是先转为文本,再由文本转excel。