如何把 Excel 写入数据库
在数据分析业务中,经常要把Excel文件数据结构化解析以后再进行计算或导入关系数据库,但许多Excel文件的格式并不规整,而且文件结构也多种多样,导致编程进行结构化的工作量会比较大,而且很难通用,每次都要针对文件格式进行分析后再进行开发。
先来看个简单格式的例子,现有sales.xlsx文件,如下:
ORDERID | CLIENT | SELLERID | AMOUNT | ORDERDATE |
1 | LFRP | 12 | 9268 | 2020-12-07 |
2 | YG | 10 | 3458 | 2020-12-07 |
3 | OHY | 3 | 10298 | 2020-12-07 |
4 | ANZSW | 12 | 7662 | 2020-12-07 |
5 | QMTP | 6 | 7947 | 2020-12-07 |
现有数据库中的销售数据表(sales),对应的表结构为:
字段名 | 类型 |
ORDERID | int |
CLIENT | varchar(10) |
SELLERID | smallint |
AMOUNT | double |
ORDERDATE | date |
需要将excel中数据写入(更新)到数据库中的sales表
借助集算器可以很方便地完成这件事。
1. 运行集算器,配置数据库连接并命名,填写的参数和 JDBC 连接时一样。
操作菜单:Tool->Datasource Connection->Datasouce 设置如下:
2. 在集算器中编写脚本sales2db.dfx:
A | B | |
---|---|---|
1 | =file("sales.xlsx").xlsimport@t() | /读取excel文件内容 |
2 | =connect("mysql") | /连接数据库 |
3 | >A2.update(A1,sales,ORDERID,CLIENT,SELLERID,AMOUNT,ORDERDATE) | /使用db.update函数将 excel数据更新至数据库的sales表 |
4 | >A2.close() | /关闭数据库连接 |
因为sales表中数据需要更新,所以直接使用update函数,如果知道excel中数据都是新的,那么可以使用了update@i函数,将只生成INSERT语句,这样速度会快很多,因为不需要判断是否生成UPDATE语句。update函数的详细用法见:db.update()。
3. 执行脚本后,再观察数据库中sales表,可见数据已更新:
当excel中的数据量较多,在运行环境中,不适合或者无法直接加载至内存时。只需要在使用xlsimport函数时添加选项c,即A1改为:=file("sales.xlsx").xlsimport@tc(),就可以完成大数据情况下的excel写入数据库的工作。
复杂格式的情况,例如,现有雇员信息数据,emp.xlsx:
ID: | 1 | ||
Name: | jack | Sex: | F |
location | LA | ||
Birthday: | 1987/9/13 | ||
phone: | 36527183 | ||
ID: | 2 | ||
Name: | tom | Sex: | M |
location | CA | ||
Birthday: | 2000/1/1 | ||
phone: | 56253674 |
现有数据库中的销售数据表(emp),对应的表结构为:
字段名 | 类型 |
id | int |
name | varchar(10) |
sex | char(1) |
location | char(2) |
birthday | date |
phone | char(8) |
1. 在集算器中编写脚本emp2db.dfx
A | B | C | |
---|---|---|---|
1 | =create(id,name,sex,location,birthday,phone) | ||
2 | =file("emp.xlsx").xlsopen() | ||
3 | [B,B,D,B,B,B] | [1,2,2,3,4,5] | |
4 | for | =A3.(~/B3(#)).(eval($[A2.xlscell()/~/")")) | |
5 | if len(B4(1))==0 | break | |
6 | >A1.record(B4) | ||
7 | >B3=B3.(~+6) | ||
8 | =connect("mysql") | ||
9 | =A8.update(A1,emp) | ||
10 | >A8.close() |
A1 创建列名为"id,name,sex,location,birthday,phone"的空序表
A2 打开Excel数据文件
A3 定义雇员信息所在单元格列号序列
B3 定义雇员信息所在单元格行号序列
A4 用for循环读取每个雇员信息
B4 A3.(~/B3(#))先算出当前雇员单元格编号序列,再读出这些单元格值组成雇员信息序列。第一次循环时为[B1,B2,D2,B3,B4,B5],第二次循环时为[B7,B8,D8,B9,B10,B11]……每次行号加6。$[A2.xlscell(]与"A2.xlscell("相同,都是表示一个字符串,它的好处是在IDE中编写程序时,如果A2单元格的编号发生了变化,$[A2.xlscell(]中的A2会自动变化,比如在A2前插入了一行,这个表达式就会变成$[A3.xlscell(],而用引号的话,就不会自动变了。
B5 判断雇员ID值是否为空,为空则退出循环,结束读数
B6 将一条雇员信息存入A1序表尾
B7 让雇员信息的行号序列都加上9,读取下一条雇员信息
A8-A10 连接数据库,将雇员信息存入数据库表emp,关闭数据库
2. 执行脚本后,再观察数据库中emp表,可见数据已更新:
当有多个相同格式的excel文件需要写入数据库时,以简单格式为例,比如有格式相同的sales文件(sales.xlsx, sales1.xlsx, sales2.xlsx),脚本可以这样写:
A | B | |
---|---|---|
1 | =connect("mysql") | |
2 | =directory@p("sales*.xlsx") | |
3 | for A2 | =file(A3).xlsimport@ct() |
4 | >A1.update(B3,sales,ORDERID,CLIENT,SELLERID,AMOUNT,ORDERDATE) | |
5 | >A1.close() |
A1 连接数据库
A2 获取所有满足sales*.xlsx的文件名,返回序列
A3 循环文件名序列
B3 读取当前文件名对应的excel文件内容
B4 使用db.update函数将excel数据更新至数据库的sales表
A5 循环完毕后,执行关闭数据库连接
复杂格式也可以使用这样的办法来完成多个excel文件写入数据库的工作,不再赘述。
如何把 Excel 写入数据库相关推荐
- python读取excel写入数据库_python实现读取excel写入mysql的小工具详解
Python是数据分析的强大利器 利用Python做数据分析,第一步就是学习如何读取日常工作中产生各种excel报表并存入数据中,方便后续数据处理. 这里向大家分享python如何读取excel,并使 ...
- python读取excel写入数据库_python读取Excel内容并写入MySQL数据库脚本
准备Excel(test.xlsx) 导库 import pymysql import xlrd 完整代码 import pymysql import xlrd def connect_databas ...
- vhm在服务器上创建虚拟机,一步步实现ABAP后台导入EXCEL到数据库【1】
在SAP的应用当中,导入.导出EXCEL文件的情况是一个常见的需求,有时候用户需要将大量数据定期导入到SAP的数据库中.这种情况下,使用导入程序在前台导入可能要花费不少的时间,如果能安排导入程序为后台 ...
- Java读取Excel文件并将之写入数据库操作
一.添加需要的包依赖 <!--读取excel文件所需要的包--> <dependency><groupId>org.apache.poi</groupId&g ...
- java struts2 excel上传_文件上传方法,使用Struts2,实现Excel文件读取并写入数据库技术...
文件上传方法,使用Struts2,实现Excel文件读取并写入数据库技术 如题:文件信息的批量导入-- 项目中经常会遇到客户的一些单表信息的数据批量导入,也就是提供定制Excel表,再把Excel表中 ...
- .Net C# 如何读取Excel数据内容写入数据库并通过DataGridView控件动态刷新显示
目录 介绍 选择Excel文件并读取内容 将数据内容写到数据库 更新dataGridView内容 介绍 本篇文章主要介绍C# winForm窗体如何打开Excel文件读取其中的内容,并将其内容写到数据 ...
- Python网络爬虫和信息提取:(动态网站)双色球数据爬取及写入数据库Sqlite、json和Excel表
我想着拿什么练习下网络爬虫信息提取时,就想到了双色球,心想把往期数据提取出来也是个不错的主意,把数据保存下来以后做数据分析,根据分析结果去买双色球岂不是美哉?!哈哈哈.. 当然这里仅是爬取和保存,数据 ...
- python读excel数据并写入数据库的方法
读取excel数据需要注意的地方以及读取方式: python读取excel表时,需要注意对时间的处理: 原因: 在使用xlrd读取Excel表格中的日期格式时,读出的内容和原来Excel表格中的内容不 ...
- Excel向数据库插入数据和数据库向Excel导出数据
为了熟悉java里工作簿的相关知识点,所以找了"Excel向数据库插入数据和数据库向Excel导出数据"的功能来实现. 注意事项:1,mysql数据库: 2,需要导入的jar包有 ...
- Java实现Excel导入数据库,数据库中的数据导入到Excel
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 实现的功能: Java实现Excel导入数据库,如果存在就更新 数据库中的数据导入到Excel 1. ...
最新文章
- Learn OpenGL (四):纹理
- 【python gensim使用】word2vec词向量处理中文语料
- C语言经典例25-阶乘累加求和
- toLua关于委托没有注册的解决方案
- android menuitem 字体颜色,安卓更改Menu的字体颜色(使用actionLayout,适用于多个fragment)...
- 苹果小圆点怎么弄出来_原来苹果手机轻点2下屏幕就能截图,以前还不知道,太方便了...
- windows mobile 服务自动停止_打印服务print Splooer自动停止怎么办?
- 【codevs1946】【BZOJ2434】阿狸的打字机,AC自动机练习
- 【CSDN最全java项目实战500篇】练手/项目经验/毕设刚需
- 管理者你是否在让你的员工瞎忙
- 最近在做微信支付委托代扣交互图。总结了几点需要注意的地方,与大家分享一下
- 【Testin实验室】MoiMark安卓中国终端体验性能排行榜(11月报)
- 【搜索/提问必备】如何正确的在Stack Overflow提问
- [Codeforces 894E] Ralph and Mushrooms
- Codewars-Java编程刷题学习4-Jaden Casing Strings
- python vlookup_Python - 如何使用 Pandas 进行vLookup
- 【Pyecharts50例】GEO图中忽略不存在的位置
- 中国平行进口汽车行业发展方向及未来发展趋势展望报告2022-2028年
- 时钟偏差、延迟、不确定度、抖动 (skew,latency,uncertainty,jitter)
- 指针的指针、字符串和指针、数组指针(详)