dbgridtoexcel

  1. procedure dbgridtoexcel(atitle: string; Adbgrid: Tdbgrid; Afontsize: integer = 9; Asum: boolean = true);
  2. var xlapp, xlsheet: variant;
  3.   row, j, CCC, nnn: integer;
  4.   bookmark: Tbookmark;
  5.   nn_i, nn_f: array[0..100of integer;
  6.   function GetColumnCharacters(IntNumber: Integer): string;
  7.   begin
  8.     if IntNumber < 1 then
  9.       Result := 'A'
  10.     else
  11.     begin
  12.       if IntNumber > 702 then
  13.         Result := 'ZZ'
  14.       else
  15.       begin
  16.         if IntNumber > 26 then begin
  17.           if (IntNumber mod 26) = 0 then
  18.             Result := Chr(64 + (IntNumber div 26) - 1)
  19.           else
  20.             Result := Chr(64 + (IntNumber div 26));
  21.           if (IntNumber mod 26) = 0 then
  22.             result := result + chr(64 + 26)
  23.           else
  24.             result := Result + Chr(64 + (IntNumber mod 26));
  25.         end
  26.         else
  27.           Result := Chr(64 + IntNumber);
  28.       end;
  29.     end;
  30.   end;
  31. begin
  32.   for j := 0 to 100 do begin nn_i[j] := 500; nn_f[j] := 500end;
  33.   if Adbgrid.datasource.dataset.IsEmpty then exit;
  34.   showmessage('现在导出Excel表格,可能需要几分钟时间,请耐心等候...');
  35.   try
  36.     xlapp := createoleobject('excel.application');
  37.   except
  38.     showmessage('not found excel in your system, so can not create file!');
  39.     exit;
  40.   end;
  41.   try
  42.     screen.Cursor := crHourGlass;
  43.     ccc := Adbgrid.Columns.Count;
  44.     xlapp.workbooks.add; //添加新工作簿
  45.     xlapp.visible := false;
  46.     xlsheet := xlapp.activesheet;
  47.     xlapp.activewindow.windowstate := 2;
  48.     xlapp.range[xlsheet.cells[11], xlsheet.cells[1, ccc]].MERGE;
  49.     xlsheet.cells[11].value := Atitle; //页头第一行;
  50.     xlsheet.cells[11].HorizontalAlignment := -4108;
  51.     bookmark := Adbgrid.datasource.dataset.GetBookmark;
  52.     try
  53.       Adbgrid.datasource.dataset.DisableControls;
  54.       Adbgrid.datasource.dataset.First;
  55.       row := 2;
  56.       for nnn := 1 to ccc do
  57.       begin
  58.         xlsheet.cells[row, nnn] := trim(Adbgrid.Columns[nnn - 1].title.caption);
  59.       end;
  60.       inc(row);
  61.       while not Adbgrid.datasource.dataset.Eof do
  62.       begin
  63.         for nnn := 1 to ccc do
  64.         begin
  65.           if not Adbgrid.datasource.dataset.FieldByName(trim(adbgrid.Columns[nnn - 1].FieldName)).isnull then
  66.           begin
  67.             if Adbgrid.columns[nnn - 1].field.DataType in [ftwidestring, ftstring, ftmemo] then
  68.               xlsheet.cells[row, nnn] := trim(Adbgrid.datasource.dataset.FieldByName(trim(adbgrid.Columns[nnn - 1].FieldName)).asstring)
  69.             else
  70.               if Adbgrid.columns[nnn - 1].field.DataType in [ftdate, ftdatetime] then
  71.                 xlsheet.cells[row, nnn] := Adbgrid.datasource.dataset.FieldByName(trim(adbgrid.Columns[nnn - 1].FieldName)).asdatetime
  72.               else
  73.                 if Adbgrid.columns[nnn - 1].field.DataType in [ftinteger, ftSmallint, ftWord] then
  74.                 begin
  75.                   xlsheet.cells[row, nnn] := Adbgrid.datasource.dataset.FieldByName(trim(adbgrid.Columns[nnn - 1].FieldName)).asinteger;
  76.                   nn_i[nnn] := nnn - 1;
  77.                 end
  78.                 else
  79.                   if Adbgrid.columns[nnn - 1].field.DataType in [ftFloat, ftCurrency, ftBCD] then
  80.                   begin
  81.                     xlsheet.cells[row, nnn] := Adbgrid.datasource.dataset.FieldByName(trim(adbgrid.Columns[nnn - 1].FieldName)).asfloat;
  82.                     nn_f[nnn] := nnn - 1;
  83.                   end
  84.                   else
  85.                     xlsheet.cells[row, nnn] := Adbgrid.datasource.dataset.FieldByName(trim(adbgrid.Columns[nnn - 1].FieldName)).Value;
  86.           end;
  87.         end;
  88.         xlsheet.rows[row].RowHeight := 18;
  89.         inc(row);
  90.         Adbgrid.datasource.dataset.Next;
  91.       end;
  92.     finally
  93.       Adbgrid.datasource.dataset.GotoBookmark(bookmark);
  94.       Adbgrid.datasource.dataset.FreeBookmark(bookmark);
  95.       Adbgrid.datasource.dataset.EnableControls;
  96.     end;
  97.     xlapp.visible := true;
  98.         //格式调整
  99.     xlapp.range[xlsheet.cells[row, 1], xlsheet.cells[row, 13]].WrapText := True;
  100.     xlapp.range[xlsheet.cells[row, 1], xlsheet.cells[row, 13]].HorizontalAlignment := -4108;
  101.     xlsheet.pagesetup.headerMargin := 1 / 0.035//页眉到顶端边距1cm
  102.     xlsheet.pagesetup.footerMargin := 0.6 / 0.035//页脚到底端边距1cm
  103.     xlsheet.pagesetup.topMargin := 1 / 0.035//顶边距1cm
  104.     XLSHEET.pagesetup.bottomMargin := 1.3 / 0.035//底边距1cm
  105.     xlsheet.pagesetup.leftMargin := 0.5 / 0.035//左边距1cm
  106.     xlsheet.pagesetup.rightMargin := 0.5 / 0.035//右边距1cm
  107.     xlsheet.pagesetup.leftfooter := '制表: ';
  108.     xlsheet.pagesetup.centerfooter := ''//页脚
  109.     xlsheet.pagesetup.rightfooter := '第&P页/共&N页';
  110.     xlsheet.pagesetup.leftHeader := '';
  111.     xlsheet.pagesetup.orientation := 1//横向
  112.     xlsheet.pagesetup.printtitlerows := '$1:$1';
  113.     xlsheet.rows[1].font.name := '宋体'//设置第一行字体属性
  114.     xlsheet.rows[1].font.bold := true;
  115.     xlsheet.rows[1].font.size := 20;
  116.     xlsheet.rows[1].RowHeight := 28;
  117.     for nnn := 1 to ccc do
  118.     begin
  119.       xlsheet.columns[nnn].columnwidth := Adbgrid.Columns[nnn - 1].Width * 0.1188;
  120.     end;
  121.     for nnn := 1 to 4 do begin
  122.       xlapp.range[xlsheet.cells[21], xlsheet.cells[row - 1, CCC]].borders[nnn].linestyle := 1;
  123.       xlapp.range[xlsheet.cells[21], xlsheet.cells[row - 1, CCC]].borders[nnn].weight := 1;
  124.     end;
  125.     if asum then
  126.     begin
  127.       inc(row);
  128.       for nnn := 0 to CCC - 1 do
  129.         if ((nnn = nn_i[nnn + 1]) or (nnn = nn_f[nnn + 1])) then
  130.           XLSHEET.CELLS[row, nnn + 1].value := '=sum(' + GetColumnCharacters(nnn + 1) + '2:' + GetColumnCharacters(nnn + 1) + trim(inttostr(row - 1)) + ')';
  131.     end;
  132.     xlapp.range[xlsheet.cells[21], xlsheet.cells[row - 1, CCC]].font.size := Afontsize;
  133.     xlapp.range[xlsheet.cells[21], xlsheet.cells[row - 1, ccc]].WrapText := True;
  134.     varclear(xlsheet);
  135.     varclear(xlapp);
  136.   except
  137.     on E: Exception do
  138.     begin
  139.       xlapp.quit;
  140.     end;
  141.   end;
  142.   screen.Cursor := crDefault;
  143. end;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值