https://blog.csdn.net/yhcad/article/details/116204444

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.
————————————————
版权声明:本文为CSDN博主「yhcad」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/yhcad/article/details/116204444

小程序Excel导入导出数据库功能的更多相关文章

  1. ASP.NET 之 常用类、方法的超级总结,并包含动态的EXCEL导入导出功能,奉上类库源码

    实用类:UtilityClass 包含如下方法 判断对象是否为空或NULL,如果是空或NULL返回true,否则返回false 验证手机号是否正确 13,15,18 验证邮箱 验证网址 MD5加密,返 ...

  2. java jxl excel 导入导出的 总结(建立超链接,以及目录sheet的索引)

    最近项目要一个批量导出功能,而且要生成一个单独的sheet页,最后后面所有sheet的索引,并且可以点击进入连接.网上搜索了一下,找到一个方法,同时把相关的excel导入导出操作记录一下!以便以后使用 ...

  3. 如何自动化你的Excel导入导出(Java)?

    GitHub | 中文 | English | 博客 为什么使用AutoExcel? Excel导入导出在软件开发中非常常见,只要你接触过开发,就一定会遇到.相信很多人会跟我一样选择用Apache P ...

  4. 一个基于POI的通用excel导入导出工具类的简单实现及使用方法

    前言: 最近PM来了一个需求,简单来说就是在录入数据时一条一条插入到系统显得非常麻烦,让我实现一个直接通过excel导入的方法一次性录入所有数据.网上关于excel导入导出的例子很多,但大多相互借鉴. ...

  5. 土制Excel导入导出及相关问题探讨

    转载请注明出处https://www.cnblogs.com/funnyzpc/p/10392085.html 新的一年,又一个开始,不见收获,却见年龄,好一个猪年,待我先来一首里尔克的诗: < ...

  6. JAVA实现Excel导入/导出【转】

    JAVA实现Excel导入/导出[转] POI的下载与安装 请到网站http://www.apache.org/dyn/closer.cgi/poi/右击超链接2.5.1.zip下载压缩包poi-bi ...

  7. Excel导入导出的业务进化场景及组件化的设计方案(上)

    1:前言 看过我文章的网友们都知道,通常前言都是我用来打酱油扯点闲情的. 自从写了上面一篇文章之后,领导就找我谈话了,怕我有什么想不开. 所以上一篇的(下)篇,目前先不出来了,哪天我异地二次回忆的时候 ...

  8. 关于Excel导入导出的用例设计

    目前,为方便操作,很多系统都会增加批量导入导出的功能.文件导入导出一般格式都是excel.由于用户直接在excel在填写内容,无法控制填写的格 式,加上excel解析比较困难,所以一般涉及到excel ...

  9. Octopus——excel导入导出工具

    Octopus Octopus是一个简易的Excel导入导出工具.目前主要就两个功能: 导入:将excel中一行数据转换为指定的java对象,并通过指定的正则表达式检查合法性. 导出:按照给定的xml ...

  10. Mego(04) - NET简单实现EXCEL导入导出

    前言 相信做过信息系统的朋友都会遇到EXCEL导入导出的相关开发,做过不少EXCEL导入导出后总结起来大致有如下几种方式实现: ADO.NET的OldDb或ODBC连接EXCEL使用DataTable ...

随机推荐

  1. .Net Core 配置源码学习 (一)

    一 背景 相比.Net Framework , .NET Core的配置系统 ,有一些明显的优点 ,如: 1 支持更丰富的配置源 2 读取配置时, 可以用相同的方式读取, 并且非常方便 3 修改配置后 ...

  2. Chai 3D之创建项目

    推荐:将 NSDT场景编辑器 加入你的3D开发工具链 1.构建应用目录   我们将设置使用 CHAI3D 构建应用程序所需的基本目录结构和文件.根据您可能要使用的显示器或 GUI 库,为 FreeGL ...

  3. js循环判断创建新对象放数组中

    原效果 之后效果: <!doctype html> <html lang="en"> <head> <meta charset=" ...

  4. Java中的源码,反码和补码

    一.在Java中所有数据都是以补码的形式表示的,原码即数字的二进制表示加符号位,反码即将原码按位取反,补码简单来说即反码加1 二.Java中数据的表示方式 1.正数:正数的原码.补码.反码都相同,正数 ...

  5. Oracle中的sql脚本语言中的循环语句介绍

    --sql脚本语言的循环介绍:--1.goto循环点.declare  x number;begin  x:=0;--变量初始化:  <<repeat_loop>>--设置循环 ...

  6. JavaScript之this、let、const关键字

    各场景下的this this的意思:百度翻译为:这.这么.本 在JavaScript中,表示当前对象的引用关键字,没有特殊含义. 在一个方法中,this表示该方法所属的对象. 如果单独使用,this表 ...

  7. react的useRef

    在使用RN动画的时候,看到这样的代码: const App = () => { const fadeAnim = useRef(new Animated.Value(0)).current; / ...

  8. K8s之Etcd的备份与恢复

    ETCD简介 ETCD用于共享和配置服务发现的分布式,一致性的KV存储系统. ETCD是CoreOS公司发起的一个开源项目,授权协议为Apache. ETCD 存储 k8s 所有数据信息 ETCD 是 ...

  9. File类-绝对路径 相对路径

    绝对路径:通过给定的路径能够直接在我的电脑中找到的文件 相对路径:文件相对于应用程序的路径 结论: 我们在开发中要尽量使用相对路径 File方法只能读取小文件,是一下子全读出来.如果读大文件则使用文件 ...

  10. 【剑指Offer】【树】二叉搜索树的后序遍历序列

    题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. A:在二叉树的后序遍历中,数组最后一个元素为根节点,左 ...