diff --git a/Doc/MaxKB/MaxKB学习.txt b/Doc/MaxKB/MaxKB学习.txt index 89863243..192f7759 100644 --- a/Doc/MaxKB/MaxKB学习.txt +++ b/Doc/MaxKB/MaxKB学习.txt @@ -18,4 +18,11 @@ Dsideal4r5t6y7u!@# (1) 知识库-上传文档-QA问答对 1、点击下载对应模版并完善信息: 2、上传的表格文件中每个 sheet 会作为一个文档,sheet名称为文档名称 -3、每次最多上传 50 个文件,每个文件不超过 100MB \ No newline at end of file +3、每次最多上传 50 个文件,每个文件不超过 100MB + +# 预置问题 +1、某个区下学生数最多的学校。 +2、某个区下专任教师数最多的学校。 +3、某个区下的学校列表。 +4、某个区下班级数大于20个的学校列表 +5、各个区中学生数最多的学校列表 \ No newline at end of file diff --git a/Doc/MaxKB/结果.xlsx b/Doc/MaxKB/结果.xlsx new file mode 100644 index 00000000..6103bf3e Binary files /dev/null and b/Doc/MaxKB/结果.xlsx differ diff --git a/src/main/java/UnitTest/TestMaxKB.java b/src/main/java/UnitTest/TestMaxKB.java new file mode 100644 index 00000000..58e05a7a --- /dev/null +++ b/src/main/java/UnitTest/TestMaxKB.java @@ -0,0 +1,173 @@ +package UnitTest; + +import com.jfinal.kit.Kv; +import org.apache.poi.ss.usermodel.*; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; + +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.*; + +public class TestMaxKB { + + + /** + * 功能:获取指定单元格的值(字符串) + * 作者:黄海 + * 时间:2019-01-01 + * + * @param cell + * @return + */ + public static String getStringValue(Cell cell) { + String value = ""; + if (cell == null || cell.equals(null) || cell.getCellType() == CellType.BLANK) { + value = ""; + } else { + //判断数据类型 + switch (cell.getCellType()) { + case FORMULA: + try { + /* + * 此处判断使用公式生成的字符串有问题,因为HSSFDateUtil.isCellDateFormatted(cell)判断过程中cell + * .getNumericCellValue();方法会抛出java.lang.NumberFormatException异常 + */ + if (DateUtil.isCellDateFormatted(cell)) { + Date businessDateTime = cell.getDateCellValue(); + Calendar cal = Calendar.getInstance(); + cal.setTime(businessDateTime); + int year = cal.get(Calendar.YEAR); + int month = cal.get(Calendar.MONTH) + 1; + int date = cal.get(Calendar.DATE); + value = year + "-" + month + "-" + date; + break; + } else { + value = String.valueOf(cell.getNumericCellValue()); + } + } catch (IllegalStateException e) { + value = String.valueOf(cell.getRichStringCellValue()); + } + break; + case NUMERIC: + value = "" + cell.getNumericCellValue(); + break; + case STRING: + value = cell.getStringCellValue(); + break; + default: + break; + } + } + //先设置为字符串格式 + //cell.setCellType(CellType.STRING); + //然后读取之 + //value=cell.getStringCellValue().trim(); + if (value.endsWith(".0")) { + value = value.substring(0, value.length() - 2); + } + return value; + } + + public static void main(String[] args) throws IOException { + //数据源 + String excelPath = "D:\\dsWork\\QingLong\\Doc\\MaxKB\\各学校人员和班级统计.xlsx"; + //写入模板 + String templatePath = "D:\\dsWork\\QingLong\\Doc\\MaxKB\\excel模版.xlsx"; + + //输出结果 + String outputPath = "D:\\dsWork\\QingLong\\Doc\\MaxKB\\结果.xlsx"; + + //模板读取 + FileInputStream fTemplate = new FileInputStream(templatePath); + Workbook workbookTemplate = new XSSFWorkbook(fTemplate); + // 获取第一个工作表 + Sheet sheetTemplate = workbookTemplate.getSheetAt(0); + // 创建单元格样式(可选) + CellStyle style = workbookTemplate.createCellStyle(); + // 设置字体 + Font font = workbookTemplate.createFont(); + font.setFontName("宋体"); + font.setFontHeightInPoints((short) 11); + style.setFont(font); + // 设置对齐方式 + style.setAlignment(HorizontalAlignment.CENTER); + style.setVerticalAlignment(VerticalAlignment.CENTER); + + + //使用POI读取EXCEL文件的内容 + FileInputStream fSource = new FileInputStream(excelPath); + Workbook workbook = new XSSFWorkbook(fSource); + // 获取第一个工作表 + Sheet sheetSource = workbook.getSheetAt(0); + + + //1、一共有哪些区 + Set areaSet = new HashSet<>(); + for (Row row : sheetSource) { + String jyjName = getStringValue(row.getCell(1));//教育局 + areaSet.add(jyjName); + } + + //2、记录每个区下有多少个学校,多少个班级,多少个教师,多少个专任教师 + Map> schoolMap = new HashMap<>(); + for (Row row : sheetSource) { + String schoolName = getStringValue(row.getCell(0));//学位名称 + String jyjName = getStringValue(row.getCell(1));//教育局 + String classCount = getStringValue(row.getCell(2));//班级数量 + String studentCount = getStringValue(row.getCell(3));//学生数量 + String teacherCount = getStringValue(row.getCell(4));//教师数量 + String zhuanRenCount = getStringValue(row.getCell(5));//专任教师数量 + + List list = new ArrayList<>(); + if (schoolMap.containsKey(jyjName)) { + list = schoolMap.get(jyjName); + } + list.add("学校名称:" + schoolName + ",所属教育局:" + jyjName + ",班级数量:" + classCount + ",学生数量:" + studentCount + ",教师数量:" + teacherCount + ",专任教师数量:" + zhuanRenCount + ";"); + schoolMap.put(jyjName, list); + } + //将数据写入到EXCEL + for (int i = 0; i < areaSet.size(); i++) { + String area = areaSet.toArray()[i].toString(); + Row row = sheetTemplate.getRow(i + 1); // 放过表头 + if (row == null) { + row = sheetTemplate.createRow(i + 1);//创建行 + } + //(1)问题名称 + Cell cell = row.getCell(0); + if (cell == null) { + cell = row.createCell(0); + } + cell.setCellValue(area + "下的学校列表"); + cell.setCellStyle(style); + + //(2)回答 + cell = row.getCell(1); + if (cell == null) { + cell = row.createCell(1); + } + + String content = ""; + for (String s : schoolMap.get(area)) { + content = content + s + "\n"; + } + cell.setCellValue(content); + cell.setCellStyle(style); + + //(3)可选问题名称 + cell = row.getCell(2); + if (cell == null) { + cell = row.createCell(2); + } + cell.setCellValue(area + "下的学校列表"); + cell.setCellStyle(style); + } + // 保存文件 + FileOutputStream fileOut = new FileOutputStream(outputPath); + workbookTemplate.write(fileOut); + + //关闭文件 + fSource.close(); + workbook.close(); + } +}