回 帖 发 新 帖 刷新版面

主题:有一个问题,希望大家能帮忙解决一下。

怎样将数据库中的数据导出到EXCEL中?用delphi.

回复列表 (共6个回复)

沙发

是什么数据表?是Access表?还是db表?还是...?

板凳

就是 Microsoft Excel 工作表.xls。

3 楼

我问"数据库中的数据"是什么类型的数据表,即你想将Access表转为EXCEL?还是..?

4 楼

就是将DELEPHI中连接数据库的一些内容,比如职工信息,职工工资等转换成EXCEL表中的内容.其数据类型不限.

5 楼

EXCEL怎样导入导出数据库 
//导出数据到excel
procedure CopyDbDataToExcel(Target: TDbgrid);
var
    iCount, jCount: Integer;
    XLApp: Variant;
    Sheet: Variant;
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.Add[XLWBatWorksheet];
  XLApp.WorkBooks[1].WorkSheets[1].Name := '对帐工作薄';
  Sheet := XLApp.Workbooks[1].WorkSheets['对帐工作薄'];
  if not Target.DataSource.DataSet.Active then
  begin
    Screen.Cursor := crDefault;
    Exit;
  end;
    Target.DataSource.DataSet.first;
  for iCount := 0 to Target.Columns.Count - 1 do
  begin
     Sheet.cells[1, 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 + 1, iCount + 1] := Target.Columns.Items[iCount].Field.AsString;
     end;
     Inc(jCount);
     Target.DataSource.DataSet.Next;
  end;
     XlApp.Visible := True;
     Screen.Cursor := crDefault;
end;

procedure TfrmMain.Button1Click(Sender: TObject);
var i,j:integer;
    opendialog1:Topendialog;
    s0,s1,s2:string;
begin
   try
        opendialog1:=Topendialog.Create(self);
        opendialog1.InitialDir:=ExtractFileDir(paramstr(0));//文件的打存放初始路径
     if opendialog1.Execute then
     begin
        Try
            ExcelApplication1.Connect;//EXCEL应用程序
        Except
            Messagebox(0,'Excel 可能没有安装!!','提示!',mb_Ok);
            exit;
        End;
            ExcelApplication1.Visible[0]:=false;
            ExcelApplication1.Caption:='Excel Application';
        try 
            excelapplication1.Workbooks.Open(opendialog1.FileName,
             null,null,null,null,null,null,null,null,null,null,null,null,0);//打开指定的EXCEL 文件
        except
        begin
            ExcelApplication1.Disconnect;//出现异常情况时关闭
            ExcelApplication1.Quit;showmessage('请选择EXCEL电子表格!');
            exit;
        end;
        end;

        ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks[1]);
        //ExcelWorkbook1与Eexcelapplication1建立连接
        ExcelWorksheet1.ConnectTo(ExcelWorkbook1.Worksheets[1] as _Worksheet);
       //Excelworksheet1与Excelworkbook1建立连接 
        //开始从EXCEL中取数,取完数后关闭EXCEL
        for i:=1 to 10000 do//最大取值10000
        begin
        if trim(excelworksheet1.cells.item[i+1,1])<>'' then
        begin
           s0:= excelworksheet1.cells.item[i+1,1];
           s1:= excelworksheet1.cells.item[i+1,2];
           s2:= excelworksheet1.cells.item[i+1,3];
            with qry do
            begin
               close;
               sql.Clear;
               sql.add('insert into xsz(PZNO,PNO,TCount,inday)values('+
                ''''+s0+''''+','+''''+s1+''''+','+''''+s2+''''+','+''''+datetostr(date)+''')');
               ExecSQL;
            end;
        end 
        end;
         ExcelApplication1.Disconnect;
         ExcelApplication1.Quit;
   end;

   with qryxsz do
   begin
      sql.Clear;
      sql.Add('select * from xsz order by PZNO,PNO,TCount,inday');
      open;
   end;
   for j:=0 to   grdxsz.Columns.Count do
   grdxsz.Columns[j].Width:=64;//缩小宽度
   messagebox(0,'文件已经导入数据库!','完成!',mb_ok);
except
   ExcelApplication1.Disconnect;
   ExcelApplication1.Quit;
   exit;
  // messagebox(0,'文件已经导入数据库失败!','完成!',mb_iconError+mb_ok);
end;
end;

 try
       if qryxsz.RecordCount<1 then exit;
       CopyDbDataToExcel(Grdxsz);
    except
     //  messagebox(0,'请安装EXCEL软件,再使用本功能。','提示',mb_ok);
       exit;
    end;

6 楼

谢谢楼上的!

我来回复

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