在数据分析业务中,经常要把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 写入数据库相关推荐

  1. python读取excel写入数据库_python实现读取excel写入mysql的小工具详解

    Python是数据分析的强大利器 利用Python做数据分析,第一步就是学习如何读取日常工作中产生各种excel报表并存入数据中,方便后续数据处理. 这里向大家分享python如何读取excel,并使 ...

  2. python读取excel写入数据库_python读取Excel内容并写入MySQL数据库脚本

    准备Excel(test.xlsx) 导库 import pymysql import xlrd 完整代码 import pymysql import xlrd def connect_databas ...

  3. vhm在服务器上创建虚拟机,一步步实现ABAP后台导入EXCEL到数据库【1】

    在SAP的应用当中,导入.导出EXCEL文件的情况是一个常见的需求,有时候用户需要将大量数据定期导入到SAP的数据库中.这种情况下,使用导入程序在前台导入可能要花费不少的时间,如果能安排导入程序为后台 ...

  4. Java读取Excel文件并将之写入数据库操作

    一.添加需要的包依赖 <!--读取excel文件所需要的包--> <dependency><groupId>org.apache.poi</groupId&g ...

  5. java struts2 excel上传_文件上传方法,使用Struts2,实现Excel文件读取并写入数据库技术...

    文件上传方法,使用Struts2,实现Excel文件读取并写入数据库技术 如题:文件信息的批量导入-- 项目中经常会遇到客户的一些单表信息的数据批量导入,也就是提供定制Excel表,再把Excel表中 ...

  6. .Net C# 如何读取Excel数据内容写入数据库并通过DataGridView控件动态刷新显示

    目录 介绍 选择Excel文件并读取内容 将数据内容写到数据库 更新dataGridView内容 介绍 本篇文章主要介绍C# winForm窗体如何打开Excel文件读取其中的内容,并将其内容写到数据 ...

  7. Python网络爬虫和信息提取:(动态网站)双色球数据爬取及写入数据库Sqlite、json和Excel表

    我想着拿什么练习下网络爬虫信息提取时,就想到了双色球,心想把往期数据提取出来也是个不错的主意,把数据保存下来以后做数据分析,根据分析结果去买双色球岂不是美哉?!哈哈哈.. 当然这里仅是爬取和保存,数据 ...

  8. python读excel数据并写入数据库的方法

    读取excel数据需要注意的地方以及读取方式: python读取excel表时,需要注意对时间的处理: 原因: 在使用xlrd读取Excel表格中的日期格式时,读出的内容和原来Excel表格中的内容不 ...

  9. Excel向数据库插入数据和数据库向Excel导出数据

    为了熟悉java里工作簿的相关知识点,所以找了"Excel向数据库插入数据和数据库向Excel导出数据"的功能来实现. 注意事项:1,mysql数据库: 2,需要导入的jar包有 ...

  10. Java实现Excel导入数据库,数据库中的数据导入到Excel

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 实现的功能: Java实现Excel导入数据库,如果存在就更新 数据库中的数据导入到Excel 1. ...

最新文章

  1. Learn OpenGL (四):纹理
  2. 【python gensim使用】word2vec词向量处理中文语料
  3. C语言经典例25-阶乘累加求和
  4. toLua关于委托没有注册的解决方案
  5. android menuitem 字体颜色,安卓更改Menu的字体颜色(使用actionLayout,适用于多个fragment)...
  6. 苹果小圆点怎么弄出来_原来苹果手机轻点2下屏幕就能截图,以前还不知道,太方便了...
  7. windows mobile 服务自动停止_打印服务print Splooer自动停止怎么办?
  8. 【codevs1946】【BZOJ2434】阿狸的打字机,AC自动机练习
  9. 【CSDN最全java项目实战500篇】练手/项目经验/毕设刚需
  10. 管理者你是否在让你的员工瞎忙
  11. 最近在做微信支付委托代扣交互图。总结了几点需要注意的地方,与大家分享一下
  12. 【Testin实验室】MoiMark安卓中国终端体验性能排行榜(11月报)
  13. 【搜索/提问必备】如何正确的在Stack Overflow提问
  14. [Codeforces 894E] Ralph and Mushrooms
  15. Codewars-Java编程刷题学习4-Jaden Casing Strings
  16. python vlookup_Python - 如何使用 Pandas 进行vLookup
  17. 【Pyecharts50例】GEO图中忽略不存在的位置
  18. 中国平行进口汽车行业发展方向及未来发展趋势展望报告2022-2028年
  19. 时钟偏差、延迟、不确定度、抖动 (skew,latency,uncertainty,jitter)
  20. 指针的指针、字符串和指针、数组指针(详)

热门文章

  1. 神经网络训练ai玩游戏,人工神经网络入门
  2. 定时任务,时间表达式
  3. 国内机器人编程赛事大全介绍
  4. FTP 连接超时解决办法
  5. 学生个人网页设计作品 学生个人网页模板 简单个人主页成品 个人网页制作 HTML学生个人网站作业设计代做
  6. STM32CbueMX之W25Q256
  7. 【活字格案例】综合报表信息管理系统搭建
  8. JxBrowser的概述与简单应用
  9. 如何批量将 Word 文档转为 XPS 格式
  10. Oracle密码过期改密失败