package UnitTest.ImportExcel; import com.dsideal.QingLong.Util.AsposeUtil; import com.dsideal.QingLong.Util.ImportUtil; import com.jfinal.kit.PropKit; import com.jfinal.kit.StrKit; import com.jfinal.plugin.activerecord.ActiveRecordPlugin; import com.jfinal.plugin.activerecord.Record; import com.jfinal.plugin.activerecord.CaseInsensitiveContainerFactory; import com.jfinal.plugin.activerecord.dialect.PostgreSqlDialect; import com.jfinal.plugin.hikaricp.HikariCpPlugin; import org.apache.poi.ss.usermodel.IndexedColors; import org.apache.poi.xssf.usermodel.XSSFCell; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.io.*; import java.text.ParseException; import java.util.List; import java.util.Map; import java.util.UUID; public class ImportExcelData { public static String path = "D:\\dsWork\\QingLong\\src\\main\\resource\\Excel\\"; //模拟上传文件的文件名称 public static String upload_excel_filename = "b61a2af2-223f-4058-a675-b212e4dd9487" + ".xlsx"; public static String bureau_id = UUID.randomUUID().toString().toLowerCase(); public static String person_id = UUID.randomUUID().toString().toLowerCase(); public static void main(String[] args) throws IOException, ParseException { //加载License AsposeUtil.getLicense(); //告之配置文件位置 PropKit.use("application.properties"); HikariCpPlugin hp = new HikariCpPlugin(PropKit.get("jdbcUrl"), PropKit.get("user"), PropKit.get("password").trim(), PropKit.get("driverClassName")); hp.start(); // 配置ActiveRecord插件 ActiveRecordPlugin arp = new ActiveRecordPlugin(hp); //配置默认小写 arp.setContainerFactory(new CaseInsensitiveContainerFactory(true)); arp.setDialect(new PostgreSqlDialect()); arp.start(); //模板文件 String f1 = path + File.separator + upload_excel_filename; //用户上传的填充完的EXCEL文件 String f2 = path + File.separator + "school.xlsx"; //对比两个EXCEL文件 是不是格式一致,也就是是不是上传了正确的模板文件 int sheetCnt = ImportUtil.getExcelSheetCount(upload_excel_filename); for (int i = 0; i < sheetCnt; i++) { List> chayi = ImportUtil.checkYiZhi(f1, f2, i); if (chayi.size() > 0) { System.out.println("第" + (i + 1) + "个Sheet表检查过程中发现与要求上传的模板不一致,请重新下载模板填写完成后再次上传!"); return; } } System.out.println("OK,是我下发的模板!"); //打开EXCEL,进行检查 InputStream is = new FileInputStream(f2); XSSFWorkbook wb = new XSSFWorkbook(is); //遍历每个Sheet注册好的信息,对用户上传的数据表进行检查 boolean flag = true; for (int i = 0; i < sheetCnt; i++) {//表 //Sheet表 XSSFSheet sheet = wb.getSheetAt(i); //移除所有批注 ImportUtil.RemoveAllComment(sheet); //数据起始行 Record r = ImportUtil.getExcelSheetInfo(upload_excel_filename, i); int data_start_row = r.getInt("data_start_row"); //恢复背景色 ImportUtil.resetCellStyle(wb, sheet, data_start_row); //数据有效行数 int lastRowNum = sheet.getLastRowNum(); //遍历每一列 List list = ImportUtil.getExcelSheetColumnsInfo(upload_excel_filename, i); for (Record record : list) {//列 int excel_column_idx = record.getInt("excel_column_idx");//第几列 String column_type = record.getStr("column_type");//类型 String options = record.getStr("options");//下拉框内容 boolean allow_blank = record.getBoolean("allow_blank");//是不是允许为空 if (!allow_blank) { // 非空项目未填写 for (int j = data_start_row; j <= lastRowNum; j++) {//行 XSSFCell cell = sheet.getRow(j).getCell(excel_column_idx); if (StrKit.isBlank(ImportUtil.getCellValue(cell).toString())) { ImportUtil.addComment(wb, cell, "此处不能为空!"); ImportUtil.fillColor(wb, cell, IndexedColors.YELLOW.getIndex()); flag = false; } } } // 下拉列表不是从下拉列表中选择的 if (!StrKit.isBlank(options)) { for (int j = data_start_row; j <= lastRowNum; j++) {//行 XSSFCell cell = sheet.getRow(j).getCell(excel_column_idx); String value = ImportUtil.getCellValue(cell).toString(); if (StrKit.isBlank(value)) value = "&*^&Y&*(&*(&*()*("; if (options.indexOf(value) < 0) { ImportUtil.addComment(wb, cell, "未从指定范围内选择有效值!"); ImportUtil.fillColor(wb, cell, IndexedColors.YELLOW.getIndex()); flag = false; } } } // 检查数据类型是不是和规定的不兼容 for (int j = data_start_row; j <= lastRowNum; j++) {//行 XSSFCell cell = sheet.getRow(j).getCell(excel_column_idx); Object obj = ImportUtil.getCellValue(cell); if (column_type.equals("Integer") && !ImportUtil.isInteger(obj.toString())) {//要求整数,实际不是整数 ImportUtil.addComment(wb, cell, "要求是整数,实际数据类型不是整数!"); ImportUtil.fillColor(wb, cell, IndexedColors.YELLOW.getIndex()); flag = false; } else if (column_type.equals("Double") && !ImportUtil.isDouble(obj.toString())) {//要求是浮点数,实际不是浮点数 ImportUtil.addComment(wb, cell, "要求是小数,实际数据类型不是小数!"); ImportUtil.fillColor(wb, cell, IndexedColors.YELLOW.getIndex()); flag = false; } else if (column_type.equals("Date") && !ImportUtil.isDate(obj.toString())) {//要求是日期,实际不是日期 ImportUtil.addComment(wb, cell, "要求是日期格式,实际数据类型不是日期格式!"); ImportUtil.fillColor(wb, cell, IndexedColors.YELLOW.getIndex()); flag = false; } } } } // 取消每一个表单的激活状态 for (int i = 0; i < sheetCnt; i++) wb.getSheetAt(i).setSelected(false); // 设置活动表单为第一个表单 wb.setActiveSheet(0); //保存文件 FileOutputStream fileOut = new FileOutputStream(f2); wb.write(fileOut); if (!flag) { System.out.println("检查到输入的文件中存在不合法情况,请下载文件后查看处理后,重新上传!"); //关闭Excel wb.close(); return; } // 检查通过,导入数据 System.out.println("检查通过,可以导入数据!"); for (int i = 0; i < sheetCnt; i++) ImportUtil.importData(upload_excel_filename, wb, i,bureau_id,person_id); System.out.println("恭喜,所有数据成功导入!"); //关闭Excel wb.close(); } }