diff --git a/src/main/java/UnitTest/ImportExcel/CreateTableAndTemplate.java b/src/main/java/UnitTest/ImportExcel/CreateTableAndTemplate.java index 79a0d6e1..30dc9eda 100644 --- a/src/main/java/UnitTest/ImportExcel/CreateTableAndTemplate.java +++ b/src/main/java/UnitTest/ImportExcel/CreateTableAndTemplate.java @@ -1,12 +1,6 @@ package UnitTest.ImportExcel; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.InputStream; -import java.util.ArrayList; -import java.util.List; - +import cn.hutool.core.io.FileUtil; import com.aspose.cells.Workbook; import com.dsideal.QingLong.Util.AsposeUtil; import com.dsideal.QingLong.Util.GenericTemplateUtil; @@ -15,17 +9,28 @@ import com.jfinal.kit.Kv; 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.Record; import com.jfinal.plugin.activerecord.dialect.PostgreSqlDialect; import com.jfinal.plugin.hikaricp.HikariCpPlugin; +import org.apache.poi.xssf.usermodel.XSSFCell; import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + public class CreateTableAndTemplate { 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 userUploadExcel = "source.xlsx"; + //我处理后的模板 + public static String upload_excel_filename; /** * 功能:模拟前端人机交互对表结构进行修改 @@ -64,9 +69,14 @@ public class CreateTableAndTemplate { arp.start(); //源文件 + upload_excel_filename = UUID.randomUUID().toString().toLowerCase() + ".xlsx"; String source = path + File.separator + upload_excel_filename; - Workbook workbook = new Workbook(source); - int sheetCount = workbook.getWorksheets().getCount();//Sheet表数量 + if (FileUtil.exist(source)) FileUtil.del(source); + //复制成我自己的,随便折腾 + FileUtil.copy(path + File.separator + userUploadExcel, source, true); + + Workbook asposeWb = new Workbook(source); + int sheetCount = asposeWb.getWorksheets().getCount();//Sheet表数量 //解析上传EXCEL中的每个Sheet,解析出表头信息,表名描述等信息 InputStream is = new FileInputStream(source); XSSFWorkbook wb = new XSSFWorkbook(is); @@ -117,13 +127,20 @@ public class CreateTableAndTemplate { for (Kv kv : kvList) { int start_row = kv.getInt("start_row"); int end_row = kv.getInt("end_row"); - int start_column = kv.getInt("start_column"); - int end_column = kv.getInt("end_column"); List list = (List) kv.get("list"); int colIdx = 0; for (Record record : list) { boolean allow_blank = record.getBoolean("allow_blank"); - System.out.println(allow_blank); + if (!allow_blank) { + //一行时,星号加在一行 + //二行时,星号加在二行 + XSSFCell cell = wb.getSheetAt(sheetIdx).getRow(end_row).getCell(colIdx); + if (StrKit.isBlank(cell.getStringCellValue())) { + cell = wb.getSheetAt(sheetIdx).getRow(start_row).getCell(colIdx); + } + PoiUtil.addStar(wb, cell); + PoiUtil.addComment(wb, cell, "此单元格内容必须输入!"); + } colIdx++; } sheetIdx++; @@ -150,6 +167,6 @@ public class CreateTableAndTemplate { //关闭Excel wb.close(); //输出 - System.out.println("恭喜,数据库表创建成功,共创建" + kvList.size() + "个。"); + System.out.println("恭喜,数据库表创建成功,共" + kvList.size() + "个。"); } } diff --git a/src/main/java/com/dsideal/QingLong/Util/GenericTemplateUtil.java b/src/main/java/com/dsideal/QingLong/Util/GenericTemplateUtil.java index bdc98b29..dfeb2803 100644 --- a/src/main/java/com/dsideal/QingLong/Util/GenericTemplateUtil.java +++ b/src/main/java/com/dsideal/QingLong/Util/GenericTemplateUtil.java @@ -193,7 +193,7 @@ public class GenericTemplateUtil { //只允许1行或2行 if (_list.size() == 0 || _list.size() > 2) { kv.set("success", false); - kv.set("message", "表 “" + sheetName + "” 没有正确设置表头背景色,要求表头可以为一行或两行,而且必须背景色是同一种非空白颜色!"); + kv.set("message", "表 “" + sheetName + "” 没有正确设置表头背景色,要求表头可以为一行或两行,不支持更多行数,而且必须背景色是同一种非空白颜色!"); return kv; } // 标题,定义为表头上面的部分 diff --git a/src/main/java/com/dsideal/QingLong/Util/PoiUtil.java b/src/main/java/com/dsideal/QingLong/Util/PoiUtil.java index fa79462a..18b512c1 100644 --- a/src/main/java/com/dsideal/QingLong/Util/PoiUtil.java +++ b/src/main/java/com/dsideal/QingLong/Util/PoiUtil.java @@ -29,8 +29,17 @@ public class PoiUtil { String txt = cell.getStringCellValue(); int len = txt.length(); + if (len == 0) { + System.out.println(cell.getSheet().getSheetName()); + System.out.println(cell.getRowIndex() + " " + cell.getColumnIndex()); + System.out.println(cell.getStringCellValue()); + System.out.println("发现问题:" + txt); + System.exit(0); + } + txt += "(*)"; XSSFRichTextString richText = new XSSFRichTextString(txt);//全部文字 + richText.applyFont(0, len - 1, fontBlack); // 从第0个字符到第2个字符应用font1 richText.applyFont(len, len + 3, fontRed); // 从第2个字符到第4个字符应用font2 cell.setCellValue(richText);//设置文字 @@ -71,7 +80,7 @@ public class PoiUtil { * @param wb * @return */ - public static void addComment(Workbook wb, Cell cell, + public static void addComment(Workbook wb, Cell cell, String str) { Sheet sheet = cell.getSheet(); // 判断单元格上是否存在批注 diff --git a/src/main/resource/Excel/b61a2af2-223f-4058-a675-b212e4dd9487.xlsx b/src/main/resource/Excel/b61a2af2-223f-4058-a675-b212e4dd9487.xlsx deleted file mode 100644 index 3fc6f50f..00000000 Binary files a/src/main/resource/Excel/b61a2af2-223f-4058-a675-b212e4dd9487.xlsx and /dev/null differ diff --git a/src/main/resource/Excel/school.xlsx b/src/main/resource/Excel/school.xlsx deleted file mode 100644 index 17e3ce5d..00000000 Binary files a/src/main/resource/Excel/school.xlsx and /dev/null differ