
























场景:
前些日子有位博客园朋友留言,内容如下:
【你好 我遇到一个问题 在网上找了很多资料也无果
刚接手kettle 有一个业务是读取excel然后写入表中
但是excel表头会经常变动 导致程序运行失败 excel已经做了字段定义
但是模板变动后读取的数据 就对应不上字段
如定义字段
name 姓名
age 年龄
当模板变为 姓名 省份 年龄
那么读取的数据 age就变成了省份的数据
这有什么办法处理吗这种动态表头吗?
因为是程序自动运行的 没办法每次手动获取字段】
大概的意思就是excel文件的表头位置不是固定的,需要让kettle根据表头名称读取数据,大家都知道kettle自动的excel组件只能根据表头的位置进行读取,一旦表头字段位置发生改变,读取的数据就会错乱。
解决方案:此问题使用java步骤实现或者二开插件来解决,今天咱们一起来看下如何使用java步骤来解决此问题。

1、准备test.xlsx文件
此文件有两个Sheet,每个Sheet里面都有字段姓名、年龄、部门、入职日期、薪资、联系电话、邮箱。
Sheet1

Sheet2

2、设计trans
1)java步骤使用fastExcel读取excel文件,需要将fastexcel-reader-0.13.0.jar、fastexcel-core-1.2.0.jar、aalto-xml-1.3.2.jar三个文件放到lib目录下,放jar之后需要重启spoon
2)写日志步骤,打印读取到的数据

3、Java步骤关键参数配置
1)设置文件路径filePath,可以在java步骤中写死,也可以通过变量excel_file进行传递
2) 设置读取哪些sheet
3)设置读取哪些列、字段名和字段对应的数据类型。

4)保存&运行,excel文件可以正常读取,另外此java步骤采用的流式方式读取文件,可以读取大的excel文件且内存占用较小。

4、打乱excel文件列顺序,重新读取
Sheet1,调整excel列的位置

Sheet2,excel文件插入干扰列

保存&执行,excel数据依然可以正确读取。


此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。