在kettle spoon中使用java代码操作excel文档

 

一、从excel中读取数据

 

 

 

 

 

二、重命名excel中的列名,作为后续输出字段名使用

   添加“字段选择”模块,并编辑

 

三、新增Excel中没有的列名,作为后续输出字段使用

 

四、添加“Java代码”对读取的Excel文档内容进行自定义处理

其中 processRow 方法为数据处理的主要模块,它会对前面步骤传过来的每一行数据进行迭代,直到方法内部返回 false 值,如果要继续就返回 true 值:

 

import java.util.*;

public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException
{

  Object[] r = getRow();
	if (r == null) {
		setOutputDone();
		return false;
	}

  List indexLogList = new ArrayList();


  r = createOutputRow(r, data.outputRowMeta.size());

  String sjsx_column =get(Fields.In,"事项名称").getString(r);
  String dwmc_column =get(Fields.In,"单位名称").getString(r);

  logBasic("涉及事项:" + sjsx_column + ",涉及单位:" + dwmc_column);

  String sl_column =get(Fields.In,"受理").getString(r);
  String sh_column =get(Fields.In,"审核").getString(r);
  String sp_column =get(Fields.In,"审批").getString(r);
  String bj_column =get(Fields.In,"办结").getString(r);

  int hjs = 0;

  
  if(sl_column != null && sl_column != ""){
      hjs += 1;
      indexLogList.add(sl_column);
      logBasic("受理人:" + sl_column);
  }

  if(sh_column != null && sh_column != ""){
      hjs += 1;
      indexLogList.add(sh_column);
      logBasic("审核人:" + sh_column);
  }

  if(sp_column != null && sp_column != ""){
      hjs += 1;
      indexLogList.add(sp_column);
      logBasic("审批人:" + sp_column);
  }

  if(bj_column != null && bj_column != ""){
      hjs += 1;
      indexLogList.add(bj_column);
      logBasic("办结人:" + bj_column);
  }
  logBasic("环节数:" + hjs);

  get(Fields.Out, "环节数").setValue(r, Long.valueOf(hjs));
  get(Fields.Out, "姓名1单位").setValue(r, dwmc_column);
  get(Fields.Out, "姓名1(支持多个,隔开)").setValue(r, sl_column);
  logBasic("姓名1(支持多个,隔开)填充数据:" + sl_column);

  if(hjs >= 2){
    get(Fields.Out, "姓名2单位").setValue(r, dwmc_column);
    get(Fields.Out, "姓名2(支持多个,隔开)").setValue(r, indexLogList.get(1));
    logBasic("往姓名2单位填充数据:"+ (String)indexLogList.get(1));
  } 

  if(hjs >= 3){
    get(Fields.Out, "姓名3单位").setValue(r, dwmc_column);
    get(Fields.Out, "姓名3(支持多个,隔开)").setValue(r, indexLogList.get(2));
    logBasic("往姓名3单位填充数据:"+(String)indexLogList.get(2));
  } 
  
  if(hjs >= 4){
    get(Fields.Out, "姓名4单位").setValue(r, dwmc_column);
    get(Fields.Out, "姓名4(支持多个,隔开)").setValue(r, indexLogList.get(3));
    logBasic("往姓名4单位填充数据:"+ (String)indexLogList.get(3));
  }

  putRow(data.outputRowMeta, r);
  return true;
}

 

 

五、输出Excel文档

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章