java调用kettle Api生成excel入库的转换文件

excel入库的转换文件,实际上就是拼TransMeta对象,直接上这几天的成果,我这个还是比较简单的excel转换,还有一些复杂的参数没有添加,后期会在使用的过程中完善。
生成转换文件:

public void excelToDatabase(ExcelToDBDto dto){
		try {
			TransMeta generateTrans = this.generateKtr(dto);
			String xml = generateTrans.getXML();
			String transName = dto.getTransName();
			File file = new File(transName);
			FileUtils.writeStringToFile(file, xml, "UTF-8");
		} catch (Exception e) {
			logger.error(e.getMessage());
		}
	}

拼TransMeta对象:

/**
	 * 1.excel输入
	 * 2.表输出
	 * @throws Exception 
	 */
	public TransMeta generateKtr(ExcelToDBDto dto) throws Exception {
		TransMeta transMeta = new TransMeta();
		//生成databaseXML——表输出信息
		String[] dbXml = generateDBxml(dto.getOutputDB());
		//设置转换名称
		transMeta.setName(dto.getTransName());
		//添加转换的数据库连接
		for(int i=0; i<dbXml.length; i++){
			DatabaseMeta dbMeta = new DatabaseMeta(dbXml[i]);
			transMeta.addDatabase(dbMeta);
		}
		// registry是给每个步骤生成一个标识ID
		PluginRegistry registryID = PluginRegistry.getInstance();
		
		//1.设置表输出参数
		InsertUpdateMeta insertMeta = new InsertUpdateMeta();
		String iuPluginId = registryID.getPluginId(StepPluginType.class, insertMeta);
		//添加数据库连接
		DatabaseMeta db_chenyh = transMeta.findDatabase(dto.getOutputDB().getConnName());
		insertMeta.setDatabaseMeta(db_chenyh);
		//设置操作的表
		insertMeta.setTableName(dto.getOutputTableName());
		
		//设置用来查询的关键字
		insertMeta.setKeyLookup(new String[]{dto.getSheets().getPrimaryKey()});
		insertMeta.setKeyStream(new String[]{dto.getSheets().getPrimaryKey()});
		insertMeta.setKeyStream2(new String[]{""});
		insertMeta.setKeyCondition(new String[]{"="});
		
		// 生成要更新的字段
		String[] update = generateField(dto.getFields());
		//设置要更新的字段
		Boolean[] updateOrNot = {false, true, true, true, true, true, true};
		insertMeta.setUpdateLookup(update);
		insertMeta.setUpdateStream(update);
		insertMeta.setUpdate(updateOrNot);
		insertMeta.getUpdateLookup();
		//添加到转换中
		StepMeta insertStep = new StepMeta(iuPluginId, "表输出", insertMeta);
		insertStep.setDraw(true);
		insertStep.setLocation(250, 100);
		transMeta.addStep(insertStep);
		
		//2.设置excel输入参数
		ExcelInputMeta eiMeta = new ExcelInputMeta();
		List<ExcelInputDto> sheets = dto.getSheets().getDtos();
		int size = sheets.size();
		ExcelInputField[] fields = new ExcelInputField[size];
		int i = 0;
		for (ExcelInputDto sheet : sheets) {
			fields[i] = new ExcelInputField();
			fields[i].setName(sheet.getName());
			i++;
		}
		eiMeta.setField(fields);
		String[] fileName  = new String[]{dto.getFilePath()};
		String[] fileMask = {};
		String[] fileRequired = {"N"};
		eiMeta.setFileName(fileName);
		eiMeta.setFileRequired(fileRequired);
		eiMeta.setIncludeSubFolders(fileRequired);
		eiMeta.setAddResultFile(true);
		eiMeta.setStartsWithHeader(true);
		eiMeta.setIgnoreEmptyRows(true);
		eiMeta.setStopOnEmpty(false);
		eiMeta.setAcceptingFilenames(false);
		String name = dto.getSheets().getSheetName();
		String[] sheetName = {name};
		eiMeta.setSheetName(sheetName);
		int[] row = {0};
		int[] col = {0};
		eiMeta.setStartColumn(col);
		eiMeta.setStartRow(row);
		eiMeta.setStrictTypes(false);
		eiMeta.setErrorIgnored(false);
		eiMeta.setErrorLineSkipped(false);
		eiMeta.setBadLineFilesExtension("waring");
		eiMeta.setErrorFilesExtension("error");
		eiMeta.setLineNumberFilesExtension("line");
		
		String eiPluginId = registryID.getPluginId(StepPluginType.class, eiMeta); 
		StepMeta stepMeta = new StepMeta(eiPluginId,"excel输入",eiMeta);
		transMeta.addStep(stepMeta);
		
		//添加hop将两个步骤关联起来
		transMeta.addTransHop(new TransHopMeta(stepMeta, insertStep));
		return transMeta;
		
	}

实体类:


public class ExcelToDBDto {
	private String transName; //转换名称
	private String outputTableName; //输出源表名
	private DatabaseDto outputDB; // 作为输出源的数据库
	private String filePath; // excel文件路径
	private String fields; //表字段
	private SheetDto sheets; // excel文件的列名
	省略getter-setter方法
	}

请求实例:
在这里插入图片描述

这样就可以生成excel入库的转换文件了

猜你喜欢

转载自blog.csdn.net/chenyh_csdn/article/details/82859844