导出样式修改
This commit is contained in:
parent
ca5bfc97cd
commit
f9eac35ec3
|
|
@ -0,0 +1,176 @@
|
|||
package com.bonus.common.core.utils.poi;
|
||||
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.apache.poi.ss.usermodel.*;
|
||||
import org.apache.poi.ss.util.CellRangeAddress;
|
||||
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.IOException;
|
||||
import java.net.URLEncoder;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author 16043
|
||||
*/
|
||||
public class MultiSheetExcelExporter {
|
||||
|
||||
private final Workbook workbook;
|
||||
private int currentRowNum;
|
||||
|
||||
private SimpleDateFormat dateFormat;
|
||||
|
||||
public MultiSheetExcelExporter() {
|
||||
this.workbook = new XSSFWorkbook();
|
||||
this.currentRowNum = 0;
|
||||
this.dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
||||
}
|
||||
|
||||
public Sheet createSheet(String sheetName) {
|
||||
Sheet sheet = workbook.createSheet(sheetName);
|
||||
currentRowNum = 0;
|
||||
return sheet;
|
||||
}
|
||||
|
||||
public void addHeaderRow(Sheet sheet, List<String> headers) {
|
||||
Row headerRow = sheet.createRow(currentRowNum++);
|
||||
for (int i = 0; i < headers.size(); i++) {
|
||||
Cell cell = headerRow.createCell(i);
|
||||
cell.setCellValue(headers.get(i));
|
||||
// 可以在这里设置标题行的样式
|
||||
}
|
||||
}
|
||||
|
||||
public void addHeaderRowAndTitle(Sheet sheet, List<String> headers,String title) {
|
||||
|
||||
// 创建一个样式对象用于标题行
|
||||
CellStyle titleStyle = workbook.createCellStyle();
|
||||
titleStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
|
||||
titleStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
|
||||
Font titleFont = workbook.createFont();
|
||||
titleFont.setBold(true); // 设置字体加粗
|
||||
titleStyle.setFont(titleFont);
|
||||
// 设置水平居中对齐
|
||||
titleStyle.setAlignment(HorizontalAlignment.CENTER);
|
||||
// 添加标题行
|
||||
Row titleRow = sheet.createRow(currentRowNum++);
|
||||
Cell titleCell = titleRow.createCell(0);
|
||||
titleCell.setCellValue(title); // 标题内容
|
||||
titleCell.setCellStyle(titleStyle);
|
||||
// 如果需要合并单元格,可以使用下面的语句
|
||||
sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, headers.size() - 1));
|
||||
Row headerRow = sheet.createRow(currentRowNum++);
|
||||
for (int i = 0; i < headers.size(); i++) {
|
||||
Cell cell = headerRow.createCell(i);
|
||||
cell.setCellValue(headers.get(i));
|
||||
// 可以在这里设置标题行的样式
|
||||
cell.setCellStyle(titleStyle);
|
||||
}
|
||||
}
|
||||
|
||||
public void addDataRows(Sheet sheet, List<Map<String, Object>> dataList, List<String> headers) {
|
||||
|
||||
// 创建一个样式对象
|
||||
CellStyle titleStyle = workbook.createCellStyle();
|
||||
// 设置水平居中对齐
|
||||
titleStyle.setAlignment(HorizontalAlignment.CENTER);
|
||||
|
||||
for (Map<String, Object> rowData : dataList) {
|
||||
Row row = sheet.createRow(currentRowNum++);
|
||||
for (int i = 0; i < headers.size(); i++) {
|
||||
String header = headers.get(i);
|
||||
Cell cell = row.createCell(i);
|
||||
Object value = rowData.get(header);
|
||||
if (value != null) {
|
||||
if (value instanceof Date) {
|
||||
cell.setCellValue(dateFormat.format((Date) value));
|
||||
} else if (value instanceof String) {
|
||||
cell.setCellValue((String) value);
|
||||
} else if (value instanceof Number) {
|
||||
cell.setCellValue(((Number) value).doubleValue());
|
||||
} else if (value instanceof Boolean) {
|
||||
cell.setCellValue((Boolean) value);
|
||||
} else {
|
||||
cell.setCellValue(value.toString());
|
||||
}
|
||||
}
|
||||
cell.setCellStyle(titleStyle);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 转为异常排名导出重载的方法,设置列合并
|
||||
* @param sheet
|
||||
* @param dataList
|
||||
* @param headers
|
||||
* @param orgCounts
|
||||
* @param userCounts
|
||||
*/
|
||||
public void addDataRows(Sheet sheet, List<Map<String, Object>> dataList, List<String> headers,List<Integer> orgCounts, List<Integer> userCounts) {
|
||||
|
||||
// 创建一个样式对象
|
||||
//设置这两列为上下居中
|
||||
CellStyle cellStyle = workbook.createCellStyle();
|
||||
// 设置上下居中
|
||||
cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
|
||||
cellStyle.setAlignment(HorizontalAlignment.CENTER); // 可选:设置水平居中
|
||||
|
||||
for (Map<String, Object> rowData : dataList) {
|
||||
Row row = sheet.createRow(currentRowNum++);
|
||||
for (int i = 0; i < headers.size(); i++) {
|
||||
String header = headers.get(i);
|
||||
Cell cell = row.createCell(i);
|
||||
Object value = rowData.get(header);
|
||||
if (value != null) {
|
||||
if (value instanceof Date) {
|
||||
cell.setCellValue(dateFormat.format((Date) value));
|
||||
} else if (value instanceof String) {
|
||||
cell.setCellValue((String) value);
|
||||
} else if (value instanceof Number) {
|
||||
cell.setCellValue(((Number) value).doubleValue());
|
||||
} else if (value instanceof Boolean) {
|
||||
cell.setCellValue((Boolean) value);
|
||||
} else {
|
||||
cell.setCellValue(value.toString());
|
||||
}
|
||||
}
|
||||
cell.setCellStyle(cellStyle);
|
||||
}
|
||||
}
|
||||
//设置数据合并
|
||||
|
||||
int startRow = 2;
|
||||
for (int i = 0; i < orgCounts.size(); i++) {
|
||||
int orgCount = orgCounts.get(i);
|
||||
int endRow = startRow + orgCount - 1;
|
||||
if(endRow-startRow>0){
|
||||
sheet.addMergedRegion(new CellRangeAddress(startRow, endRow, 1, 1));
|
||||
}
|
||||
startRow = endRow + 1;
|
||||
}
|
||||
|
||||
startRow = 2;
|
||||
for (int i = 0; i < userCounts.size(); i++) {
|
||||
int userCount = userCounts.get(i);
|
||||
int endRow = startRow + userCount - 1;
|
||||
if(endRow-startRow>0){
|
||||
sheet.addMergedRegion(new CellRangeAddress(startRow, endRow, 2, 2));
|
||||
}
|
||||
startRow = endRow + 1;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
public void exportToResponse(HttpServletResponse response, String fileName) throws IOException {
|
||||
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
|
||||
response.setCharacterEncoding("UTF-8");
|
||||
response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(fileName + ".xlsx", "UTF-8"));
|
||||
workbook.write(response.getOutputStream());
|
||||
IOUtils.closeQuietly(workbook);
|
||||
}
|
||||
}
|
||||
|
|
@ -723,6 +723,8 @@ public class PmProjectController extends BaseController {
|
|||
List<UserSalaryApprovalVo> userSalaryApprovalList = pmProjectService.getUserSalaryApprovalList(userSalaryApprovalVo);
|
||||
//分包人员考勤明细
|
||||
UserAttendanceVo userAttendanceVo = new UserAttendanceVo();
|
||||
userAttendanceVo.setProName(userWagePayVo.getProName());
|
||||
userAttendanceVo.setMonth(userWagePayVo.getMonth());
|
||||
userAttendanceVo.setMonthId(Long.valueOf(userWagePayVo.getMonthId()));
|
||||
List<UserAttendanceVo> userAttendanceList = pmProjectService.getUserAttendanceList(userAttendanceVo);
|
||||
//农民工花名册
|
||||
|
|
@ -744,7 +746,7 @@ public class PmProjectController extends BaseController {
|
|||
ExcelUtil<ProMonthTableRosterVo> rosterExcel = new ExcelUtil<>(ProMonthTableRosterVo.class);
|
||||
List<String> titles = new ArrayList<>();
|
||||
titles.add("农民工花名册");
|
||||
titles.add("工程名称:"+proMonthTableRosterVo.getProId());
|
||||
titles.add("工程名称:"+userWagePayVo.getProName());
|
||||
List<String> tails = new ArrayList<>();
|
||||
rosterExcel.addSheetMy(wb, proMonthTableRosterList, "农民工花名册", titles, tails);
|
||||
|
||||
|
|
@ -752,7 +754,7 @@ public class PmProjectController extends BaseController {
|
|||
ExcelUtil<UserSalaryApprovalVo> salaryApprovalExcel = new ExcelUtil<>(UserSalaryApprovalVo.class);
|
||||
List<String> titles2 = new ArrayList<>();
|
||||
titles2.add("农民工实名制工资信息报审表");
|
||||
titles2.add("工程名称:"+userSalaryApprovalVo.getProId());
|
||||
titles2.add("工程名称:"+userWagePayVo.getProName());
|
||||
List<String> tails2 = new ArrayList<>();
|
||||
tails2.add("分包单位(章) 施工项目部(章) 监理项目部(章)");
|
||||
tails2.add("法定代表人/授权委托人: 项目经理: 总/专业监理工程师:");
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ public class ProMonthTableRosterVo {
|
|||
/**
|
||||
*工程名称
|
||||
*/
|
||||
private Long proName;
|
||||
private String proName;
|
||||
|
||||
/**
|
||||
*月份
|
||||
|
|
|
|||
Loading…
Reference in New Issue