ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

导出EXCEL

2022-05-09 21:04:25  阅读:143  来源: 互联网

标签:do begin end EXCEL 导出 ws iCol DBGridEh1



function ExportExcel(DBGridEh1: TDBGridEh;aTitle: string): Boolean;
var
  Book: IXLSWorkbook;
  ws: IXLSWorksheet;
  iSel,iCol,iCol1, iRow: Integer;
  SaveDialog1: TSaveDialog;
  function GetDbgridEHColumnsCount: Integer;
  var
    i: Integer;
  begin
    Result := 0;
    for i := 0 to DBGridEh1.Columns.Count - 1 do
    begin
      if DBGridEh1.Columns.Items[i].Visible then
      begin
        Inc(Result);
      end;
    end;
  end;
begin
  SaveDialog1 := TSaveDialog.Create(nil);
  SaveDialog1.Filter := 'Excel文件(*.xls)|*.xls';
  try
    DBGridEh1.DataSource.DataSet.DisableControls;
    iSel := DBGridEh1.DataSource.DataSet.RecNo;
    if SaveDialog1.Execute then
    begin
      try
        Book := TXLSWorkbook.Create;
        ws := Book.Sheets.Add;
        ws.Name := '导出数据';
        iCol := GetDbgridEHColumnsCount;
        iRow := DBGridEh1.DataSource.DataSet.RecordCount;
        //单据头
        with ws.RCRange[2, 2, 2, iCol + 1] do
        begin
          Interior.ColorIndex := 9;
          Font.ColorIndex := 2;
          VerticalAlignment := xlVAlignCenter;
          HorizontalAlignment := xlHAlignCenter;
          RowHeight := 22; 
        end;

        //表格样式
        with ws.RCRange[2, 2,iRow+2, iCol +1] do
        begin
          Borders.Color := 9;
        end;

        //标题
        with ws.RCRange[1, 2, 1, iCol+ 1] do
        begin
          Merge(false);
          HorizontalAlignment := xlHAlignCenter;
          VerticalAlignment := xlVAlignCenter;
          RowHeight := 30;
          Font.Bold := True;
          Font.Size := Font.Size + 3;
        end;
  
        with DBGridEh1 do
        begin
          iCol1 := 0;
          for iCol := 0 to DBGridEh1.Columns.Count - 1 do
          begin
            if DBGridEh1.Columns.Items[iCol].Visible then
            begin
              ws.Cells.Item[2, iCol1+2].Value := DBGridEh1.Columns.Items[iCol].Title.Caption;
              ws.RCRange[2,iCol1+2,2,iCol1 + 2].ColumnWidth := Trunc(DBGridEh1.Columns.Items[iCol].Width* 0.1433);
              Inc(iCol1);
            end;
          end;
        end;
        iCol := 0;

        DBGridEh1.DataSource.DataSet.First;
        with DBGridEh1.DataSource.DataSet do
        begin
          for iRow := 0 to RecordCount - 1 do
          begin
            iCol1 := 0;
            for iCol := 0 to DBGridEh1.Columns.Count  - 1 do
            begin
              if DBGridEh1.Columns.Items[iCol].Visible then
              begin 
                ws.Cells.Item[iRow+3, iCol1+2].Value := FieldByName(DBGridEh1.Columns.Items[iCol].FieldName).Text;
                Inc(iCol1);
              end; 
            end;
            Next;
          end;
        end;

        ws.Cells.Item[1, 2].Value := aTitle;
        Book.SaveAs(SaveDialog1.FileName + '.xls');
        Book := nil; 
        if MessageBox(0,'导出成功,是否要打开此文档?','询问',MB_YESNO + MB_ICONQUESTION) = IDYES then
        begin
          ShellExecute(0,'open',PAnsiChar(SaveDialog1.FileName + '.xls'),nil,nil,SW_NORMAL);
        end;
      except 
      end;
    end;
  finally
    DBGridEh1.DataSource.DataSet.RecNo := iSel;
    DBGridEh1.DataSource.DataSet.EnableControls;
    FreeAndNil(SaveDialog1);
  end;
end;

function ExportExcel(aAdoquery: TADOQuery;aTitle: string): Boolean;
var
  Book: IXLSWorkbook;
  ws: IXLSWorksheet;
  iCol, iRow: Integer;
  SaveDialog1: TSaveDialog;
begin
  SaveDialog1 := TSaveDialog.Create(nil);
  SaveDialog1.Filter := 'Excel文件(*.xls)|*.xls';
  try
    if SaveDialog1.Execute then
    begin
      Result := False;
      try
        Book := TXLSWorkbook.Create;
        ws := Book.Sheets.Add;
        ws.Name := '导出数据';
        iCol := aAdoquery.FieldCount;
        iRow := aAdoquery.RecordCount;
        //单据头
        with ws.RCRange[2, 2, 2, iCol + 1] do
        begin
          Interior.ColorIndex := 9;
          Font.ColorIndex := 2;
          VerticalAlignment := xlVAlignCenter;
          HorizontalAlignment := xlHAlignCenter;
          RowHeight := 22; 
        end;

        //表格样式
        with ws.RCRange[2, 2,iRow+2, iCol +1] do
        begin
          Borders.Color := 9;
        end;

        //标题
        with ws.RCRange[1, 2, 1, iCol+ 1] do
        begin
          Merge(false);
          HorizontalAlignment := xlHAlignCenter;
          VerticalAlignment := xlVAlignCenter;
          RowHeight := 30;
          Font.Bold := True;
          Font.Size := Font.Size + 3;
        end;
  
        with aAdoquery do
        begin
          for iCol := 0 to FieldCount - 1 do
          begin
            ws.Cells.Item[2, iCol+2].Value := Fields[iCol].DisplayName;
      //      ws.RCRange[2,icol+2,2,iCol + 2].ColumnWidth :=  Fields[iCol].DisplayWidth;
          end;
        end;
    
        with aAdoquery do
        begin
          for iRow := 0 to RecordCount - 1 do
          begin
            for iCol := 0 to FieldCount - 1 do
            begin
              ws.Cells.Item[iRow+3, iCol+2].Value :=Fields[iCol].Text;
            end;
            Next;
          end;
        end;

        ws.Cells.Item[1, 2].Value := aTitle;
        Book.SaveAs(SaveDialog1.FileName + '.xls');
        Book := nil;
        Result := True;
        if MessageBox(0,'导出成功,是否要打开此文档?','询问',MB_YESNO + MB_ICONQUESTION) = IDYES then
        begin
          ShellExecute(0,'open',PAnsiChar(SaveDialog1.FileName + '.xls'),nil,nil,SW_NORMAL);
        end;
      except 
      end;
    end;
  finally
    FreeAndNil(SaveDialog1);
  end;
end;

标签:do,begin,end,EXCEL,导出,ws,iCol,DBGridEh1
来源: https://www.cnblogs.com/masg/p/16250868.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有