请问 怎样将网格中的数据导入到EXCEL呀??

时间:2021-08-11 20:39:51
请问用Delphi 7 怎样将网格DBGrid中的数据导入到EXCEL呀??

7 个解决方案

#1


搜索一下

#2


procedure TLogQueryForm.SaveAsExcel(FileName:string);
var
    ExcelApp,WorkBook: Variant;
    i,j,k:integer;   //i列No,j行No,k可见列
    s:string;
    SavePlace: TBookmark;
    Range :Variant;
    ProgressThread:THSProgressThread;
    CurRecCount:integer;
begin
    try
      ExcelApp := CreateOleObject( 'Excel.Application' );
      WorkBook := CreateOleObject('Excel.Sheet');
    Except
      Exception.Create('对不起,您的机器上没有安装Microsoft Excel,该文件不能生成!');
      Exit;
    End; //try...Except

    if FileExists(FileName) then
      DeleteFile(FileName);

     SavePlace:=nil;
     try
       SavePlace := QryLog.GetBookmark;
       QryLog.DisableControls;
       QryLog.First;
       ProgressThread :=THSProgressThread.Create(Format('正在导出到%s文档(共%d条)...',['Excel',QryLog.RecordCount]),'导出进度',QryLog.RecordCount,1);
       try
           ExcelApp.Visible := false;
           ExcelApp.Caption := '导出文件';
           WorkBook := ExcelApp.WorkBooks.Add;

           ExcelApp.ActiveSheet.Name := '系统操作日志';

           //导出标题...
           k:=0;
           for i := 0 to dbgLog.Columns.Count-1  do
           begin
               if not dbgLog.Columns[i].Visible then Continue;
               ExcelApp.Cells(1,k+1)  := dbgLog.Columns[i].Title.Caption;
               if dbgLog.Columns[i].Field.DataType = ftString  then
               begin
                 ExcelApp.ActiveSheet.Columns[k+1].numberformatlocal:= '@';
                 ExcelApp.ActiveSheet.Columns[k+1].ColumnWidth:= Max(dbgLog.Columns[i].Field.Size,dbgLog.Columns[i].Width/8);
{
                 if Assigned(DBGrid.Columns[i].Field.OnGetText) then
                     ExcelApp.ActiveSheet.Columns[k+1].ColumnWidth := 30  //需要代码转名称字段默认长度30
                 else
                     ExcelApp.ActiveSheet.Columns[k+1].ColumnWidth := DBGrid.Columns[i].Field.Size;
                 if Cardinal(DBGrid.Columns[i].Field.Size)<strlen(pchar(DBGrid.Columns[i].Title.Caption)) then
                     ExcelApp.ActiveSheet.Columns[k+1].ColumnWidth := strlen(pchar(DBGrid.Columns[i].Title.Caption));
}
               end;
               k:=k+1;
           end;

           //导出每行数据...
           j:=2;
           while not QryLog.Eof do
           begin
               k:=0;
               for i:=0 to dbgLog.Columns.Count-1  do
               begin
                   if not dbgLog.Columns[i].Visible then Continue;
                   s := dbgLog.Columns[i].Field.DisplayText;
                   ExcelApp.Cells(j,k+1) := s;
                   k:=k+1;
               end;//i
               j:=j+1;
               QryLog.Next;

               if ProgressThread.Terminated then  Exit;
               ProgressThread.SetPosition(j);
//               if Assigned(FOnSaveToFile) then FOnSaveToFile(Index,FileName,QuyRecordCount,j);
           end;

           //标题栏字体,背景色
           ExcelApp.ActiveSheet.Rows[1].Font.Name   := '宋体';
           ExcelApp.ActiveSheet.Rows[1].Font.Color  := clBlack;

           Range := ExcelApp.ActiveSheet.Range['A'+'1'+':'+DecTo26(k-1)+'1'];
           Range.interior.Color := clSilver;

           //自动加外边框
           Range := ExcelApp.ActiveSheet.Range['A'+'1'+':'+DecTo26(k-1)+inttostr(j-1)];
           Range.Borders.LineStyle := 1;
           Range.WrapText:=True;
           Range.VerticalAlignMent:= 1;
           Range.HorizontalAlignment:=1;

           //保存文件
           WorkBook.Saveas(FileName);
       except
         Application.MessageBox(PChar('生成Excel文件【'+FileName+'】出错!'),'提示',MB_OK+MB_ICONINFORMATION);
       end;
     finally
       ProgressThread.Free;
       QryLog.EnableControls;
       QryLog.GotoBookmark(SavePlace);
       QryLog.FreeBookmark(SavePlace);
       WorkBook.Close;
       ExcelApp.Quit;
     end;
end;

#3



procedure Tfrmptax.Button3Click(Sender: TObject);
  var  ExcelApp,WorkBook:OLEVariant;
       i,j :integer;
       xlsFileName:string;
       recycle_length:integer;
       s_date:string;

   begin
   s_date:=edit2.Text;
   savedialog2.Execute;
   xlsFileName:=savedialog2.FileName ;
        if xlsfilename=''  then
        begin
        showmessage('操作成功取消!');
        end
        else
           begin
           if edit2.text=''then
           begin

                with query4 do
                begin
                CommUtils.initialQuery(Query4,'select count(T_id),sum(T_taxable),sum(T_amountax) from tax');
                open;
                recycle_length:=query4.Fields[0].AsInteger ;

                end;

                progressbar1.Max := recycle_length;
                progressbar1.position:=0;
                try
                 ExcelApp:= CreateOleObject( 'Excel.Application' );
                 WorkBook:=CreateOleobject('Excel.Sheet');
                except
                 application.Messagebox('无法打开Xls文件,请确认已 经安装EXCEL.','',mb_OK+mb_IconStop);

                 Exit;
                 end;
                //workBook:= ExcelApp.workBooks.Open(ExtractFileDir(Application.ExeName)+'excel.xls');
                WorkBook:=ExcelApp.workbooks.Add;
                ExcelApp.Cells(1,1):='条数';
                ExcelApp.Cells(1,2):='工号';

                ExcelApp.Cells(1,3):='姓名';
                ExcelApp.Cells(1,4):='人民币合计';
                ExcelApp.Cells(1,5):='减除费用额';

                ExcelApp.Cells(1,6):='应纳税所得税';
                ExcelApp.Cells(1,7):='税率';
                ExcelApp.Cells(1,8):='速算扣除数';
                ExcelApp.Cells(1,9):='扣缴所得税额';
                j:=1;
                //.
                CommUtils.initialTable(table3,TBLNAME_TAX+'.dbf');
                //.
                table3.Open;
                table3.First;
                for i:=2 to recycle_length+1 do
                begin

                ExcelApp.Cells(i,1):=j;
                ExcelApp.Cells(i,2):=table3.fieldbyname('T_id').Asstring;
                ExcelApp.Cells(i,3):=table3.fieldbyname('T_name').Asstring;
                ExcelApp.Cells(i,4):=table3.fieldbyname('T_total').Asfloat;
                ExcelApp.Cells(i,5):=table3.fieldbyname('T_deduct').Asfloat;

                ExcelApp.Cells(i,6):=table3.fieldbyname('T_taxable').Asstring;
                ExcelApp.Cells(i,7):=FloatToStr(table3.fieldbyname('T_taxrate').asFloat*100)+'%';
                ExcelApp.Cells(i,8):=table3.fieldbyname('T_quick').Asfloat;
                ExcelApp.Cells(i,9):=table3.fieldbyname('T_amountax').Asfloat;

                j:=j+1;

                table3.next;
                progressbar1.position:=progressbar1.position+1;
                progressbar1.refresh ;
                end;
                ExcelApp.Cells(recycle_length+2,1):='合计';
                ExcelApp.Cells(recycle_length+2,6):=query4.Fields[1].Asfloat;
                ExcelApp.Cells(recycle_length+2,9):=query4.Fields[2].Asfloat;

                WorkBook.SaveAS(xlsFileName);

                WorkBook.close;
                 ShowMessage('导入Excel成功!');
                end
               else
               begin
                 with query4 do
                 begin
                 CommUtils.initialQuery(Query4,'select count(T_id),sum(T_taxable),sum(T_amountax) from tax'
                  +' where T_date = '+ #39+s_date+#39);
                 open;
                 recycle_length:=query4.Fields[0].AsInteger ;
                 end;

                 with query5 do
                 begin
                 CommUtils.initialQuery(Query5,'select T_id,T_name,T_total,T_deduct,T_taxrate,T_quick, T_taxable,T_amountax from tax '
                  +'where T_date ='+ #39+s_date+#39+'order by T_id');
                 open;
                 end;

                progressbar1.Max := recycle_length;
                progressbar1.position:=0;
                try
                 ExcelApp:= CreateOleObject( 'Excel.Application' );
                 WorkBook:=CreateOleobject('Excel.Sheet');
                except
                 application.Messagebox('无法打开Xls文件,请确认已 经安装EXCEL.','',mb_OK+mb_IconStop);

                 Exit;
                 end;
                //workBook:= ExcelApp.workBooks.Open(ExtractFileDir(Application.ExeName)+'excel.xls');
                WorkBook:=ExcelApp.workbooks.Add;
                ExcelApp.Cells(1,1):='条数';
                ExcelApp.Cells(1,2):='工号';

                ExcelApp.Cells(1,3):='姓名';
                ExcelApp.Cells(1,4):='人民币合计';
                ExcelApp.Cells(1,5):='减除费用额';

                ExcelApp.Cells(1,6):='应纳税所得税';
                ExcelApp.Cells(1,7):='税率';
                ExcelApp.Cells(1,8):='速算扣除数';
                ExcelApp.Cells(1,9):='扣缴所得税额';

                j:=1;
                CommUtils.initialTable(table3,TBLNAME_TAX+'.dbf');
                table3.Open;
                table3.First;
                for i:=2 to recycle_length+1 do
                begin

                ExcelApp.Cells(i,1):=j;
                ExcelApp.Cells(i,2):=Query5.fieldbyname('T_id').Asstring;
                ExcelApp.Cells(i,3):=Query5.fieldbyname('T_name').Asstring;
                ExcelApp.Cells(i,4):=Query5.fieldbyname('T_total').Asfloat;
                ExcelApp.Cells(i,5):=Query5.fieldbyname('T_deduct').Asfloat;

                ExcelApp.Cells(i,6):=Query5.fieldbyname('T_taxable').Asstring;
                ExcelApp.Cells(i,7):=FloatToStr(Query5.fieldbyname('T_taxrate').asFloat*100)+'%';
                ExcelApp.Cells(i,8):=Query5.fieldbyname('T_quick').Asfloat;
                ExcelApp.Cells(i,9):=Query5.fieldbyname('T_amountax').Asfloat;

                j:=j+1;

                query5.next;
                progressbar1.position:=progressbar1.position+1;
                progressbar1.refresh ;
                end;
                ExcelApp.Cells(recycle_length+2,1):='合计';
                ExcelApp.Cells(recycle_length+2,6):=query4.Fields[1].Asfloat;
                ExcelApp.Cells(recycle_length+2,9):=query4.Fields[2].Asfloat;

                WorkBook.SaveAS(xlsFileName);

                WorkBook.close;
                 ShowMessage('导入Excel成功!');

               end;

           end;

end;

#4


up
网上代码n多

#5


uses ComObj;
{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  MSExcel:Variant;
  i,j:integer;
begin
  SaveDialog1.Filter:='*.XLS|*.XLS';
  SaveDialog1.DefaultExt:='XLS';
  if SaveDialog1.Execute then
  begin
    MsExcel:=createOLEobject('excel.application');
    MsExcel.workBooks.add;
    Msexcel.visible:=false;
    with DataSource1.Dataset  do
    begin
      first;
      for i:=0 to fieldcount-1 do
      begin
        Msexcel.cells[1,i+1].value:=fields[i].DisplayLabel ;
      end;
      j:=2;
      while not eof do
      begin
        for i:=0 to fieldcount-1 do
        begin
          Msexcel.cells[j,i+1].numberformat:='@';
          Msexcel.cells[j,i+1].value:=fields[i].AsString ;
        end;
        inc(j);
        next;
      end;
    end;
    MSExcel.ActiveWorkBook.SaveAs(SaveDialog1.FileName);
    MSExcel.ActiveWorkBook.Saved:=True;
    MSExcel.Quit;
  end;
end;

#6


UP ...

#7


谢谢大家帮忙!!特别感谢workers,pdbird,alinsoft

#1


搜索一下

#2


procedure TLogQueryForm.SaveAsExcel(FileName:string);
var
    ExcelApp,WorkBook: Variant;
    i,j,k:integer;   //i列No,j行No,k可见列
    s:string;
    SavePlace: TBookmark;
    Range :Variant;
    ProgressThread:THSProgressThread;
    CurRecCount:integer;
begin
    try
      ExcelApp := CreateOleObject( 'Excel.Application' );
      WorkBook := CreateOleObject('Excel.Sheet');
    Except
      Exception.Create('对不起,您的机器上没有安装Microsoft Excel,该文件不能生成!');
      Exit;
    End; //try...Except

    if FileExists(FileName) then
      DeleteFile(FileName);

     SavePlace:=nil;
     try
       SavePlace := QryLog.GetBookmark;
       QryLog.DisableControls;
       QryLog.First;
       ProgressThread :=THSProgressThread.Create(Format('正在导出到%s文档(共%d条)...',['Excel',QryLog.RecordCount]),'导出进度',QryLog.RecordCount,1);
       try
           ExcelApp.Visible := false;
           ExcelApp.Caption := '导出文件';
           WorkBook := ExcelApp.WorkBooks.Add;

           ExcelApp.ActiveSheet.Name := '系统操作日志';

           //导出标题...
           k:=0;
           for i := 0 to dbgLog.Columns.Count-1  do
           begin
               if not dbgLog.Columns[i].Visible then Continue;
               ExcelApp.Cells(1,k+1)  := dbgLog.Columns[i].Title.Caption;
               if dbgLog.Columns[i].Field.DataType = ftString  then
               begin
                 ExcelApp.ActiveSheet.Columns[k+1].numberformatlocal:= '@';
                 ExcelApp.ActiveSheet.Columns[k+1].ColumnWidth:= Max(dbgLog.Columns[i].Field.Size,dbgLog.Columns[i].Width/8);
{
                 if Assigned(DBGrid.Columns[i].Field.OnGetText) then
                     ExcelApp.ActiveSheet.Columns[k+1].ColumnWidth := 30  //需要代码转名称字段默认长度30
                 else
                     ExcelApp.ActiveSheet.Columns[k+1].ColumnWidth := DBGrid.Columns[i].Field.Size;
                 if Cardinal(DBGrid.Columns[i].Field.Size)<strlen(pchar(DBGrid.Columns[i].Title.Caption)) then
                     ExcelApp.ActiveSheet.Columns[k+1].ColumnWidth := strlen(pchar(DBGrid.Columns[i].Title.Caption));
}
               end;
               k:=k+1;
           end;

           //导出每行数据...
           j:=2;
           while not QryLog.Eof do
           begin
               k:=0;
               for i:=0 to dbgLog.Columns.Count-1  do
               begin
                   if not dbgLog.Columns[i].Visible then Continue;
                   s := dbgLog.Columns[i].Field.DisplayText;
                   ExcelApp.Cells(j,k+1) := s;
                   k:=k+1;
               end;//i
               j:=j+1;
               QryLog.Next;

               if ProgressThread.Terminated then  Exit;
               ProgressThread.SetPosition(j);
//               if Assigned(FOnSaveToFile) then FOnSaveToFile(Index,FileName,QuyRecordCount,j);
           end;

           //标题栏字体,背景色
           ExcelApp.ActiveSheet.Rows[1].Font.Name   := '宋体';
           ExcelApp.ActiveSheet.Rows[1].Font.Color  := clBlack;

           Range := ExcelApp.ActiveSheet.Range['A'+'1'+':'+DecTo26(k-1)+'1'];
           Range.interior.Color := clSilver;

           //自动加外边框
           Range := ExcelApp.ActiveSheet.Range['A'+'1'+':'+DecTo26(k-1)+inttostr(j-1)];
           Range.Borders.LineStyle := 1;
           Range.WrapText:=True;
           Range.VerticalAlignMent:= 1;
           Range.HorizontalAlignment:=1;

           //保存文件
           WorkBook.Saveas(FileName);
       except
         Application.MessageBox(PChar('生成Excel文件【'+FileName+'】出错!'),'提示',MB_OK+MB_ICONINFORMATION);
       end;
     finally
       ProgressThread.Free;
       QryLog.EnableControls;
       QryLog.GotoBookmark(SavePlace);
       QryLog.FreeBookmark(SavePlace);
       WorkBook.Close;
       ExcelApp.Quit;
     end;
end;

#3



procedure Tfrmptax.Button3Click(Sender: TObject);
  var  ExcelApp,WorkBook:OLEVariant;
       i,j :integer;
       xlsFileName:string;
       recycle_length:integer;
       s_date:string;

   begin
   s_date:=edit2.Text;
   savedialog2.Execute;
   xlsFileName:=savedialog2.FileName ;
        if xlsfilename=''  then
        begin
        showmessage('操作成功取消!');
        end
        else
           begin
           if edit2.text=''then
           begin

                with query4 do
                begin
                CommUtils.initialQuery(Query4,'select count(T_id),sum(T_taxable),sum(T_amountax) from tax');
                open;
                recycle_length:=query4.Fields[0].AsInteger ;

                end;

                progressbar1.Max := recycle_length;
                progressbar1.position:=0;
                try
                 ExcelApp:= CreateOleObject( 'Excel.Application' );
                 WorkBook:=CreateOleobject('Excel.Sheet');
                except
                 application.Messagebox('无法打开Xls文件,请确认已 经安装EXCEL.','',mb_OK+mb_IconStop);

                 Exit;
                 end;
                //workBook:= ExcelApp.workBooks.Open(ExtractFileDir(Application.ExeName)+'excel.xls');
                WorkBook:=ExcelApp.workbooks.Add;
                ExcelApp.Cells(1,1):='条数';
                ExcelApp.Cells(1,2):='工号';

                ExcelApp.Cells(1,3):='姓名';
                ExcelApp.Cells(1,4):='人民币合计';
                ExcelApp.Cells(1,5):='减除费用额';

                ExcelApp.Cells(1,6):='应纳税所得税';
                ExcelApp.Cells(1,7):='税率';
                ExcelApp.Cells(1,8):='速算扣除数';
                ExcelApp.Cells(1,9):='扣缴所得税额';
                j:=1;
                //.
                CommUtils.initialTable(table3,TBLNAME_TAX+'.dbf');
                //.
                table3.Open;
                table3.First;
                for i:=2 to recycle_length+1 do
                begin

                ExcelApp.Cells(i,1):=j;
                ExcelApp.Cells(i,2):=table3.fieldbyname('T_id').Asstring;
                ExcelApp.Cells(i,3):=table3.fieldbyname('T_name').Asstring;
                ExcelApp.Cells(i,4):=table3.fieldbyname('T_total').Asfloat;
                ExcelApp.Cells(i,5):=table3.fieldbyname('T_deduct').Asfloat;

                ExcelApp.Cells(i,6):=table3.fieldbyname('T_taxable').Asstring;
                ExcelApp.Cells(i,7):=FloatToStr(table3.fieldbyname('T_taxrate').asFloat*100)+'%';
                ExcelApp.Cells(i,8):=table3.fieldbyname('T_quick').Asfloat;
                ExcelApp.Cells(i,9):=table3.fieldbyname('T_amountax').Asfloat;

                j:=j+1;

                table3.next;
                progressbar1.position:=progressbar1.position+1;
                progressbar1.refresh ;
                end;
                ExcelApp.Cells(recycle_length+2,1):='合计';
                ExcelApp.Cells(recycle_length+2,6):=query4.Fields[1].Asfloat;
                ExcelApp.Cells(recycle_length+2,9):=query4.Fields[2].Asfloat;

                WorkBook.SaveAS(xlsFileName);

                WorkBook.close;
                 ShowMessage('导入Excel成功!');
                end
               else
               begin
                 with query4 do
                 begin
                 CommUtils.initialQuery(Query4,'select count(T_id),sum(T_taxable),sum(T_amountax) from tax'
                  +' where T_date = '+ #39+s_date+#39);
                 open;
                 recycle_length:=query4.Fields[0].AsInteger ;
                 end;

                 with query5 do
                 begin
                 CommUtils.initialQuery(Query5,'select T_id,T_name,T_total,T_deduct,T_taxrate,T_quick, T_taxable,T_amountax from tax '
                  +'where T_date ='+ #39+s_date+#39+'order by T_id');
                 open;
                 end;

                progressbar1.Max := recycle_length;
                progressbar1.position:=0;
                try
                 ExcelApp:= CreateOleObject( 'Excel.Application' );
                 WorkBook:=CreateOleobject('Excel.Sheet');
                except
                 application.Messagebox('无法打开Xls文件,请确认已 经安装EXCEL.','',mb_OK+mb_IconStop);

                 Exit;
                 end;
                //workBook:= ExcelApp.workBooks.Open(ExtractFileDir(Application.ExeName)+'excel.xls');
                WorkBook:=ExcelApp.workbooks.Add;
                ExcelApp.Cells(1,1):='条数';
                ExcelApp.Cells(1,2):='工号';

                ExcelApp.Cells(1,3):='姓名';
                ExcelApp.Cells(1,4):='人民币合计';
                ExcelApp.Cells(1,5):='减除费用额';

                ExcelApp.Cells(1,6):='应纳税所得税';
                ExcelApp.Cells(1,7):='税率';
                ExcelApp.Cells(1,8):='速算扣除数';
                ExcelApp.Cells(1,9):='扣缴所得税额';

                j:=1;
                CommUtils.initialTable(table3,TBLNAME_TAX+'.dbf');
                table3.Open;
                table3.First;
                for i:=2 to recycle_length+1 do
                begin

                ExcelApp.Cells(i,1):=j;
                ExcelApp.Cells(i,2):=Query5.fieldbyname('T_id').Asstring;
                ExcelApp.Cells(i,3):=Query5.fieldbyname('T_name').Asstring;
                ExcelApp.Cells(i,4):=Query5.fieldbyname('T_total').Asfloat;
                ExcelApp.Cells(i,5):=Query5.fieldbyname('T_deduct').Asfloat;

                ExcelApp.Cells(i,6):=Query5.fieldbyname('T_taxable').Asstring;
                ExcelApp.Cells(i,7):=FloatToStr(Query5.fieldbyname('T_taxrate').asFloat*100)+'%';
                ExcelApp.Cells(i,8):=Query5.fieldbyname('T_quick').Asfloat;
                ExcelApp.Cells(i,9):=Query5.fieldbyname('T_amountax').Asfloat;

                j:=j+1;

                query5.next;
                progressbar1.position:=progressbar1.position+1;
                progressbar1.refresh ;
                end;
                ExcelApp.Cells(recycle_length+2,1):='合计';
                ExcelApp.Cells(recycle_length+2,6):=query4.Fields[1].Asfloat;
                ExcelApp.Cells(recycle_length+2,9):=query4.Fields[2].Asfloat;

                WorkBook.SaveAS(xlsFileName);

                WorkBook.close;
                 ShowMessage('导入Excel成功!');

               end;

           end;

end;

#4


up
网上代码n多

#5


uses ComObj;
{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  MSExcel:Variant;
  i,j:integer;
begin
  SaveDialog1.Filter:='*.XLS|*.XLS';
  SaveDialog1.DefaultExt:='XLS';
  if SaveDialog1.Execute then
  begin
    MsExcel:=createOLEobject('excel.application');
    MsExcel.workBooks.add;
    Msexcel.visible:=false;
    with DataSource1.Dataset  do
    begin
      first;
      for i:=0 to fieldcount-1 do
      begin
        Msexcel.cells[1,i+1].value:=fields[i].DisplayLabel ;
      end;
      j:=2;
      while not eof do
      begin
        for i:=0 to fieldcount-1 do
        begin
          Msexcel.cells[j,i+1].numberformat:='@';
          Msexcel.cells[j,i+1].value:=fields[i].AsString ;
        end;
        inc(j);
        next;
      end;
    end;
    MSExcel.ActiveWorkBook.SaveAs(SaveDialog1.FileName);
    MSExcel.ActiveWorkBook.Saved:=True;
    MSExcel.Quit;
  end;
end;

#6


UP ...

#7


谢谢大家帮忙!!特别感谢workers,pdbird,alinsoft