1.数导出
时间有限,下个版本上线,数据导出通用版,即直接在pojo类上将注解,即可生成Excel
1.1 引入依赖
!--Excel导出依赖 -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.17</version>
</dependency>
1.2 service类
/**
* 生成Excel
*
* @param operateRecords
*/
public int generateTable(List<OperateRecord> operateRecords, String path) {
XSSFWorkbook wb = new XSSFWorkbook();
Sheet sheet = wb.createSheet("sheet1");
for (int i = 0; i < 9; i++) {
sheet.setColumnWidth(i, 4300);
}
// 标题样式 样式
XSSFFont titleFont = wb.createFont();
titleFont.setFontHeight(24);
titleFont.setBold(true);
CellStyle titleCellStyle = this.getCellStyle(wb);
titleCellStyle.setFont(titleFont);
titleCellStyle.setFillBackgroundColor((short) 1);
//主 标题 在这里插入主标题
Row titleRow;
Cell titleCell;
sheet.addMergedRegion(new CellRangeAddress((short) 0, (short) 2, (short) 0, (short) 7));
for (int i = 0; i <= 2; i++) {
titleRow = sheet.createRow(i);
for (int j = 0; j < 8; j++) {
titleCell = titleRow.createCell(j);
titleCell.setCellType(CellType.STRING);
titleCell.setCellStyle(titleCellStyle);
titleCell.setCellValue("操作记录表");
}
}
//列 标题 在这里插入标题
Row rowLabel;
Cell cellLabel;
rowLabel = sheet.createRow(3);
for (int j = 0; j < tableHeaders.size(); j++) {
cellLabel = rowLabel.createCell(j);
XSSFFont rowsTitleFont = wb.createFont();
rowsTitleFont.setBold(true);
CellStyle rowsTitleCellStyle = this.getCellStyle(wb);
rowsTitleCellStyle.setFont(rowsTitleFont);
cellLabel.setCellType(CellType.STRING);
cellLabel.setCellStyle(rowsTitleCellStyle);
cellLabel.setCellValue(tableHeaders.get(j));
}
//列 数据 在这里插入数据
Row rowCheck;
Cell cellCheck;
int rows = 4;
for (OperateRecord operateRecord : operateRecords) {
int column = 0;
rowCheck = sheet.createRow((rows++));
cellCheck = rowCheck.createCell(column++);
cellCheck.setCellType(CellType.STRING);
cellCheck.setCellStyle(this.getCellStyle(wb));
cellCheck.setCellValue(operateRecord.getId());
this.setCellCheck(cellCheck, rowCheck, this.getCellStyle(wb), column++).setCellValue(format.format(operateRecord.getRecordTime()));
this.setCellCheck(cellCheck, rowCheck, this.getCellStyle(wb), column++).setCellValue(operateRecord.getUsername());
this.setCellCheck(cellCheck, rowCheck, this.getCellStyle(wb), column++).setCellValue(operateRecord.getRequestIp());
this.setCellCheck(cellCheck, rowCheck, this.getCellStyle(wb), column++).setCellValue(operateRecord.getType());
this.setCellCheck(cellCheck, rowCheck, this.getCellStyle(wb), column++).setCellValue(operateRecord.getRequestMethod());
this.setCellCheck(cellCheck, rowCheck, this.getCellStyle(wb), column++).setCellValue(operateRecord.getRequestAnnotationName());
this.setCellCheck(cellCheck, rowCheck, this.getCellStyle(wb), column).setCellValue(operateRecord.getExceptionMsg());
}
if (!path.endsWith("/")) {
path = path + "/";
}
String filePath = path + format.format(new Date()).subSequence(0, 10) + "操作记录.xlsx";
return this.downloadFile(filePath, wb);
}
/**
* 设置单元格样式
*/
private Cell setCellCheck(Cell cellCheck, Row rowCheck, CellStyle cellStyle, int column) {
cellCheck = rowCheck.createCell(column);
cellCheck.setCellType(CellType.STRING);
cellCheck.setCellStyle(cellStyle);
return cellCheck;
}
/**
* 设置样式
*
* @param wb
* @return
*/
private CellStyle getCellStyle(XSSFWorkbook wb) {
CellStyle cellStyle = wb.createCellStyle();
cellStyle.setBorderTop(BorderStyle.THIN);
cellStyle.setBorderBottom(BorderStyle.THIN);
cellStyle.setBorderLeft(BorderStyle.THIN);
cellStyle.setBorderRight(BorderStyle.THIN);
cellStyle.setTopBorderColor(HSSFColor.BLACK.index);
cellStyle.setBottomBorderColor(HSSFColor.BLACK.index);
cellStyle.setLeftBorderColor(HSSFColor.BLACK.index);
cellStyle.setRightBorderColor(HSSFColor.BLACK.index);
cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 水平居中
cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 上下居中
return cellStyle;
}
/**
* 下载电子表格
*
* @param path
* @return
*/
private int downloadFile(String path, XSSFWorkbook wb) {
try {
File file = new File(path);
FileOutputStream fileOutputStream = new FileOutputStream(file);
wb.write(fileOutputStream);
fileOutputStream.close();
wb.close();
return 1;
} catch (Exception e) {
e.printStackTrace();
return 0;
}
}
1.2 Controller类
/**
* 数据导出
*
* @param operateRecords 需要导入的数据
* @param path 文件存储的路径
* @return
*/
@PostMapping("/generateTable")
public Result generateTable(@RequestBody List<OperateRecord> operateRecords, @RequestParam String path) {
int flag = operateRecordService.generateTable(operateRecords, path);
if (flag <= 0) {
return new Result(false, StatusCode.GENERATE_FAIL);
}
return new Result(true, StatusCode.OK);
}