EasyExcel导出,第一行主标题,单元格合并

使用阿里的 easyexcel 实现如下图所示的excel导出:

第一行是主标题。

数据列表从第2行开始。

1.pom.xml

<dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>easyexcel</artifactId>
	<version>3.3.2</version>
</dependency>
<dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>easyexcel-core</artifactId>
	<version>3.3.2</version>
</dependency>

2. 导出拦截器

用于展示主标题及其样式。

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.VerticalAlignment;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.util.CellRangeAddress;

import com.alibaba.excel.write.handler.SheetWriteHandler;
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
import com.alibaba.excel.write.metadata.holder.WriteWorkbookHolder;

/**
 * 实施进度报表 拦截器
 * <p> 参考:https://www.cnblogs.com/better-farther-world2099/articles/16106085.html </p>
 * @author 
 * @date 2024/9/19 星期四
 * @since JDK 17
 */
public class ImplProgressReportSheetWriteHandler implements SheetWriteHandler {
    @Override
    public void beforeSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {

    }

    @Override
    public void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {
        Workbook workbook = writeWorkbookHolder.getWorkbook();
        Sheet sheet = workbook.getSheetAt(0);
        // 设置第一行标题
        Row row1 = sheet.createRow(0);
        row1.setHeight((short) 300);
        Cell row1Cell1 = row1.createCell(0);
        row1Cell1.setCellValue("xxxx报表");
        CellStyle row1CellStyle = workbook.createCellStyle();
        row1CellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
        row1CellStyle.setAlignment(HorizontalAlignment.CENTER);
        Font row1Font = workbook.createFont();
        row1Font.setBold(true);
        row1Font.setFontName("方正小标宋_GBK");
        row1Font.setFontHeightInPoints((short) 20);
        row1CellStyle.setFont(row1Font);
        row1Cell1.setCellStyle(row1CellStyle);
        //合并单元格,起始行,结束行,起始列,结束列
        sheet.addMergedRegionUnsafe(new CellRangeAddress(0, 1, 0, 17));
    }
}

3.controller

import java.io.UnsupportedEncodingException;
import java.math.BigDecimal;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.io.IOUtils;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.support.ExcelTypeEnum;
import com.alibaba.fastjson.JSON;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;

@Slf4j
@Api(tags = "工程标段填报统计 API接口")
@RestController
@RequestMapping(value = "/migrate/prjbid/fill")
public class MigrateBidFillStatController {

	@ApiOperation(value = "导出实施进度报表")
	@PostMapping("/export/implProgressReport")
	public void implProgressReportExport(HttpServletResponse response, @RequestBody ImplProgressReportRequest request) {
		/* 参考:https://blog.csdn.net/qq_43932985/article/details/141644977 */
		log.info("导出实施进度报表-开始.请求参数:{}", JSON.toJSONString(request));

		ServletOutputStream os = null;

		try {
			this.setExcelResponseProp(response, "实施进度报表");

			ImplProgressReportExportVo vo1 = new ImplProgressReportExportVo();
			vo1.setNumber("一");
			vo1.setFundName("土地");
			vo1.setUnit("亩");
			vo1.setTotalPlan(new BigDecimal("31751.62"));
			vo1.setImplCurMonthComplete(new BigDecimal("391.46"));
			vo1.setImplTotalComplete(new BigDecimal("3185.2"));
			//vo1.setHbCurMonthComplete(BigDecimal.ZERO);
			//vo1.setHbTotalComplete(BigDecimal.ZERO);
			vo1.setNanNingCurMonthComplete(new BigDecimal("167.7"));
			vo1.setNanNingTotalComplete(new BigDecimal("620.31"));
			vo1.setBeiHaiCurMonthComplete(new BigDecimal("45.22"));
			vo1.setBeiHaiTotalComplete(new BigDecimal("437.43"));
			vo1.setFcgCurMonthComplete(new BigDecimal("7.53"));
			vo1.setFcgTotalComplete(new BigDecimal("101.98"));
			vo1.setQinZhouCurMonthComplete(new BigDecimal("171.01"));
			vo1.setQinZhouTotalComplete(new BigDecimal("1581.62"));
			//vo1.setYuLinCurMonthComplete(BigDecimal.ZERO);
			vo1.setYuLinTotalComplete(new BigDecimal("443.86"));

			ImplProgressReportExportVo vo2 = new ImplProgressReportExportVo();
			vo2.setNumber("1");
			vo2.setFundName("永久用地");
			vo2.setUnit("亩");
			vo2.setTotalPlan(new BigDecimal("2605.88"));
	//			vo2.setImplCurMonthComplete(BigDecimal.ZERO);
	//			vo2.setImplTotalComplete(BigDecimal.ZERO);
	//			vo2.setHbCurMonthComplete(BigDecimal.ZERO);
	//			vo2.setHbTotalComplete(BigDecimal.ZERO);
	//			vo2.setNanNingCurMonthComplete(BigDecimal.ZERO);
	//			vo2.setNanNingTotalComplete(BigDecimal.ZERO);
	//			vo2.setBeiHaiCurMonthComplete(BigDecimal.ZERO);
	//			vo2.setBeiHaiTotalComplete(BigDecimal.ZERO);
	//			vo2.setFcgCurMonthComplete(BigDecimal.ZERO);
	//			vo2.setFcgTotalComplete(BigDecimal.ZERO);
	//			vo2.setQinZhouCurMonthComplete(BigDecimal.ZERO);
	//			vo2.setQinZhouTotalComplete(BigDecimal.ZERO);
	//			vo2.setYuLinCurMonthComplete(BigDecimal.ZERO);
	//			vo2.setYuLinTotalComplete(BigDecimal.ZERO);

			ImplProgressReportExportVo vo3 = new ImplProgressReportExportVo();
			vo3.setNumber("2");
			vo3.setFundName("临时用地");
			vo3.setUnit("亩");
			vo3.setTotalPlan(new BigDecimal("29145.74"));
			vo3.setImplCurMonthComplete(new BigDecimal("391.46"));
			vo3.setImplTotalComplete(new BigDecimal("3185.2"));
			//vo3.setHbCurMonthComplete(BigDecimal.ZERO);
			//vo3.setHbTotalComplete(BigDecimal.ZERO);
			vo3.setNanNingCurMonthComplete(new BigDecimal("167.7"));
			vo3.setNanNingTotalComplete(new BigDecimal("620.31"));
			vo3.setBeiHaiCurMonthComplete(new BigDecimal("45.22"));
			vo3.setBeiHaiTotalComplete(new BigDecimal("437.43"));
			vo3.setFcgCurMonthComplete(new BigDecimal("7.53"));
			vo3.setFcgTotalComplete(new BigDecimal("101.98"));
			vo3.setQinZhouCurMonthComplete(new BigDecimal("171.01"));
			vo3.setQinZhouTotalComplete(new BigDecimal("1581.62"));
			//vo3.setYuLinCurMonthComplete(BigDecimal.ZERO);
			vo3.setYuLinTotalComplete(new BigDecimal("443.86"));

			os = response.getOutputStream();

			EasyExcel.write(os).head(ImplProgressReportExportVo.class).excelType(ExcelTypeEnum.XLSX)
					// 设置拦截器或自定义样式,第1行是主标题
					.registerWriteHandler(new ImplProgressReportSheetWriteHandler())
					.sheet("实施进度报表")
					//设置默认样式及写入头信息开始的行数
					.useDefaultStyle(true).relativeHeadRowIndex(2) // 数据列表从第2行开始
					.doWrite(new ArrayList<>(Arrays.asList(vo1, vo2, vo3)));
		} catch (Exception e) {
			log.error(String.format("导出实施进度报表-失败.请求参数:%s", JSON.toJSONString(request)), e);
		} finally {
			IOUtils.closeQuietly(os);
		}
	}

	/**
	 * 设置响应结果
	 *
	 * @param response    响应结果对象
	 * @param rawFileName 文件名
	 * @throws UnsupportedEncodingException 不支持编码异常
	 */
	private void setExcelResponseProp(HttpServletResponse response, String rawFileName) throws UnsupportedEncodingException {
		response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
		response.setCharacterEncoding("utf-8");
		String fileName = URLEncoder.encode(rawFileName, "UTF-8").replaceAll("\\+", "%20");
		response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
	}
}

4. vo类

import java.math.BigDecimal;

import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.alibaba.excel.annotation.write.style.ContentFontStyle;
import com.alibaba.excel.annotation.write.style.ContentStyle;
import com.alibaba.excel.annotation.write.style.HeadFontStyle;
import com.alibaba.excel.annotation.write.style.HeadStyle;
import com.alibaba.excel.enums.poi.BorderStyleEnum;
import com.alibaba.excel.enums.poi.FillPatternTypeEnum;
import com.alibaba.excel.enums.poi.HorizontalAlignmentEnum;

import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;

/**
 * 导出实施进度报表
 * 
 * @author 
 * @date 2024/9/14 星期六
 * @since JDK 17
 */
@Data
@EqualsAndHashCode(callSuper = false)
@ToString(callSuper = true)
public class ImplProgressReportExportVo {
	/** 序号 */
	// 这一列 每隔2行 合并单元格
	// @ContentLoopMerge(eachRow = 2)
	@ExcelProperty(value = "序号", index = 0)
	@HeadFontStyle(fontHeightInPoints = 10) // 字体大小
	@ColumnWidth(10)
	// HorizontalAlignmentEnum.CENTER 居中
	// FillPatternTypeEnum.SOLID_FOREGROUND : 充满
	// fillForegroundColor 见 https://www.cnblogs.com/hezemin/p/17272591.html
	@HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 1)
	@ContentStyle(horizontalAlignment = HorizontalAlignmentEnum.CENTER, fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND,
			fillForegroundColor = 1, borderRight = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN)
	@ContentFontStyle(fontHeightInPoints = 10) // 字体大小
	private String number;

	@ExcelProperty(value = "项目", index = 1)
	@HeadFontStyle(fontHeightInPoints = 10) // 字体大小
	@ColumnWidth(20)
	// HorizontalAlignmentEnum.CENTER 居中
	// FillPatternTypeEnum.SOLID_FOREGROUND : 充满
	// fillForegroundColor 见 https://www.cnblogs.com/hezemin/p/17272591.html
	@HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 1)
	@ContentStyle(horizontalAlignment = HorizontalAlignmentEnum.CENTER, fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND,
			fillForegroundColor = 1, borderRight = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN)
	@ContentFontStyle(fontHeightInPoints = 10) // 字体大小
	private String fundName;

	/** 单位 */
	@ExcelProperty(value = "单位", index = 2)
	@HeadFontStyle(fontHeightInPoints = 10) // 字体大小
	@ColumnWidth(10)
	// HorizontalAlignmentEnum.CENTER 居中
	// FillPatternTypeEnum.SOLID_FOREGROUND : 充满
	// fillForegroundColor 见 https://www.cnblogs.com/hezemin/p/17272591.html
	@HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 1)
	@ContentStyle(horizontalAlignment = HorizontalAlignmentEnum.CENTER, fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND,
			fillForegroundColor = 1, borderRight = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN)
	@ContentFontStyle(fontHeightInPoints = 10) // 字体大小
	private String unit;

	/** 初步设计指标/投资(设计单位填报) */
	@ExcelProperty(value = "初步设计指标", index = 3)
	@HeadFontStyle(fontHeightInPoints = 10) // 字体大小
	@ColumnWidth(12)
	// HorizontalAlignmentEnum.CENTER 居中
	// FillPatternTypeEnum.SOLID_FOREGROUND : 充满
	// fillForegroundColor 见 https://www.cnblogs.com/hezemin/p/17272591.html
	@HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 42)
	@ContentStyle(horizontalAlignment = HorizontalAlignmentEnum.CENTER, fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND,
			fillForegroundColor = 42, borderRight = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN)
	@ContentFontStyle(fontHeightInPoints = 10) // 字体大小
	private BigDecimal totalPlan;

	/** 实施合计(当月完成指标) */
	@ExcelProperty(value = { "实施合计", "当月完成指标" }, index = 4)
	@HeadFontStyle(fontHeightInPoints = 10) // 字体大小
	@ColumnWidth(12)
	// HorizontalAlignmentEnum.CENTER 居中
	// FillPatternTypeEnum.SOLID_FOREGROUND : 充满
	// fillForegroundColor 见 https://www.cnblogs.com/hezemin/p/17272591.html
	@HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 1)
	@ContentStyle(horizontalAlignment = HorizontalAlignmentEnum.CENTER, fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND,
			fillForegroundColor = 1, borderRight = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN)
	@ContentFontStyle(fontHeightInPoints = 10) // 字体大小
	private BigDecimal implCurMonthComplete;

	/** 实施合计(累计完成指标) */
	@ExcelProperty(value = { "实施合计", "累计完成指标" }, index = 5)
	@HeadFontStyle(fontHeightInPoints = 10) // 字体大小
	@ColumnWidth(12)
	// HorizontalAlignmentEnum.CENTER 居中
	// FillPatternTypeEnum.SOLID_FOREGROUND : 充满
	// fillForegroundColor 见 https://www.cnblogs.com/hezemin/p/17272591.html
	@HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 1)
	@ContentStyle(horizontalAlignment = HorizontalAlignmentEnum.CENTER, fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND,
			fillForegroundColor = 1, borderRight = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN)
	@ContentFontStyle(fontHeightInPoints = 10) // 字体大小
	private BigDecimal implTotalComplete;

	/** 环北公司(当月完成指标) */
	@ExcelProperty(value = { "环北公司", "当月完成指标" }, index = 6)
	@HeadFontStyle(fontHeightInPoints = 10) // 字体大小
	@ColumnWidth(12)
	// HorizontalAlignmentEnum.CENTER 居中
	// FillPatternTypeEnum.SOLID_FOREGROUND : 充满
	// fillForegroundColor 见 https://www.cnblogs.com/hezemin/p/17272591.html
	@HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 47)
	@ContentStyle(horizontalAlignment = HorizontalAlignmentEnum.CENTER, fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND,
			fillForegroundColor = 47, borderRight = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN)
	@ContentFontStyle(fontHeightInPoints = 10) // 字体大小
	private BigDecimal hbCurMonthComplete;

	/** 环北公司(累计完成指标) */
	@ExcelProperty(value = { "环北公司", "累计完成指标" }, index = 7)
	@HeadFontStyle(fontHeightInPoints = 10) // 字体大小
	@ColumnWidth(12)
	// HorizontalAlignmentEnum.CENTER 居中
	// FillPatternTypeEnum.SOLID_FOREGROUND : 充满
	// fillForegroundColor 见 https://www.cnblogs.com/hezemin/p/17272591.html
	@HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 47)
	@ContentStyle(horizontalAlignment = HorizontalAlignmentEnum.CENTER, fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND,
			fillForegroundColor = 47, borderRight = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN)
	@ContentFontStyle(fontHeightInPoints = 10) // 字体大小
	private BigDecimal hbTotalComplete;

	/** 南宁市(当月完成指标) */
	@ExcelProperty(value = { "南宁市", "当月完成指标" }, index = 8)
	@HeadFontStyle(fontHeightInPoints = 10) // 字体大小
	@ColumnWidth(12)
	// HorizontalAlignmentEnum.CENTER 居中
	// FillPatternTypeEnum.SOLID_FOREGROUND : 充满
	// fillForegroundColor 见 https://www.cnblogs.com/hezemin/p/17272591.html
	@HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 31)
	@ContentStyle(horizontalAlignment = HorizontalAlignmentEnum.CENTER, fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND,
			fillForegroundColor = 31, borderRight = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN)
	@ContentFontStyle(fontHeightInPoints = 10) // 字体大小
	private BigDecimal nanNingCurMonthComplete;

	/** 南宁市(累计完成指标) */
	@ExcelProperty(value = { "南宁市", "累计完成指标" }, index = 9)
	@HeadFontStyle(fontHeightInPoints = 10) // 字体大小
	@ColumnWidth(12)
	// HorizontalAlignmentEnum.CENTER 居中
	// FillPatternTypeEnum.SOLID_FOREGROUND : 充满
	// fillForegroundColor 见 https://www.cnblogs.com/hezemin/p/17272591.html
	@HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 31)
	@ContentStyle(horizontalAlignment = HorizontalAlignmentEnum.CENTER, fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND,
			fillForegroundColor = 31, borderRight = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN)
	@ContentFontStyle(fontHeightInPoints = 10) // 字体大小
	private BigDecimal nanNingTotalComplete;

	/** 北海市(当月完成指标) */
	@ExcelProperty(value = { "北海市", "当月完成指标" }, index = 10)
	@HeadFontStyle(fontHeightInPoints = 10) // 字体大小
	@ColumnWidth(12)
	// HorizontalAlignmentEnum.CENTER 居中
	// FillPatternTypeEnum.SOLID_FOREGROUND : 充满
	// fillForegroundColor 见 https://www.cnblogs.com/hezemin/p/17272591.html
	@HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 31)
	@ContentStyle(horizontalAlignment = HorizontalAlignmentEnum.CENTER, fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND,
			fillForegroundColor = 31, borderRight = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN)
	@ContentFontStyle(fontHeightInPoints = 10) // 字体大小
	private BigDecimal beiHaiCurMonthComplete;

	/** 北海市(累计完成指标) */
	@ExcelProperty(value = { "北海市", "累计完成指标" }, index = 11)
	@HeadFontStyle(fontHeightInPoints = 10) // 字体大小
	@ColumnWidth(12)
	// HorizontalAlignmentEnum.CENTER 居中
	// FillPatternTypeEnum.SOLID_FOREGROUND : 充满
	// fillForegroundColor 见 https://www.cnblogs.com/hezemin/p/17272591.html
	@HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 31)
	@ContentStyle(horizontalAlignment = HorizontalAlignmentEnum.CENTER, fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND,
			fillForegroundColor = 31, borderRight = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN)
	@ContentFontStyle(fontHeightInPoints = 10) // 字体大小
	private BigDecimal beiHaiTotalComplete;

	/** 防城港市(当月完成指标) */
	@ExcelProperty(value = { "防城港市", "当月完成指标" }, index = 12)
	@HeadFontStyle(fontHeightInPoints = 10) // 字体大小
	@ColumnWidth(12)
	// HorizontalAlignmentEnum.CENTER 居中
	// FillPatternTypeEnum.SOLID_FOREGROUND : 充满
	// fillForegroundColor 见 https://www.cnblogs.com/hezemin/p/17272591.html
	@HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 31)
	@ContentStyle(horizontalAlignment = HorizontalAlignmentEnum.CENTER, fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND,
			fillForegroundColor = 31, borderRight = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN)
	@ContentFontStyle(fontHeightInPoints = 10) // 字体大小
	private BigDecimal fcgCurMonthComplete;

	/** 防城港市(累计完成指标) */
	@ExcelProperty(value = { "防城港市", "累计完成指标" }, index = 13)
	@HeadFontStyle(fontHeightInPoints = 10) // 字体大小
	@ColumnWidth(12)
	// HorizontalAlignmentEnum.CENTER 居中
	// FillPatternTypeEnum.SOLID_FOREGROUND : 充满
	// fillForegroundColor 见 https://www.cnblogs.com/hezemin/p/17272591.html
	@HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 31)
	@ContentStyle(horizontalAlignment = HorizontalAlignmentEnum.CENTER, fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND,
			fillForegroundColor = 31, borderRight = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN)
	@ContentFontStyle(fontHeightInPoints = 10) // 字体大小
	private BigDecimal fcgTotalComplete;

	/** 钦州市(当月完成指标) */
	@ExcelProperty(value = { "钦州市", "当月完成指标" }, index = 14)
	@HeadFontStyle(fontHeightInPoints = 10) // 字体大小
	@ColumnWidth(12)
	// HorizontalAlignmentEnum.CENTER 居中
	// FillPatternTypeEnum.SOLID_FOREGROUND : 充满
	// fillForegroundColor 见 https://www.cnblogs.com/hezemin/p/17272591.html
	@HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 31)
	@ContentStyle(horizontalAlignment = HorizontalAlignmentEnum.CENTER, fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND,
			fillForegroundColor = 31, borderRight = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN)
	@ContentFontStyle(fontHeightInPoints = 10) // 字体大小
	private BigDecimal qinZhouCurMonthComplete;

	/** 钦州市(累计完成指标) */
	@ExcelProperty(value = { "钦州市", "累计完成指标" }, index = 15)
	@HeadFontStyle(fontHeightInPoints = 10) // 字体大小
	@ColumnWidth(12)
	// HorizontalAlignmentEnum.CENTER 居中
	// FillPatternTypeEnum.SOLID_FOREGROUND : 充满
	// fillForegroundColor 见 https://www.cnblogs.com/hezemin/p/17272591.html
	@HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 31)
	@ContentStyle(horizontalAlignment = HorizontalAlignmentEnum.CENTER, fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND,
			fillForegroundColor = 31, borderRight = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN)
	@ContentFontStyle(fontHeightInPoints = 10) // 字体大小
	private BigDecimal qinZhouTotalComplete;

	/** 玉林市(当月完成指标) */
	@ExcelProperty(value = { "玉林市", "当月完成指标" }, index = 16)
	@HeadFontStyle(fontHeightInPoints = 10) // 字体大小
	@ColumnWidth(12)
	// HorizontalAlignmentEnum.CENTER 居中
	// FillPatternTypeEnum.SOLID_FOREGROUND : 充满
	// fillForegroundColor 见 https://www.cnblogs.com/hezemin/p/17272591.html
	@HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 31)
	@ContentStyle(horizontalAlignment = HorizontalAlignmentEnum.CENTER, fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND,
			fillForegroundColor = 31, borderRight = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN)
	@ContentFontStyle(fontHeightInPoints = 10) // 字体大小
	private BigDecimal yuLinCurMonthComplete;

	/** 玉林市(累计完成指标) */
	@ExcelProperty(value = { "玉林市", "累计完成指标" }, index = 17)
	@HeadFontStyle(fontHeightInPoints = 10) // 字体大小
	@ColumnWidth(12)
	// HorizontalAlignmentEnum.CENTER 居中
	// FillPatternTypeEnum.SOLID_FOREGROUND : 充满
	// fillForegroundColor 见 https://www.cnblogs.com/hezemin/p/17272591.html
	@HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 31)
	@ContentStyle(horizontalAlignment = HorizontalAlignmentEnum.CENTER, fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND,
			fillForegroundColor = 31, borderRight = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN)
	@ContentFontStyle(fontHeightInPoints = 10) // 字体大小
	private BigDecimal yuLinTotalComplete;
}

5. postman 测试

您好,可以使用 EasyExcel 中的 SheetWriteHandler 接口来实现导出最后一合并单元格的功能。具体步骤如下: 1. 创建一个实现了 SheetWriteHandler 接口的类,并重写其 afterSheetCreate 和 afterWrite 方法。 2. 在 afterSheetCreate 方法中获取最后一号,例如: ``` @Override public void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) { Sheet sheet = writeSheetHolder.getSheet(); int lastRowIndex = sheet.getLastRowNum(); // TODO: 处理最后一合并单元格 } ``` 3. 在 afterWrite 方法中判断当前写入的是否为最后一,如果是,则执合并单元格的操作,例如: ``` @Override public void afterWrite(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Integer integer, Integer integer1, Boolean aBoolean) { Sheet sheet = writeSheetHolder.getSheet(); int lastRowIndex = sheet.getLastRowNum(); if (integer == lastRowIndex) { // TODO: 处理最后一合并单元格 } } ``` 4. 在处理最后一合并单元格时,可以使用 Sheet 的 addMergedRegion 方法来实现,例如: ``` // 合并最后一的前三列 CellRangeAddress cellRangeAddress = new CellRangeAddress(lastRowIndex, lastRowIndex, 0, 2); sheet.addMergedRegion(cellRangeAddress); ``` 以上是大致的实现思路,具体的实现细节需要根据您的业务需求进调整。希望能对您有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值