在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文檔

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