需求
在百度上面搜半天 基本上都是写死的标题或者用注解的方式,无法实现后期根据数据来修改标题,其中有一个方法是每一列都新建一个list,这样无法实现动态(也许可以但是太复杂了)
//此处获取所有成绩的数据
Map map = queryGradePoint(dto);
List<ScoreDto> scoreList = (List<ScoreDto>) map.get("scoreList");
log.info("scoreList" + scoreList);
// 创建一个excel文件
HSSFWorkbook book = new HSSFWorkbook();
// 创建Sheet对象
HSSFSheet sheet = book.createSheet("成绩表");
log.info("开始条件查询 查询课程表名字的集合 names");
QueryWrapper<SysCurriculum> wrapper = new QueryWrapper<>();
wrapper.eq("is_delete", DeleteEnum.NOT_DELETED);
List<SysCurriculum> sysCurriculumMapperList = sysCurriculumMapper.selectList(wrapper);
log.info("该集合为Excel 的第一行 做标题用"+sysCurriculumMapperList);
ArrayList<String> SysCurriculumnames = new ArrayList<>();
SysCurriculumnames.add("姓名");
SysCurriculumnames.add("班级");
//此处新建list 的作用为 将班级 姓名等信息前置处理
for (SysCurriculum sysCurriculum : sysCurriculumMapperList) {
String name = sysCurriculum.getName();
SysCurriculumnames.add(name);
}
SysCurriculumnames.add("个人平均分");
SysCurriculumnames.add("绩点");
SysCurriculumnames.add("挂科数<60");
SysCurriculumnames.add("总学分");
//文件生成开始
HSSFRow row = null;
HSSFCell cell = null;
int rowIndex = 2;
row = sheet.createRow(0);
row.setHeightInPoints(40);
int i = 0;
for (String string : SysCurriculumnames) {
cell = row.createCell(i);
cell.setCellValue(string);
i++;
}
FileSystemView fsv = FileSystemView.getFileSystemView();
File com = fsv.getHomeDirectory();
File file = new File(com.getPath());
log.info("Excel 生成的位置 "+com.getPath());
OutputStream stream = null;
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddhhmmss");
Date date = new Date();
stream = new FileOutputStream(new File(file, "成绩表" + sdf.format(date) + ".xls"));
book.write(stream);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (stream != null) ;
try {
stream.close();
} catch (IOException e) {
e.printStackTrace();
}
}