diff --git a/dsBase/src/main/java/com/dsideal/base/BaseApplication.java b/dsBase/src/main/java/com/dsideal/base/BaseApplication.java index 38b26813..2b1253d3 100644 --- a/dsBase/src/main/java/com/dsideal/base/BaseApplication.java +++ b/dsBase/src/main/java/com/dsideal/base/BaseApplication.java @@ -16,6 +16,7 @@ import com.dsideal.base.Student.Controller.StudentController; import com.dsideal.base.StudentYd.Controller.StudentYdController; import com.dsideal.base.Teacher.Controller.TeacherController; import com.dsideal.base.TeacherYd.Controller.TeacherYdController; +import com.dsideal.base.Tools.Controller.excelConvertController; import com.dsideal.base.Util.FileUtil; import com.dsideal.base.Util.LogBackLogFactory; import com.dsideal.base.Util.PkUtil; @@ -92,6 +93,8 @@ public class BaseApplication extends JFinalConfig { me.add("/menu", MenuController.class); //数据权限 me.add("/dataAuthority", DataAuthorityController.class); + //excel格式变更 + me.add("/excelConvert", excelConvertController.class); } @Override diff --git a/dsBase/src/main/java/com/dsideal/base/Tools/Controller/Test.java b/dsBase/src/main/java/com/dsideal/base/Tools/Controller/Test.java new file mode 100644 index 00000000..71b5c79d --- /dev/null +++ b/dsBase/src/main/java/com/dsideal/base/Tools/Controller/Test.java @@ -0,0 +1,7 @@ +package com.dsideal.base.Tools.Controller; + +public class Test { + public static void main(String[] args) { + + } +} 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 new file mode 100644 index 00000000..52aaf14d --- /dev/null +++ b/dsBase/src/main/java/com/dsideal/base/Tools/Controller/excelConvertController.java @@ -0,0 +1,115 @@ +package com.dsideal.base.Tools.Controller; + +import cn.hutool.poi.excel.ExcelReader; +import cn.hutool.poi.excel.ExcelUtil; +import cn.hutool.poi.excel.ExcelWriter; +import com.dsideal.base.Util.CommonUtil; +import com.jfinal.aop.Before; +import com.jfinal.core.Controller; +import com.jfinal.ext.interceptor.GET; +import com.jfinal.ext.interceptor.POST; +import com.jfinal.kit.Kv; +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.regex.Pattern; + +public class excelConvertController extends Controller { + // 获取系统的临时文件目录 + private final String tempDir = System.getProperty("java.io.tmpdir"); + + @Before({POST.class}) + public void doTransformer() { + UploadFile excelFile = getFile();//得到 文件对象 + String fileName = excelFile.getFileName(); + String suffix = fileName.substring(fileName.lastIndexOf(".") + 1).trim(); + if (!suffix.equals("xlsx")) { + renderJson(CommonUtil.returnMessageJson(false, "上传文件类型错误!系统只允许上传xlsx格式!")); + return; + } + String input = excelFile.getFile().getAbsolutePath(); + File file = new File(input); + String fixColums = getPara("fixColums"); + if (StrKit.isBlank(fixColums)) { + renderJson(CommonUtil.returnMessageJson(false, "fixColums请输入固定列! 格式:0,1")); + return; + } + String regex = "^[0-9]+(,[0-9]+)*$"; + if (!Pattern.matches(regex, fixColums)) { + renderJson(CommonUtil.returnMessageJson(false, "fixColums固定列格式错误! 格式:0,1")); + return; + } + + //哪些列是固定不动的,比如此处是第0列与第1列是不动的,就是年份+学段 + List fixedColumns = new ArrayList<>(); + fixedColumns.add(0); + fixedColumns.add(1); + + //每列的列号与列名对应关系 + String[] colNames = new String[1024]; + int cl = 0; + + // 读取Excel数据 + ExcelReader reader = ExcelUtil.getReader(file); + // 创建临时文件,文件名具有随机UUID,扩展名为.xlsx + + //利用uuid生成一个临时文件名 + String uuidFileName = UUID.randomUUID().toString().toUpperCase() + ".xlsx"; + String output = tempDir + uuidFileName; + // 创建一个ExcelWriter对象,初始化时会创建一个空的Excel文件 + ExcelWriter writer = ExcelUtil.getWriter(output); + //表头 + List> read = reader.read(0, 0);//第0行是表头 + 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行读取到最后一行 + for (List row : data) { + //拆分每一行的数据 + for (int i = 0; i < reader.getColumnCount(); i++) { + if (!fixedColumns.contains(i)) {//非fixedColumns列进行枚举 + + List rowData = new ArrayList<>(); + //输出固定列的名称和值 + for (int cNum : fixedColumns) { + String value = row.get(cNum).toString();//列值 + rowData.add(value); + } + String cName = colNames[i];//列名 + String value = row.get(i).toString(); + rowData.add(cName); + rowData.add(value); + writer.writeRow(rowData); + } + } + } + writer.flush(); + writer.close(); + reader.close(); + Kv kv = Kv.by("success", true); + kv.set("uuidFileName", uuidFileName); + renderJson(kv); + } + + @Before({GET.class}) + public void download(String uuidFileName) throws IOException { + String output = tempDir + uuidFileName; + renderFile(new File(output), "转换结果.xlsx"); + } +} diff --git a/dsBase/src/main/java/com/dsideal/base/Tools/DataTransformer.java b/dsBase/src/main/java/com/dsideal/base/Tools/DataTransformer.java deleted file mode 100644 index d56d7961..00000000 --- a/dsBase/src/main/java/com/dsideal/base/Tools/DataTransformer.java +++ /dev/null @@ -1,75 +0,0 @@ -package com.dsideal.base.Tools; - -import cn.hutool.poi.excel.ExcelReader; -import cn.hutool.poi.excel.ExcelUtil; -import cn.hutool.poi.excel.ExcelWriter; -import org.apache.poi.ss.usermodel.CellStyle; -import org.apache.poi.ss.usermodel.FillPatternType; -import org.apache.poi.ss.usermodel.Font; - -import java.io.File; -import java.util.*; - -import org.apache.poi.ss.usermodel.IndexedColors; - -public class DataTransformer { - public static void main(String[] args) { - String input = "D:\\dsWork\\dsProject\\dsBase\\src\\main\\java\\com\\dsideal\\base\\Tools\\Sample.xlsx"; - String output = "D:\\example.xlsx"; - File file = new File(input); - - //哪些列是固定不动的,比如此处是第0列与第1列是不动的,就是年份+学段 - List fixedColumns = new ArrayList<>(); - fixedColumns.add(0); - fixedColumns.add(1); - - //每列的列号与列名对应关系 - String[] colNames = new String[1024]; - int cl = 0; - - // 读取Excel数据 - ExcelReader reader = ExcelUtil.getReader(file); - // 创建一个ExcelWriter对象,初始化时会创建一个空的Excel文件 - ExcelWriter writer = ExcelUtil.getWriter(output); - - //表头 - List> read = reader.read(0, 0);//第0行是表头 - 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行读取到最后一行 - for (List row : data) { - //拆分每一行的数据 - for (int i = 0; i < reader.getColumnCount(); i++) { - if (!fixedColumns.contains(i)) {//非fixedColumns列进行枚举 - - List rowData = new ArrayList<>(); - //输出固定列的名称和值 - for (int cNum : fixedColumns) { - String value = row.get(cNum).toString();//列值 - rowData.add(value); - } - String cName = colNames[i];//列名 - String value = row.get(i).toString(); - rowData.add(cName); - rowData.add(value); - writer.writeRow(rowData); - } - } - } - writer.flush(); - writer.close(); - System.out.println("恭喜,EXCEL文件成功生成!"); - } -}