这个是不是比较难,能给出一些原码吗?

解决方案 »

  1.   

    interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ExtCtrls, Grids, DBGrids,Excel2000,ComObj, Mask, DB,
      DBClient;
    注意:Excel2000,ComObj,还有数组的应用procedure TkqForm11.Button4Click(Sender: TObject);
    begin
    dmd.bak1.First;
    while not dmd.bak1.Eof do
    begin
    dy.Append;
    dy.FieldByName('工号').AsString:=dmd.bak1.FieldByName('工号').AsString;
    dy.FieldByName('姓名').AsString:=dmd.bak1.FieldByName('姓名').AsString;
    dy.FieldByName('部门').AsString:=dmd.bak1.FieldByName('部门').AsString;
    dy.FieldByName('加班时间').Asfloat:=dmd.bak1.FieldByName('加班时间').Asfloat;
    dy.FieldByName('上班时间').AsString:=dmd.bak1.FieldByName('上班时间').AsString;
    dy.FieldByName('下班时间').AsString:=dmd.bak1.FieldByName('下班时间').AsString;
    dy.FieldByName('出勤').AsString:=dmd.bak1.FieldByName('出勤').AsString;
    dy.FieldByName('班次').AsString:=dmd.bak1.FieldByName('班次').AsString;
    dy.FieldByName('迟到时间').Asfloat:=dmd.bak1.FieldByName('迟到时间').Asfloat;
    dy.FieldByName('早退时间').Asfloat:=dmd.bak1.FieldByName('早退时间').Asfloat;
    dy.Post;
    dmd.bak1.Next;
    end;
     for i:=0 to dy.FieldCount-1 do
     azdbg[i]:=dy.FieldList[i].FieldName;
     azint:=i;
      for k:=0 to azint do
      listbox1.Items.Add(azdbg[k]);
       for k:=0 to listbox1.Items.Count-1 do
        begin
        azfld[k]:=listbox1.Items.Strings[k];
        aztit[k]:=listbox1.Items.Strings[k];
        azstr[k]:=copy(mystring,k+1,1);
        end;
      try
        Excelid:=CreateOleObject( 'Excel.Application' );
      except
        on Exception do raise exception.Create('无法创建Xls文件,请确认是否安装EXCEL')
      end;
      m:=azint-1;
      Excelid.Visible := True;
      Excelid.WorkBooks.Add;
      Excelid.Caption :='考勤记录';
      //s:='A1:I1';
      s:='A1:'+azstr[m]+'1';
     Excelid.worksheets[1].range[s].Merge(True);
      Excelid.WorkSheets[1].Cells[1,1].Value :=str1+'考勤记录';
      //++++++++++
      s:='A2:'+azstr[m-5]+'2';
      Excelid.worksheets[1].range[s].Merge(True);
      Excelid.WorkSheets[1].Cells[2,1].Value :='打印部门:'+'人事考勤管理';
     { if checkbox1.Checked=false then
      Excelid.WorkSheets[1].Cells[2,1].Value :='部门:'+dmd.do1.FieldByName('部门').AsString;
      else}   ////  s:='F2:'+azstr[m]+'2';
      Excelid.worksheets[1].range[s].Merge(True);
      Excelid.WorkSheets[1].Cells[2,6].Value :='打印日期:'+copy(maskedit1.EditText,6,2)+'年'+copy(maskedit1.EditText,6,2)+'月'+copy(maskedit1.EditText,9,2)+'日';
     {
      s:='A2:'+azstr[m]+'2';
      Excelid.worksheets[1].range[s].Merge(True);
      Excelid.WorkSheets[1].Cells[2,1].Value :='打印日期:'+copy(maskedit1.EditText,6,2)+'年'+copy(maskedit1.EditText,6,2)+'月'+copy(maskedit1.EditText,9,2)+'日';
      }
      s:='A1:'+azstr[m]+'1';
      Excelid.worksheets[1].range[s].HorizontalAlignment := $FFFFEFF4;
      Excelid.worksheets[1].range[s].VerticalAlignment := $FFFFEFF4;
    {  s:='A2:'+azstr[m-9]+'2';
      Excelid.worksheets[1].range[s].HorizontalAlignment := $FFFFEFF4;
      Excelid.worksheets[1].range[s].VerticalAlignment := $FFFFEFF4;
      }
      Excelid.worksheets[1].Columns[1].ColumnWidth := 5;
      Excelid.worksheets[1].Columns[2].ColumnWidth := 6;
      Excelid.worksheets[1].Columns[3].ColumnWidth := 8;
    //**************************************************************************************************
      i:=3;
      for j:=1 to azint do
       begin
       Excelid.WorkSheets[1].Cells[i,j].Value := aztit[j-1];
       end;
      s:='A1:'+azstr[m]+'1';
      Excelid.worksheets[1].Range[s].Font.Name := '宋体';
      Excelid.worksheets[1].Range[s].Font.Size := 20;
      Excelid.worksheets[1].range[s].font.bold:=true;
      s:='A2:'+azstr[m]+'2';
      Excelid.worksheets[1].Range[s].Font.Size := 10;
      Excelid.worksheets[1].range[s].font.bold:=true;
    //*****************************************************************************************i:=4;
    if dy.RecordCount>0 then
     begin
    dy.First;
    while not dy.Eof do
     begin
      for j:=1 to azint do
       begin
       Excelid.WorkSheets[1].Cells[i,j].Value := dy.FieldByName(azfld[j-1]).asstring;
     //  Excelid.WorkSheets[1].Cells[i+1,j].Value := aztit[j-1];
       s:='A'+IntToStr(i+1)+':'+azstr[m]+IntToStr(i-1);
      {  Excelid.worksheets[1].Range[s].Font.Name := '宋体';
        Excelid.worksheets[1].Range[s].Font.size := 12;
        Excelid.worksheets[1].Range[s].RowHeight := 14;
        Excelid.worksheets[1].Range[s].HorizontalAlignment := $FFFFEFF4;
        Excelid.worksheets[1].Range[s].VerticalAlignment := $FFFFEFF4;}
        Excelid.worksheets[1].range[s].font.bold:=true;
       end;
     i:=i+1;
     dy.Next;
     end;
        s:='A3:'+azstr[m]+IntToStr(i-1);
        Excelid.worksheets[1].Range[s].Font.Name := '宋体';
        Excelid.worksheets[1].Range[s].Font.size := 10;
        Excelid.worksheets[1].Range[s].RowHeight := 14;
        Excelid.worksheets[1].Range[s].HorizontalAlignment := $FFFFEFF4;
        Excelid.worksheets[1].Range[s].VerticalAlignment := $FFFFEFF4;
        s:='A3:'+azstr[m]+IntToStr(i-1);
        Excelid.worksheets[1].Range[s].Borders.LineStyle := 1;
     end;
    {else
     s:='A2:'+azstr[m]+IntToStr(i);
        Excelid.ActiveSheet.PageSetup.CenterFooter := '共&N页,第&P页';
        Excelid.ActiveSheet.PageSetup.TopMargin := 1/0.035;
        Excelid.ActiveSheet.PageSetup.RightMargin := 1/0.035;
        Excelid.ActiveSheet.PageSetup.LeftMargin := 1/0.035;
        Excelid.ActiveSheet.PageSetup.BottomMargin := 1/0.035;
      }
    end;
      

  2.   

    谢谢大家,不太好搜。
    先学习一下taiguang(银狐)的代码。
    我用的是quickreport.
      

  3.   

    关键是我现在preview界面上加不了按钮啊
      

  4.   

    如果需要在打印预览界面上有按钮,我的做法是将打印预览窗体重新做,增加自己需要的按钮和代码。
    然后在quickreport重载此窗体
    procedure Tprintdb.QuickRepPreview(Sender: TObject);
    begin
     with printerdb.TPreviewDB.Create(Application) do//创建自己做的打印预览的窗体printerdb
      begin
       QRPreview1.QRPrinter:=TQRPrinter(sender);
       CurRep:=printdb;//指定此窗体
       show;
      end;
    end;
      

  5.   

    改Quickrep的源代码啊
    要不然你直接加一个QRExcelFilter控件也可以在点保存时选择EXCEL啊