From bf9860f3bd7b8288fac065dbfe2366f953a7cb24 Mon Sep 17 00:00:00 2001 From: lxyer <237809796@qq.com> Date: Tue, 18 Jun 2019 23:17:04 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E[=E9=80=9A=E7=94=A8=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=AF=BC=E5=85=A5=E6=A1=88=E4=BE=8B]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/net/tccn/kit/poi/ExcelKit.java | 20 +----- test/com/lxyer/excel/ExcelKitTest.java | 82 +++++++++++++++++++++++-- test/resource/import.txt | 2 + test/resource/userData.xlsx | Bin 0 -> 10973 bytes 4 files changed, 83 insertions(+), 21 deletions(-) create mode 100644 test/resource/import.txt create mode 100644 test/resource/userData.xlsx diff --git a/src/net/tccn/kit/poi/ExcelKit.java b/src/net/tccn/kit/poi/ExcelKit.java index 5fe26f5..3049871 100644 --- a/src/net/tccn/kit/poi/ExcelKit.java +++ b/src/net/tccn/kit/poi/ExcelKit.java @@ -294,6 +294,9 @@ public class ExcelKit { Map map = new HashMap(); for (int j = 0; j < cellNum && j < fields.length; j++) { + if (fields[j] == null || "".equals(fields[j])) { + continue; + } Cell cell = row.getCell(j); if (cell == null) { map.put(fields[j], ""); @@ -385,23 +388,6 @@ public class ExcelKit { e.printStackTrace(); } return null; - /*Workbook wk; - FileInputStream fis = new FileInputStream(file); - try { - wk = new HSSFWorkbook(fis);//if excel version 2007+ will throws OfficeXmlFileException - } catch (OfficeXmlFileException e) { - wk = new SXSSFWorkbook(new XSSFWorkbook(fis)); - } finally { - if (fis != null) { - try { - fis.close(); - } catch (Exception e) { - //e.printStackTrace(); - } - } - } - - return wk;*/ } //dev diff --git a/test/com/lxyer/excel/ExcelKitTest.java b/test/com/lxyer/excel/ExcelKitTest.java index 03e107e..8077781 100644 --- a/test/com/lxyer/excel/ExcelKitTest.java +++ b/test/com/lxyer/excel/ExcelKitTest.java @@ -17,11 +17,15 @@ public class ExcelKitTest { @Test public void mapExport(){ // 数据List T可以是map,也可以是某个Javabean - List list = asList( - Map.of("name", "张三", "age", 12), //jdk9+语法,创建Map并初始化数据 - Map.of("name", "李四", "age", 11) - ); + Map m1 = new HashMap(); + m1.put("name", "张三"); + m1.put("age", 12); + Map m2 = new HashMap(); + m2.put("name", "李四"); + m2.put("age", 11); + + List list = asList(m1, m2); // 表头数据 k-v,k:map的数据key,v:表头展示的名称 LinkedHashMap heads = new LinkedHashMap(); heads.put("name", "姓名"); @@ -81,4 +85,74 @@ public class ExcelKitTest { }); } + //--------------------------- 通用导入案例 -------------------------------- + + static Properties properties = new Properties(); + static { + try { + // 读取导入配置文件 + properties.load(new FileReader(new File("test/resource/import.txt"))); + } catch (IOException e) { + e.printStackTrace(); + } + } + + /** + * 构建入库语句 + * @param list 数据list + * @param heads 数据库需要入库的字段 + * @param table 实体表 + * @return + */ + private String buildSql(List list, String[] heads, String table) { + StringBuilder bufKs = new StringBuilder(); + StringBuilder bufVs = new StringBuilder(); + + for (String k : heads) { + if (!k.isEmpty()) { + bufKs.append("`" + k + "`,"); + } + } + bufKs.deleteCharAt(bufKs.length() - 1); + + list.forEach(m -> { + bufVs.append("("); + for (String k : heads) { + if (!k.isEmpty()) { + bufVs.append("'" + m.get(k) + "',"); + } + } + bufVs.deleteCharAt(bufVs.length() - 1); //去除最后多余的 逗号 + bufVs.append("),"); + }); + bufVs.deleteCharAt(bufVs.length() - 1); //去除最后多余的 逗号 + return String.format("INSERT INTO %s (%s) VALUES %s;", table, bufKs, bufVs); // table, ks, vs + } + + /** + * 通用数据导入 + */ + @Test + public void importTest() { + String key = "user"; // 假定使用业务实体表名作为key + + // 获取需要导入的列 + String cfg = properties.getProperty(key); + String[] heads = cfg.split(","); + for (int i = 0; i < heads.length; i++) { + heads[i] = heads[i].trim(); + } + + // 通过配置读取数据,userData.xlsx为待导入数据 + List list = ExcelKit.readExcel(new File("test/resource/userData.xlsx"), heads); + list.remove(0); // 去除多余的行首两行 + list.remove(0); + + System.out.println(list); // 打印出数据看看是否ok + + // 创建入库语句 + String sql = buildSql(list, heads, key); + System.out.println(sql); + } + } diff --git a/test/resource/import.txt b/test/resource/import.txt new file mode 100644 index 0000000..1626ea3 --- /dev/null +++ b/test/resource/import.txt @@ -0,0 +1,2 @@ +# 假定我们就使用数据库对应的 “列名”作为导入配置,如果excel中间有需要跳过的列 配置中用空号占位 +user= ,username, , sex,phone,email \ No newline at end of file diff --git a/test/resource/userData.xlsx b/test/resource/userData.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..e296d161d179baa7a273bdd4267f567b96e1977a GIT binary patch literal 10973 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 Mh%hjjba&eS2YbKon*aa+ literal 0 HcmV?d00001