回 帖 发 新 帖 刷新版面

主题:各位一个简单的问题请问了 (高分)

如何把DBGrid中的数据导出到Excel中 谢谢了各位
代码怎么写 用什么控件

回复列表 (共4个回复)

沙发


 uses
  ComObj,Excel2000, ExtCtrls;
procedure CopyDbDataToExcel(Target:TswDBGrid;Title:String;Day:String);
var
  iCount,jCount:Integer;
  XLApp:Variant;
  Sheet: Variant;
  i:Integer;
  temp:String;
  Const
  HRang:array[1..23] of string=('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W');
//  Target1:TDBGrid;
begin
  Screen.Cursor := crHourGlass;
  if not VarIsEmpty(XLApp) then
  begin
    XLApp.DisplayAlerts  := False;
    XLApp.Quit;
    VarClear(XLApp);
  end;
  //籵徹ole斐膘Excel勤砓
  Try
    XLApp := CreateOleObject('Excel.Application');
  Except
    Screen.Cursor := crDefault;
    Exit;
  end;
  //xlApp.WorkBooks.open(ExtractFilePath(Application.ExeName)+'Pay.xls');
  XLApp.WorkBooks.Add[XLWBatWorksheet];
  XLApp.WorkBooks[1].WorkSheets[1].Name := 'Sheet1';
  Sheet := XLApp.Workbooks[1].WorkSheets['Sheet1'] ;
  if Not Target.DataSource.DataSet.Active then
  begin
    Screen.Cursor := crDefault;
    Exit;
  end;


  Sheet.range['B1'].value:=Title;
  Sheet.range['B1'].Font.Size:=18;
  Sheet.range['F1'].value:=Day;
  Target.DataSource.DataSet.first;
  for iCount := 0 to Target.Columns.Count -1 do
  begin
        Sheet.cells[2 ,iCount+1] := Target.Columns.Items[iCount].Title.Caption;
  end;
  jCount:=1;
  While Not Target.DataSource.DataSet.Eof do
  begin
     for iCount := 0 to Target.Columns.Count -1 do
     begin
        Sheet.cells[jCount+2 ,iCount+1] := Target.Columns.Items[iCount].Field.DisplayText;
     end;
     Inc(jCount);
     Target.DataSource.DataSet.Next;
  end;

  Sheet.Range['A2:'+hrang[iCount]+'1'].Font.Bold := True;
  Sheet.Range['A2:'+hrang[iCount]+IntToStr(jCount+1)].Font.Name:='冼极';
  Sheet.Range['A2:'+hrang[iCount]+IntToStr(jCount+1)].Font.Size:=9;
  Sheet.Range['A2:'+hrang[iCount]+IntToStr(jCount+1)].Borders.LineStyle:=1;
  Sheet.Range['A2:'+hrang[iCount]+IntToStr(jCount+1)].Columns.AutoFit;
  Sheet.Range['A2:'+hrang[iCount]+IntToStr(jCount+1)].HorizontalAlignment:=xlVAlignCenter;
  Sheet.Range['A2:'+hrang[iCount]+IntToStr(jCount+1)].AddIndent := True;

//  Sheet.PageSetup.Orientation := xlLandscape;
  XlApp.Visible := True;
  Screen.Cursor := crDefault;
end;

板凳


提供多一个例子给你参考,。DELPHI共同交流学习…………
function TPubData.OutPutDBF(Src:TDBDataSet;SrcGrid:TDBGrid; TrgName: string): Boolean;
var
  elapp,workbook:variant;
  xelfileName: string;
  I,J: integer;
begin
  xelfilename :='c:\temp\'+TrgName+'.xls';
  try
    elapp :=CreateOLEObject('Excel.Application');//;
    workbook := CreateOLEObject('Excel.Sheet');
    workbook := Elapp.workbooks.add;
    For I := 0 to Src.FieldCount - 2 do
      elapp.cells(1,I+1) := SrcGrid.Columns[I].Title.Caption;
    With Src do
    begin
      DisableControls;
      First;
      J := 2;
      While not eof do
      begin
        For I := 1 to Src.FieldCount do
          elapp.cells(J,I) := Fields[I-1].AsString;
        Next;
        Inc(J);
      end;
      First;
      EnableControls;
    end;
    workbook.saveas(xelfilename);
    workbook.close;
    elapp.Quit;
    elapp := unassigned;
  except
    ShowMessage('您的机器里未安装Microsoft Excel');
    exit;
  end;
  ShowMessage(MSG_SAVE_DOON)
end;

3 楼

en  谢谢你啊我要是有什么不明白的可以问你吗
我看着这么多不知道从什么地方下手啊
这么长啊

4 楼

能告诉我你的qq号吗

我来回复

您尚未登录,请登录后再回复。点此登录或注册