小程序Excel导入导出数据库功能
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导入导出数据库功能的更多相关文章
- ASP.NET 之 常用类、方法的超级总结,并包含动态的EXCEL导入导出功能,奉上类库源码
实用类:UtilityClass 包含如下方法 判断对象是否为空或NULL,如果是空或NULL返回true,否则返回false 验证手机号是否正确 13,15,18 验证邮箱 验证网址 MD5加密,返 ...
- java jxl excel 导入导出的 总结(建立超链接,以及目录sheet的索引)
最近项目要一个批量导出功能,而且要生成一个单独的sheet页,最后后面所有sheet的索引,并且可以点击进入连接.网上搜索了一下,找到一个方法,同时把相关的excel导入导出操作记录一下!以便以后使用 ...
- 如何自动化你的Excel导入导出(Java)?
GitHub | 中文 | English | 博客 为什么使用AutoExcel? Excel导入导出在软件开发中非常常见,只要你接触过开发,就一定会遇到.相信很多人会跟我一样选择用Apache P ...
- 一个基于POI的通用excel导入导出工具类的简单实现及使用方法
前言: 最近PM来了一个需求,简单来说就是在录入数据时一条一条插入到系统显得非常麻烦,让我实现一个直接通过excel导入的方法一次性录入所有数据.网上关于excel导入导出的例子很多,但大多相互借鉴. ...
- 土制Excel导入导出及相关问题探讨
转载请注明出处https://www.cnblogs.com/funnyzpc/p/10392085.html 新的一年,又一个开始,不见收获,却见年龄,好一个猪年,待我先来一首里尔克的诗: < ...
- JAVA实现Excel导入/导出【转】
JAVA实现Excel导入/导出[转] POI的下载与安装 请到网站http://www.apache.org/dyn/closer.cgi/poi/右击超链接2.5.1.zip下载压缩包poi-bi ...
- Excel导入导出的业务进化场景及组件化的设计方案(上)
1:前言 看过我文章的网友们都知道,通常前言都是我用来打酱油扯点闲情的. 自从写了上面一篇文章之后,领导就找我谈话了,怕我有什么想不开. 所以上一篇的(下)篇,目前先不出来了,哪天我异地二次回忆的时候 ...
- 关于Excel导入导出的用例设计
目前,为方便操作,很多系统都会增加批量导入导出的功能.文件导入导出一般格式都是excel.由于用户直接在excel在填写内容,无法控制填写的格 式,加上excel解析比较困难,所以一般涉及到excel ...
- Octopus——excel导入导出工具
Octopus Octopus是一个简易的Excel导入导出工具.目前主要就两个功能: 导入:将excel中一行数据转换为指定的java对象,并通过指定的正则表达式检查合法性. 导出:按照给定的xml ...
- Mego(04) - NET简单实现EXCEL导入导出
前言 相信做过信息系统的朋友都会遇到EXCEL导入导出的相关开发,做过不少EXCEL导入导出后总结起来大致有如下几种方式实现: ADO.NET的OldDb或ODBC连接EXCEL使用DataTable ...
随机推荐
- HNOI2019 最小圈
\(\text{Problem}\) 对于一张有向图,要你求图中最小圈的平均值最小是多少,即若一个圈经过 \(k\) 个节点,那么一个圈的平均值为圈上 \(k\) 条边权的和除以 \(k\),现要求其 ...
- Cobalt Strike 之:会话管理
郑重声明: 本笔记编写目的只用于安全知识提升,并与更多人共享安全知识,切勿使用笔记中的技术进行违法活动,利用笔记中的技术造成的后果与作者本人无关.倡导维护网络安全人人有责,共同维护网络文明和谐. Co ...
- LeetCode ● 216.组合总和III ● 17.电话号码的字母组合
LeetCode 216.组合总和III 分析1.0 回溯问题 组合总和sum == n 时以及path中元素个数 == k 时,res.add(new path) 返回后递归删除掉当前值 class ...
- 微信小程序防止多次点击提交的方法
Page({ data: { lock: false }, //表单提交 submit(){ let that = this; let {lock} = that.data; if(!lock){ t ...
- ABP微服务系列学习-对接前端界面
前面我们把后端的微服务架子基本搭建完成并成功启动了,现在我们可以对接前端界面了.这里我们直接用ABP模板里面的Angular的前端界面. 创建应用程序模板 使用ABPCli创建一个应用程序模板,前端选 ...
- 【win+r】快速打开软件
第一种设置方法: ①把要启动的文件夹路径添加到系统环境变量里面去 ②按win+r就可以快速启动了 第二种设置方法: 是直接把(程序的)快捷方式,放到安装目录的 Windows\System32\ 文件 ...
- javaweb同一个项目打包两次放在同一个tomcat下
web.xml中配置: <context-param> <param-name>webAppRootKey</param-name> <param-value ...
- SpringBoot的使用
1. Spring Boot概述 目标:了解Spring Boot是什么,有什么作用 小结: Spring Boot是一个便捷搭建 基于spring工程的脚手架:作用是帮助开发人员快速搭建大型的spr ...
- redis底层数据结构之简单动态字符串(SDS)
简单动态字符串(simple dynamic string,SDS) redis使用C语言编写的,但是redis的字符串却不是C语言中的字符串(以空字符'\0'结尾的字符数组),redis定义了一种简 ...
- if语法案例
if语法案例 1. 判断系统剩余内存 1) 脚本正文 2) 执行结果 2.监控web和数据库的方法 1) 端口监控 2) 进程监控 3) 客户端模拟 4) 数据库判断* 3.mysql数据库检测命令演 ...