From 195fe531f784c12c0cdf15046b66efbc5ad3df99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E6=B5=B7?= <10402852@qq.com> Date: Mon, 23 Sep 2024 09:47:57 +0800 Subject: [PATCH] 'commit' --- .../Controller/excelConvertController.java | 96 ++++++++++++++++--- .../com/dsideal/base/Tools/ConvertExcel.java | 33 ++++++- 2 files changed, 114 insertions(+), 15 deletions(-) diff --git a/dsBase/src/main/java/com/dsideal/base/Tools/Controller/excelConvertController.java b/dsBase/src/main/java/com/dsideal/base/Tools/Controller/excelConvertController.java index 52aaf14d..6cf93301 100644 --- a/dsBase/src/main/java/com/dsideal/base/Tools/Controller/excelConvertController.java +++ b/dsBase/src/main/java/com/dsideal/base/Tools/Controller/excelConvertController.java @@ -13,10 +13,7 @@ import com.jfinal.kit.StrKit; import com.jfinal.upload.UploadFile; import java.io.File; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; -import java.util.UUID; +import java.util.*; import java.util.regex.Pattern; public class excelConvertController extends Controller { @@ -68,15 +65,6 @@ public class excelConvertController extends Controller { for (int i = 0; i < reader.getColumnCount(); i++) { colNames[cl++] = read.getFirst().get(i).toString(); } - // 写入表头 - List header = new ArrayList<>(); - for (int cNum : fixedColumns) { - String cName = colNames[cNum];//列名 - header.add(cName); - } - header.add("类型"); - header.add("数量"); - writer.writeHeadRow(header); //数据 List> data = reader.read(1, reader.getRowCount());//从第1行读取到最后一行 @@ -102,13 +90,93 @@ public class excelConvertController extends Controller { writer.flush(); writer.close(); reader.close(); + + /***************************************************************************************/ + //上面的代码没动过,下面是新写的 + reader = ExcelUtil.getReader(output); + //前面固定的 + List header = new ArrayList<>(); + header.add("年份"); + header.add("学段"); + header.add("区域分类"); + header.add("总量分类"); + header.add("区域数值"); + header.add("总量数值"); + + // 写入表头 + uuidFileName = UUID.randomUUID().toString().toUpperCase() + ".xlsx"; + output = tempDir + uuidFileName; + writer = ExcelUtil.getWriter(output); + writer.writeHeadRow(header); + + //还需要继续扩展EXCEL模板,实现数据转换 + Set setArea = new HashSet<>(); + setArea.add("城区"); + setArea.add("镇区"); + setArea.add("乡村"); + + List> res = new ArrayList<>(); + data = reader.read(1, reader.getRowCount());//从第1行读取到最后一行 + for (List row : data) { + List rowData = new ArrayList<>(); + //输出固定列的名称和值 + rowData.add(row.get(0).toString());//年度 + rowData.add(row.get(1).toString());//学段 + + if (setArea.contains(row.get(2).toString())) {//如果是城区、镇区、乡村 + rowData.add(row.get(2).toString()); + rowData.add(""); + rowData.add(row.get(3).toString()); + rowData.add(""); + } else { + rowData.add(""); + rowData.add(row.get(2).toString()); + rowData.add(""); + rowData.add(row.get(3).toString()); + } + res.add(rowData); + } + + // 排序 + Collections.sort(res, new Comparator>() { + @Override + public int compare(List o1, List o2) { + // 先比较年份 +// int yearCompare = o1.get(0).compareTo(o2.get(0)); +// if (yearCompare != 0) { +// return yearCompare; +// } + + // 年份相同,比较学段 + int stageCompare = o1.get(1).compareTo(o2.get(1)); + if (stageCompare != 0) { + return stageCompare; + } + + // 学段相同,比较区域分类 + int areaCompare = o1.get(2).compareTo(o2.get(2)); + if (areaCompare != 0) { + return areaCompare; + } + + // 区域分类相同,比较总量分类 + return o1.get(3).compareTo(o2.get(3)); + } + }); + for (List re : res) { + writer.writeRow(re); + } + + reader.close(); + writer.flush(); + writer.close(); Kv kv = Kv.by("success", true); kv.set("uuidFileName", uuidFileName); renderJson(kv); } @Before({GET.class}) - public void download(String uuidFileName) throws IOException { + public void download(String uuidFileName) { String output = tempDir + uuidFileName; renderFile(new File(output), "转换结果.xlsx"); } diff --git a/dsBase/src/main/java/com/dsideal/base/Tools/ConvertExcel.java b/dsBase/src/main/java/com/dsideal/base/Tools/ConvertExcel.java index 8daee450..f8858860 100644 --- a/dsBase/src/main/java/com/dsideal/base/Tools/ConvertExcel.java +++ b/dsBase/src/main/java/com/dsideal/base/Tools/ConvertExcel.java @@ -90,6 +90,7 @@ public class ConvertExcel { setArea.add("镇区"); setArea.add("乡村"); + List> res = new ArrayList<>(); data = reader.read(1, reader.getRowCount());//从第1行读取到最后一行 for (List row : data) { List rowData = new ArrayList<>(); @@ -108,7 +109,37 @@ public class ConvertExcel { rowData.add(""); rowData.add(row.get(3).toString()); } - writer.writeRow(rowData); + res.add(rowData); + } + + // 排序 + Collections.sort(res, new Comparator>() { + @Override + public int compare(List o1, List o2) { + // 先比较年份 +// int yearCompare = o1.get(0).compareTo(o2.get(0)); +// if (yearCompare != 0) { +// return yearCompare; +// } + + // 年份相同,比较学段 + int stageCompare = o1.get(1).compareTo(o2.get(1)); + if (stageCompare != 0) { + return stageCompare; + } + + // 学段相同,比较区域分类 + int areaCompare = o1.get(2).compareTo(o2.get(2)); + if (areaCompare != 0) { + return areaCompare; + } + + // 区域分类相同,比较总量分类 + return o1.get(3).compareTo(o2.get(3)); + } + }); + for (List re : res) { + writer.writeRow(re); } reader.close();