kettle批量读取清洗excel文件,并分别生成新excel

本参考以下链接,特此感谢

zKettle实战100篇 第19篇 转换核心对象Microsoft Excel输出组件 — 八一菜刀

kettle遍历目录_yzp950311的博客-CSDN博客

【Kettle】—— Kettle遍历执行SQL文件 - 灰信网(软件开发博客聚合)

【Kettle】—— Kettle遍历执行SQL文件_maixiaochai的博客-CSDN博客_kettle导入sql文件

Kettle之批量读取excel文件内容实现批量下载功能 - 灰信网(软件开发博客聚合)

总体逻辑大概如下

总流程

JS-初始化EXCEL名称和路径列表:

var prevRows=previous_result.getRows();

//如果结果集数据为null或者没有数据,直接返回false
if(prevRows == null &&(prevRows.size()==0)){
	false;
}else{
	
	for(var j = 0; j < prevRows.size(); j++){
		//将所有结果集数据存进sourceUrl变量
		parent_job.setVariable("prevRows"+j,prevRows.get(j));
	} 

	
	//将元素个数设置给size变量
	parent_job.setVariable("size",prevRows.size());
	//设置一个循环起始变量
	parent_job.setVariable("i",0);

	true;
}

这里为什么 set变量的时候 ,是用for循环把每一条文件的内容加下标存进去

因为: 我之前试过用二维数组存 “文件路径+文件短名”的 方式,大概是下面这个样子

[[a1,a2],[b1,b2],[c1,c2]] 

这个玩意存到 kettle的 变量里面 就是一个字符串 “[[a1,a2],[b1,b2],[c1,c2]] ”

我取出来之后,没法还原成 二维数组,只能把 [] 全部替换成空串,然后用逗号,split成数组,但是兄弟们,这样分割出来的数组就变成了1维数组了,等于你得到的是 [a1,a2,b1,b2,c1,c2]

但是你想要的是 [a1,a2],[b1,b2],[c1,c2] ,我试了 eval 去还原二维数组。没用,这个kettle里面的js不认识

所以 综上所述,我把每一条记录都用一个变量存起来了 区分它们的就是下标,比较笨,兄弟们有更好的方法请给我留言谢谢!

JS-读取单个excel的路径和文件名

var size=new Number(parent_job.getVariable("size"));
var i=new Number(parent_job.getVariable("i"));
//var prevRows=parent_job.getVariable("prevRows").replace("[","").replace("]","").split(",");

if(i>=size){
	false;
}else{
	//因为上一步添加进去的时候,是作为一个像数组元素一样的对象添加进去,变量都会转成字符串,所以直接移除掉就可以了

	var subject="自定义日志输出";
	//实例化日志channel对象
	var log= new org.pentaho.di.core.logging.LogChannel(subject);
	//日志输出
	log.logMinimal("XXXXXXXXXXXXXXXXXXXXXXXX:");
	//log.logMinimal(i);

	var curRows=parent_job.getVariable("prevRows"+i).replace("[","").replace("]","").split(",");
	
	parent_job.setVariable("furi",curRows[0]);
	var fname = curRows[1];
	var idxname = fname.indexOf(".");
	var fsname = fname.substring(0,idxname)
	parent_job.setVariable("fname",fname);
	parent_job.setVariable("fsname",fsname);


	true;
}

PS :这里设置的变量  furi和fsname 是为了在下一个转换里面当成参数传递给 “excel输入” 以及“excel输出”

furi  : fileuri  文件的绝对路径

fsname : file short name  不带后缀的文件名

更新遍历的下标

//变量i自加
var i = new Number(parent_job.getVariable("i"))+1;

//在把i设置回去
parent_job.setVariable("i",i);




true;


(转换)读取excel文件列表

获取文件名:获取这个目录下的所有你要的excel

字段选择-复制到结果: 把读取到的结果组装成结果集,供下一步读取遍历


(转换)清洗并输出新excel

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值