delphi10.4.2 中用XLSReadWriteII5控件将数据库导入导出EXCEL  
官方Delphi 学习QQ群: 682628230(三千人)
频道

delphi10.4.2 中用XLSReadWriteII5控件将数据库导入导出EXCEL


最近给单位开发一个小程序要用到Excel导入导出数据库功能。现用XLSReadWriteII5控件非常方便,代码如下所示:


 


unit Umain;


interface


uses

  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,

  System.Classes, Vcl.Graphics,

  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls, Udm,

  Data.DB,

  Vcl.Grids, Vcl.DBGrids, XLSSheetData5, XLSReadWriteII5,XLSCmdFormat5;


type

  TFrmMain = class(TForm)

    Panel1: TPanel;

    Button1: TButton;

    Button2: TButton;

    Button3: TButton;

    Button4: TButton;

    DBGrid1: TDBGrid;

    OpenDialog1: TOpenDialog;

    XLSReadWriteII51: TXLSReadWriteII5;

    SaveDialog1: TSaveDialog;

    procedure Button3Click(Sender: TObject);

    procedure Button2Click(Sender: TObject);

    procedure Button1Click(Sender: TObject);

    procedure Button4Click(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end;


var

  FrmMain: TFrmMain;


implementation


{$R *.dfm}


procedure TFrmMain.Button1Click(Sender: TObject);

var

  xls: TXLSReadWriteII5;

  openFile: TOpenDialog;

  Rows, Cols: Integer; // rows行数,cols列数

begin

  xls := TXLSReadWriteII5.Create(Self); // 创建实例

  openFile := TOpenDialog.Create(Self);

  openFile.DefaultExt := 'xlsx'; // 选择默认xlsx文件


   // openFileDialog.Filter = "*|*";   {所有类型}

  //openFile.Filter := 'Excel|*.xlsx';  {单类型选择}

  openFile.Filter :=  'Excel文件|*.xlsx|Excel2003文件|*.xls';   {多种类型可以一起选择}


  try

    if openFile.Execute() then

    begin

      xls.Filename := openFile.Filename; // 读取文件名

      xls.Clear;

      xls.Read;

      // StringGrid1.RowCount := xls.Sheets[0].LastRow + 1;     //设置stringgrid总行数

      // StringGrid1.ColCount := xls.Sheets[0].LastCol + 1;     //设置stringgrid总列数


      dm.FDQuery1.Close;

      dm.FDQuery1.SQL.Clear;

      dm.FDQuery1.SQL.Text := 'SELECT * FROM T_yhks_tmp'; // 打开数据集

      dm.FDQuery1.Open;


      for Rows := 3 to xls.Sheets[0].LastRow  do  {第四行开始导入}

      { 如果excel表考号列数据与数据库表的考号相等时,跳过不导入! }

      // if  xls.Sheets[0].AsString[0, Rows] <> dm.FDQuery1.FieldbyName('kh').Asstring then


      begin

        dm.FDQuery1.Append;

        dm.FDQuery1.FieldbyName('kh').Asstring := xls.Sheets[0].Asstring[0, Rows]; { 考号 }

        dm.FDQuery1.FieldbyName('sfzh').Asstring := xls.Sheets[0].Asstring[1, Rows]; { 身份证号 }

        dm.FDQuery1.FieldbyName('ksxm').Asstring := xls.Sheets[0].Asstring[2, Rows]; { 姓名 }

        dm.FDQuery1.FieldbyName('zygz').Asstring := xls.Sheets[0].Asstring[3, Rows]; { 职业 }

        dm.FDQuery1.FieldbyName('jdjb').Asstring := xls.Sheets[0].Asstring[4, Rows]; { 等级 }

        dm.FDQuery1.FieldbyName('xb').Asstring := xls.Sheets[0].Asstring[5, Rows]; { 性别 }

        dm.FDQuery1.FieldbyName('csrq').AsDateTime := xls.Sheets[0].AsDateTime[6, Rows]; { 出生日期 }

        dm.FDQuery1.FieldbyName('bmdw').Asstring := xls.Sheets[0].Asstring[7, Rows]; { 报名单位 }

        dm.FDQuery1.FieldbyName('gl').Asstring := xls.Sheets[0].Asstring[8, Rows]; { 工龄 }

        dm.FDQuery1.FieldbyName('whcd').Asstring := xls.Sheets[0].Asstring[9, Rows]; { 文化程度 }

        dm.FDQuery1.FieldbyName('ksly').Asstring := xls.Sheets[0].Asstring[10, Rows]; { 考生来源 }

        dm.FDQuery1.FieldbyName('lrcj').Asstring := xls.Sheets[0].Asstring[11, Rows]; { 理论成绩 }

        dm.FDQuery1.FieldbyName('sccj').Asstring := xls.Sheets[0].Asstring[12, Rows]; { 实操成绩 }

        dm.FDQuery1.FieldbyName('lxdh').Asstring := xls.Sheets[0].Asstring[13, Rows]; { 联系电话 }

        dm.FDQuery1.FieldbyName('bz').Asstring := xls.Sheets[0].Asstring[14, Rows];; { 备注 }

        dm.FDQuery1.Open;

        // dm.FDQuery1.ExecSQL;

        // dm.FDQuery1.Next;

      end;


    end;


  finally

    xls.Free;

    openFile.Free;

  end;

end;


procedure TFrmMain.Button2Click(Sender: TObject);

begin

  dm.FDQuery1.Close;

  dm.FDQuery1.SQL.Clear;

  dm.FDQuery1.SQL.Text := 'SELECT * FROM T_yhks_tmp'; { 刷新,打开数据集 }

  dm.FDQuery1.Open;

end;


procedure TFrmMain.Button3Click(Sender: TObject);

begin

  dm.FDQuery1.Close;

  dm.FDQuery1.SQL.Clear;

  dm.FDQuery1.SQL.Text := 'DELETE FROM T_yhks_tmp'; { 清空数据库表 }

  dm.FDQuery1.ExecSQL;


end;


procedure TFrmMain.Button4Click(Sender: TObject);

var

  i, k: Integer;

  xls: TXLSReadWriteII5;


begin

  xls := TXLSReadWriteII5.Create(Self);

  SaveDialog1 := TSaveDialog.Create(Self);

  // SaveDialog1.InitialDir := ExtractFileDir(ParamStr(0)); {默认目录是应用程序的绝对路径 }

  SaveDialog1.Title := '保存EXCEL文件路径'; // 设置浏览对话框标题名

  SaveDialog1.Filter := 'EXCEL文件(*.xlsx)|*.xlsx'; // 设置保存文件的扩展名

  SaveDialog1.DefaultExt := '.xlsx'; // 为保存文件名自动添加扩展名


  try


    if SaveDialog1.Execute then

      xls.Filename := SaveDialog1.Filename

    else

      xls.Filename := SaveDialog1.Filename + '导出.xlsx';


    xls.Clear;

    xls.Sheets[0].Name := 'Sheet1';


    dm.FDQuery1.Close;

    dm.FDQuery1.SQL.Clear;

    dm.FDQuery1.SQL.Text := 'SELECT * FROM T_yhks_tmp'; // 打开数据集

    dm.FDQuery1.Open;

    dm.FDQuery1.First;


    xls.Sheets[0].Asstring[0, 0] := 'ID'; // 列名

    xls.Sheets[0].Asstring[1, 0] := '考号'; // 列名

    xls.Sheets[0].Asstring[2, 0] := '身份证号';

    xls.Sheets[0].Asstring[3, 0] := '姓名';

    xls.Sheets[0].Asstring[4, 0] := '职业';

    xls.Sheets[0].Asstring[5, 0] := '等级';

    xls.Sheets[0].Asstring[6, 0] := '性别';

    xls.Sheets[0].Asstring[7, 0] := '出生日期';

    xls.Sheets[0].Asstring[8, 0] := '报名单位';

    xls.Sheets[0].Asstring[9, 0] := '工龄';

    xls.Sheets[0].Asstring[10, 0] := '文化程度';

    xls.Sheets[0].Asstring[11, 0] := '考生来源';

    xls.Sheets[0].Asstring[12, 0] := '理论成绩';

    xls.Sheets[0].Asstring[13, 0] := '实操成绩';

    xls.Sheets[0].Asstring[14, 0] := '联系电话';

    xls.Sheets[0].Asstring[15, 0] := '备注';


    for i := 1 to dm.FDQuery1.RecordCount do // 取行

    begin

      for k := 0 to dm.FDQuery1.Fields.Count - 1 do // 取列

      begin

        // XLS.Sheets[0].AsString[k,0]  := dm.FDQuery1.Fields[k].FieldName; //直接取表中字段名

        xls.Sheets[0].Asstring[k, i] := dm.FDQuery1.Fields[k].Asstring;

        xls.Sheets[0].AutoWidthCol(k); // 每列为自动宽度

      end;

      dm.FDQuery1.Next;

    end;


    xls.Write;


    ShowMessage(Format('导出EXcel文件'+#13#10+'%s'+#13#10 +'成功!', [xls.Filename]));

  finally

    xls.Free;

    SaveDialog1.Free;

  end;


end;


end.

 


发现有超过50条记录无法导出,解决方案下如图所示


20210427163945554.png


这里改成fmAll即可。

————————————————


原文链接:https://blog.csdn.net/yhcad/article/details/116204444



推荐分享
图文皆来源于网络,内容仅做公益性分享,版权归原作者所有,如有侵权请告知删除!
 

Copyright © 2014 DelphiW.com 开发 源码 文档 技巧 All Rights Reserved
晋ICP备14006235号-8 晋公网安备 14108102000087号

执行时间: 0.037915945053101 seconds