|
|
|
@ -130,11 +130,19 @@ public class PlatformQuestionBankService {
|
|
|
|
String name = StringUtils.defaultString(file.getOriginalFilename()).toLowerCase(Locale.ROOT);
|
|
|
|
String name = StringUtils.defaultString(file.getOriginalFilename()).toLowerCase(Locale.ROOT);
|
|
|
|
if (name.endsWith(".docx")) return importWord(user, file, taskKey);
|
|
|
|
if (name.endsWith(".docx")) return importWord(user, file, taskKey);
|
|
|
|
try (Workbook workbook = WorkbookFactory.create(file.getInputStream())) {
|
|
|
|
try (Workbook workbook = WorkbookFactory.create(file.getInputStream())) {
|
|
|
|
Sheet sheet = workbook.getSheetAt(0); DataFormatter formatter = new DataFormatter(); Row header = sheet.getRow(0);
|
|
|
|
Sheet sheet = workbook.getSheetAt(0); DataFormatter formatter = new DataFormatter();
|
|
|
|
|
|
|
|
Row header = null; int headerIndex = -1;
|
|
|
|
|
|
|
|
for (int i = 0; i <= Math.min(sheet.getLastRowNum(), 9); i++) {
|
|
|
|
|
|
|
|
Row candidate = sheet.getRow(i); if (candidate == null) continue;
|
|
|
|
|
|
|
|
boolean hasType = false, hasStem = false;
|
|
|
|
|
|
|
|
for (int c = 0; c < candidate.getLastCellNum(); c++) { String v = formatter.formatCellValue(candidate.getCell(c)).trim(); if ("题型".equals(v)) hasType = true; if ("题干".equals(v)) hasStem = true; }
|
|
|
|
|
|
|
|
if (hasType && hasStem) { header = candidate; headerIndex = i; break; }
|
|
|
|
|
|
|
|
}
|
|
|
|
if (header == null) throw new IllegalArgumentException("Excel缺少表头");
|
|
|
|
if (header == null) throw new IllegalArgumentException("Excel缺少表头");
|
|
|
|
Map<String, Integer> columns = new HashMap<>(); for (int i=0;i<header.getLastCellNum();i++) columns.put(formatter.formatCellValue(header.getCell(i)).trim(), i);
|
|
|
|
Map<String, Integer> columns = new HashMap<>(); for (int i=0;i<header.getLastCellNum();i++) columns.put(formatter.formatCellValue(header.getCell(i)).trim(), i);
|
|
|
|
List<Map<String,Object>> result = new ArrayList<>();
|
|
|
|
List<Map<String,Object>> result = new ArrayList<>();
|
|
|
|
for (int r=1;r<=sheet.getLastRowNum();r++) { Row row=sheet.getRow(r); if (row==null) continue; Map<String,Object> q=new LinkedHashMap<>(); q.put("taskKey",taskKey); q.put("type", excelType(value(row, columns.get("题型"), formatter))); q.put("stem", value(row, columns.get("题干"), formatter)); q.put("answer", value(row, columns.get("正确答案"), formatter)); q.put("analysis", value(row, columns.get("答案解析"), formatter)); List<Map<String,Object>> options=new ArrayList<>(); for(char c='A';c<='H';c++){String v=value(row,columns.get("选项"+c),formatter); if(StringUtils.isNotBlank(v)) options.add(map("label",String.valueOf(c),"content",v));} q.put("options",options); if(StringUtils.isBlank(text(q.get("stem")))) continue; result.add(save(user,null,q)); }
|
|
|
|
for (int r=headerIndex+1;r<=sheet.getLastRowNum();r++) { Row row=sheet.getRow(r); if (row==null) continue; Map<String,Object> q=new LinkedHashMap<>(); q.put("taskKey",taskKey); q.put("type", excelType(value(row, columns.get("题型"), formatter))); q.put("stem", value(row, columns.get("题干"), formatter)); q.put("answer", value(row, columns.get("正确答案"), formatter)); q.put("analysis", value(row, columns.get("答案解析"), formatter)); List<Map<String,Object>> options=new ArrayList<>(); for(char c='A';c<='H';c++){String v=value(row,columns.get("选项"+c),formatter); if(StringUtils.isNotBlank(v)) options.add(map("label",String.valueOf(c),"content",v));} q.put("options",options); if(StringUtils.isBlank(text(q.get("stem")))) continue; result.add(save(user,null,q)); }
|
|
|
|
|
|
|
|
if (result.isEmpty()) throw new IllegalArgumentException("Excel未读取到题目");
|
|
|
|
return result;
|
|
|
|
return result;
|
|
|
|
} catch (IllegalArgumentException e) { throw e; } catch (Exception e) { throw new IllegalArgumentException("Excel导入失败,请检查模板"); }
|
|
|
|
} catch (IllegalArgumentException e) { throw e; } catch (Exception e) { throw new IllegalArgumentException("Excel导入失败,请检查模板"); }
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|