Java 导出复杂excel,多表格中有合并以及描述
实体类
package com.hs.report.entity.week;
import lombok.Builder;
import lombok.Data;
import java.io.Serializable;
@Data
@Builder
public class SnapshotReq<T> implements Serializable {
private static final long serialVersionUID = 4403232919132430023L;
private String type;
private Integer offset;
/**
*json字符串
**/
private T content;
private Integer subNo;
private Integer periodId;
private String flowId;
}
Controller层
package com.hs.report.controller.week;
import com.hs.report.controller.BaseController;
import com.hs.report.entity.week.SnapshotReq;
import com.hs.report.enums.DeptType;
import com.hs.report.service.week.ExportExcelForGSService;
import com.hs.report.service.week.ExportExcelForOTCService;
import com.hs.report.service.week.ExportExcelForZTService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.List;
@Api(tags = "导出Excel模板")
@RestController
@RequestMapping("/investmentReport/week")
public class ExportWeekExcelController extends BaseController {
private static String fileName = "交易类业务周报%s组";
@Autowired
private ExportExcelForZTService exportExcelForZTService;
@Autowired
private ExportExcelForGSService exportExcelForGSService;
@Autowired
private ExportExcelForOTCService exportExcelForOTCService;
@ApiOperation(value = "导出")
@PostMapping("/export")
public byte[] export(@RequestBody List<SnapshotReq> snapshots, HttpServletResponse response) throws IOException {
if(CollectionUtils.isEmpty(snapshots)){
return null;
}
SnapshotReq snapshotDO = snapshots.get(0);
Integer periodId = getFlowPeriodId(snapshotDO.getFlowId());
if(StringUtils.isNotEmpty(snapshotDO.getType())) {
HSSFWorkbook wb = new HSSFWorkbook();
switch (Integer.valueOf(snapshotDO.getType())) {
//证投
case 1:
exportExcelForZTService.exportExcelForZT(wb, snapshots);
break;
//固收
case 2:
exportExcelForGSService.exportExcelForGS(wb,snapshots);
break;
//OTC
case 3:
exportExcelForOTCService.exportExcelForOTC(wb,snapshots);
break;
}
try {
String exportFileName = String.format(fileName, DeptType.getByType(Integer.valueOf(snapshotDO.getType()))) + periodId;
exportFileName = URLEncoder.encode(exportFileName, "UTF-8");
response.setHeader("Content-Disposition", "attachment;Filename=" + exportFileName + ".xls");
OutputStream outputStream = response.getOutputStream();
wb.write(outputStream);
outputStream.close();
return wb.getBytes();
} catch (Exception ex) {
throw new IOException("导出Excel出现异常,异常信息:" + ex.getMessage());
}
}
return null;
}
}
Service层
package com.hs.report.service.impl.week;
import com.hs.report.entity.week.BusinessTypeDO;
import com.hs.report.entity.week.LossPayfDO;
import com.hs.report.entity.week.SnapshotReq;
import com.hs.report.entity.week.WeekLossPayfDO;
import com.hs.report.enums.DeptType;
import com.hs.report.service.week.ExportExcelForGSService;
import com.hs.report.utils.JsonListUtil;
import com.hs.report.utils.NumberUtil;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.ss.util.RegionUtil;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
@Service
public class ExportExcelForGSServiceImpl implements ExportExcelForGSService {
@Override
public void exportExcelForGS(HSSFWorkbook wb, List<SnapshotReq> snapshots) {
//定义报表数据中的行数
int rownum = 0;
int columnNumber = 7;
int[] columnWidth = {14,14,14,14,14,14,14,14};
HSSFSheet sheet = wb.createSheet(DeptType.GS.getName());
sheet.setDisplayGridlines(false);
for(int i = 0; i < columnNumber; i++){
sheet.setColumnWidth(i,columnWidth[i] * 256); // 单独设置每列的宽
}
//本周重点推进工作 描述
String weekDesc = "";
//下周重点推进工作 描述
String lastWeekDesc = "";
//T0周损益对比 描述
String weekLossDesc = "";
List<WeekLossPayfDO> weekList = new ArrayList<>();
//市场状况及交易部门损益 描述
String marketDesc = "";
List<LossPayfDO> lossPayList = new ArrayList<>();
//固定收益部损益分析 描述
String fixedDesc = "";
//表格第三部分
List<BusinessTypeDO> businessList = new ArrayList<>();
//日常工作部 描述
String dailyDesc = "";
for(SnapshotReq snapshotReq : snapshots){
switch (snapshotReq.getOffset()) {
case 1:
weekDesc = getContentStr((String)snapshotReq.getContent());
break;
case 2:
lastWeekDesc = getContentStr((String)snapshotReq.getContent());
break;
case 3:
weekLossDesc = getContentStr((String)snapshotReq.getContent());
break;
case 4:
if(CollectionUtils.isNotEmpty((List<WeekLossPayfDO>)snapshotReq.getContent())){
String json = JsonListUtil.listToJson((List<WeekLossPayfDO>)snapshotReq.getContent());
weekList = JsonListUtil.jsonToList(json, WeekLossPayfDO.class);
}
break;
case 5:
marketDesc = getContentStr((String)snapshotReq.getContent());
break;
case 7:
if(CollectionUtils.isNotEmpty((List<LossPayfDO>)snapshotReq.getContent())){
String json = JsonListUtil.listToJson((List<LossPayfDO>)snapshotReq.getContent());
lossPayList = JsonListUtil.jsonToList(json, LossPayfDO.class);
}
break;
case 10:
fixedDesc = getContentStr((String)snapshotReq.getContent());
break;
case 11:
if(CollectionUtils.isNotEmpty((List<BusinessTypeDO>)snapshotReq.getContent())){
String json = JsonListUtil.listToJson((List<BusinessTypeDO>)snapshotReq.getContent());
businessList = JsonListUtil.jsonToList(json, BusinessTypeDO.class);
}
break;
case 12:
dailyDesc = getContentStr((String)snapshotReq.getContent());
break;
}
}
//本周重点推进工作:
int weekRowNum = getTextDesc(rownum,wb,sheet,columnNumber,weekDesc,"● 本周重点推进工作:");
//下周重点关注工作
int lastWeekRowNum = getTextDesc(weekRowNum,wb,sheet,columnNumber,lastWeekDesc,"● 下周重点关注工作:");
//T0周损益对比
int weekLossRowNum = getTextDesc(lastWeekRowNum,wb,sheet,columnNumber,weekLossDesc,"● T0周损益对比:");
//第一个表格内容
int oneTitleText = getOneTitleText(weekLossRowNum,wb,sheet,columnNumber,weekList);
//市场状况及交易部门损益
int marketRowNum = getTextDesc(oneTitleText,wb,sheet,columnNumber,marketDesc,"一、市场状况及交易部门损益");
//第二个表格内容
int twoTitleText = getTwoTitleText(marketRowNum,wb,sheet,columnNumber,lossPayList);
//部门损益分析
rownum = twoTitleText + 1;
HSSFCellStyle styleWeek = createTableDescStyleNo(wb);
styleWeek.setWrapText(true);
HSSFRow rowWeek = sheet.createRow(rownum);
HSSFCell cellWeek = rowWeek.createCell(0);
sheet.addMergedRegion(new CellRangeAddress(rownum,rownum,0,columnNumber));
cellWeek.setCellValue("二、部门损益分析");
cellWeek.setCellStyle(styleWeek);
//固定收益部损益分析
int fixedRowNum = getTextDesc(rownum,wb,sheet,columnNumber,fixedDesc,"2.固定收益部损益分析");
//第三个表格内容
int threeTitleText = getThreeTitleText(fixedRowNum,wb,sheet,columnNumber - 2,businessList);
//三、日常工作
rownum = threeTitleText + 1;
HSSFCellStyle styleDaily = createTableDescStyleNo(wb);
styleDaily.setWrapText(true);
HSSFRow rowDaily = sheet.createRow(rownum);
HSSFCell cellDaily = rowDaily.createCell(0);
sheet.addMergedRegion(new CellRangeAddress(rownum,rownum,0,columnNumber));
cellDaily.setCellValue("三、日常工作");
cellDaily.setCellStyle(styleDaily);
//固定收益部
int dailyRowNum = getTextDesc(rownum,wb,sheet,columnNumber,dailyDesc,"固定收益部");
}
private int getThreeTitleText(int rownum, HSSFWorkbook wb, HSSFSheet sheet, int columnNumber, List<BusinessTypeDO> businessList) {
if(CollectionUtils.isNotEmpty(businessList)){
int oneRightText = getThousandDesc(rownum,wb,sheet,columnNumber);
String perPurpose = "";//上一个数据描述
String purpose = "";//当前数据描述
boolean flag = true;//用来记录是否是第一次循环
int endMergeCol = 0;//要融合的最后行
//创建单元格,并设置值
rownum = oneRightText + 1;
for(int i = 0; i < businessList.size(); i++) {
BusinessTypeDO voData = businessList.get(i);
HSSFRow rowChangeTitle = sheet.createRow(i + rownum);
HSSFCell datacell = null;
for (int j = 0; j < columnNumber; j++) {
if(j % 2 == 0){
HSSFCellStyle tableCellStyle;
if(j == 2){
tableCellStyle = createBGTableCellStyleLeft(wb);
} else if(j == 4){
tableCellStyle = createBGTableCellStyleNo(wb);
}else{
tableCellStyle = createBGTableCellStyle(wb);
}
if(j == 0){
datacell = rowChangeTitle.createCell(j);
datacell.setCellStyle(tableCellStyle);
setValue(datacell,getBusinessTypeValue(voData, j));
purpose = voData.getTitle();
if(flag){//如果是第一次循环,将perPurpose初始化,以便后面的第一次判断
perPurpose = purpose;
flag = false;
}
if(purpose.equals(perPurpose)){
endMergeCol++;
}else{//两者不相同时,融合之前相同的行
int lastRow = i + rownum;
if(endMergeCol != 0){
lastRow = i + rownum - 1;
}
CellRangeAddress region = new CellRangeAddress(i + rownum - endMergeCol,lastRow,j,j + 1);
sheet.addMergedRegion(region);
setBorderStyle(HSSFCellStyle.BORDER_THIN, region, sheet, wb); //给合并过的单元格加边框
endMergeCol = 1;
perPurpose = purpose;
}
//最后一行时
if(i == businessList.size() - 1 && endMergeCol > 0){
int lastRow = businessList.size() + rownum;
if(endMergeCol != 0){
lastRow = businessList.size() + rownum - 1;
}
CellRangeAddress region = new CellRangeAddress(businessList.size() + rownum - endMergeCol,lastRow,j,j + 1);
sheet.addMergedRegion(region);
setBorderStyle(HSSFCellStyle.BORDER_THIN, region, sheet, wb); //给合并过的单元格加边框
endMergeCol = 0;
perPurpose = purpose;
}
}else{
datacell = rowChangeTitle.createCell(j);
datacell.setCellStyle(tableCellStyle);
setValue(datacell,getBusinessTypeValue(voData, j));
CellRangeAddress region = new CellRangeAddress(i + rownum,i + rownum,j,j + 1);
sheet.addMergedRegion(region);
setBorderStyle(HSSFCellStyle.BORDER_THIN, region, sheet, wb); //给合并过的单元格加边框
}
}
}
}
return rownum + businessList.size();
}
return rownum;
}
private String getBusinessTypeValue(BusinessTypeDO voData, int cellIndex) {
switch(cellIndex){
case 0:
return getContentStr(voData.getTitle());
case 2:
return getContentStr(voData.getSubtitle());
case 4:
return getContentStr(voData.getValue());
default:
return "";
}
}
private int getTwoTitleText(int rownum, HSSFWorkbook wb, HSSFSheet sheet, int columnNumber, List<LossPayfDO> lossPayList) {
int oneRightText = getThousandDesc(rownum,wb,sheet,columnNumber);
rownum = oneRightText + 1;
// 创建表头单元格样式 以及表头的字体样式
HSSFCellStyle changeTitleStyle = createTableTitleStyle(wb);
HSSFRow rowChangeTitle = sheet.createRow(rownum);
String[] riskTitle = {"部门", "权益敞口", "固收敞口", "现货市值","期货敞口","周损益","月损益","年损益"};
for (int i = 0; i <= columnNumber; i++) {
HSSFCell cellRiskTitle = rowChangeTitle.createCell(i);
cellRiskTitle.setCellValue(riskTitle[i]);
cellRiskTitle.setCellStyle(changeTitleStyle);
}
//创建单元格,并设置值
rownum = rownum + 1;
if(CollectionUtils.isNotEmpty(lossPayList)){
for(int i = 0; i < lossPayList.size(); i++){
LossPayfDO lossPayfDO = lossPayList.get(i);
rowChangeTitle = sheet.createRow(i + rownum);
HSSFCell datacell = null;
for (int j = 0; j <= columnNumber; j++) {
HSSFCellStyle tableCellStyle = createBGTableCellStyleNo(wb);
datacell = rowChangeTitle.createCell(j);
datacell.setCellStyle(tableCellStyle);
setValue(datacell,getRiskCellValue(lossPayfDO, j));
}
}
rownum = rownum + lossPayList.size();
}else{
rownum = rownum + 1;
}
return rownum;
}
private String getRiskCellValue(LossPayfDO lossPayfDO, int cellIndex) {
switch(cellIndex){
case 0:
return getContentStr(lossPayfDO.getDepName());
case 1:
return getDobleToString(lossPayfDO.getRiskExpo());
case 2:
return getDobleToString(lossPayfDO.getGsck());
case 3:
return getDobleToString(lossPayfDO.getActlMval());
case 4:
return getDobleToString(lossPayfDO.getFutrNetPos());
case 5:
return getDobleToString(lossPayfDO.getWeekLossPayf());
case 6:
return getDobleToString(lossPayfDO.getMthLossPayf());
case 7:
return getDobleToString(lossPayfDO.getYearLossPayf());
default:
return "";
}
}
private String getDobleToString(double riskExpo) {
return riskExpo == 0.0 ? "" : Double.toString(riskExpo);
}
private int getOneTitleText(int rownum, HSSFWorkbook wb, HSSFSheet sheet, int columnNumber,List<WeekLossPayfDO> weekList) {
int oneRightText = getThousandDesc(rownum,wb,sheet,columnNumber);
rownum = oneRightText + 1;
// 创建表头单元格样式 以及表头的字体样式
HSSFCellStyle changeTitleStyle = createTableTitleStyle(wb);
HSSFRow rowChangeTitle = sheet.createRow(rownum);
String[] riskTitle = {"部门", "本周损益", "上周损益", "年平均周损益"};
for (int i = 0; i < columnNumber; i++) {
if(i % 2 == 0){
HSSFCell cellChangeTitle = rowChangeTitle.createCell(i);
cellChangeTitle.setCellValue(riskTitle[i / 2]);
cellChangeTitle.setCellStyle(changeTitleStyle);
CellRangeAddress region = new CellRangeAddress(rownum,rownum,i,i + 1);
sheet.addMergedRegion(region);
setBorderStyle(HSSFCellStyle.BORDER_THIN, region, sheet, wb); //给合并过的单元格加边框
}
}
//创建单元格,并设置值
rownum = rownum + 1;
if(CollectionUtils.isNotEmpty(weekList)){
for(int i = 0; i < weekList.size(); i++){
WeekLossPayfDO weekLossPayfDO = weekList.get(i);
rowChangeTitle = sheet.createRow(i + rownum);
HSSFCell datacell = null;
for (int j = 0; j < columnNumber; j++) {
if(j % 2 == 0){
HSSFCellStyle tableCellStyle = createBGTableCellStyleNo(wb);
datacell = rowChangeTitle.createCell(j);
datacell.setCellStyle(tableCellStyle);
setValue(datacell,getChangeCellValue(weekLossPayfDO, j));
CellRangeAddress region = new CellRangeAddress(i + rownum,i + rownum,j,j + 1);
sheet.addMergedRegion(region);
setBorderStyle(HSSFCellStyle.BORDER_THIN, region, sheet, wb); //给合并过的单元格加边框
}
}
}
rownum = rownum + weekList.size();
}else{
rownum = rownum + 1;
}
return rownum;
}
private void setValue(HSSFCell cell, String value){
if (NumberUtil.isNumeric(value)) {
cell.setCellValue(Double.valueOf(value));
} else {
cell.setCellValue(value);
}
}
private String getChangeCellValue(WeekLossPayfDO weekLossPayfDO, int cellIndex) {
switch(cellIndex){
case 0:
return getContentStr(weekLossPayfDO.getDeptName());
case 2:
return weekLossPayfDO.getWeekLoss() == null ? "" : weekLossPayfDO.getWeekLoss().toString();
case 4:
return weekLossPayfDO.getLastWeekLoss() == null ? "" : weekLossPayfDO.getLastWeekLoss().toString();
case 6:
return weekLossPayfDO.getYearLoss() == null ? "" : weekLossPayfDO.getYearLoss().toString();
default:
return "";
}
}
//创建单元格样式 以及字体样式
private HSSFCellStyle createBGTableCellStyleLeft(HSSFWorkbook wb){
HSSFCellStyle style = wb.createCellStyle();
style.setAlignment(HSSFCellStyle.ALIGN_LEFT);
style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
style.setBottomBorderColor(HSSFColor.BLACK.index);
style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
style.setBorderRight(HSSFCellStyle.BORDER_THIN);
style.setBorderTop(HSSFCellStyle.BORDER_THIN);
style.setWrapText(true); //设置自动换行
HSSFFont titleFont = (HSSFFont) wb.createFont();
titleFont.setFontName("宋体");
titleFont.setFontHeightInPoints((short) 9);
style.setFont(titleFont);
return style;
}
//创建单元格样式 以及字体样式
private HSSFCellStyle createBGTableCellStyleNo(HSSFWorkbook wb){
HSSFCellStyle style = wb.createCellStyle();
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
style.setBottomBorderColor(HSSFColor.BLACK.index);
style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
style.setBorderRight(HSSFCellStyle.BORDER_THIN);
style.setBorderTop(HSSFCellStyle.BORDER_THIN);
style.setWrapText(true); //设置自动换行
HSSFDataFormat format= wb.createDataFormat();
style.setDataFormat(format.getFormat("#,##0.00"));
HSSFFont titleFont = (HSSFFont) wb.createFont();
titleFont.setFontName("宋体");
titleFont.setFontHeightInPoints((short) 9);
style.setFont(titleFont);
return style;
}
//创建单元格样式 以及字体样式
private HSSFCellStyle createBGTableCellStyle(HSSFWorkbook wb){
HSSFCellStyle style = wb.createCellStyle();
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
style.setBottomBorderColor(HSSFColor.BLACK.index);
style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
style.setBorderRight(HSSFCellStyle.BORDER_THIN);
style.setBorderTop(HSSFCellStyle.BORDER_THIN);
style.setWrapText(true); //设置自动换行
HSSFDataFormat format= wb.createDataFormat();
style.setDataFormat(format.getFormat("#,##0.00"));
HSSFFont titleFont = (HSSFFont) wb.createFont();
titleFont.setFontName("宋体");
titleFont.setFontHeightInPoints((short) 9);
style.setFont(titleFont);
return style;
}
public void setBorderStyle(int border, CellRangeAddress region, HSSFSheet sheet, HSSFWorkbook wb){
RegionUtil.setBorderBottom(border, region, sheet, wb); //下边框
RegionUtil.setBorderLeft(border, region, sheet, wb); //左边框
RegionUtil.setBorderRight(border, region, sheet, wb); //右边框
RegionUtil.setBorderTop(border, region, sheet, wb); //上边框
}
//创建表头单元格样式 以及表头的字体样式
private HSSFCellStyle createTableTitleStyle(HSSFWorkbook wb){
HSSFCellStyle style = wb.createCellStyle();
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
style.setFillForegroundColor(HSSFColor.SEA_GREEN.index);//添加背景色
style.setBottomBorderColor(HSSFColor.BLACK.index);
style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
style.setBorderRight(HSSFCellStyle.BORDER_THIN);
style.setBorderTop(HSSFCellStyle.BORDER_THIN);
HSSFFont titleFont = (HSSFFont) wb.createFont();
titleFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
titleFont.setFontName("宋体");
titleFont.setFontHeightInPoints((short) 9);
style.setFont(titleFont);
return style;
}
private int getThousandDesc(int rownum, HSSFWorkbook wb, HSSFSheet sheet, int columnNumber){
rownum = rownum + 1;
HSSFCellStyle styleWeek = createTableDescStyleRight(wb);
styleWeek.setWrapText(true);
HSSFRow rowWeek = sheet.createRow(rownum);
HSSFCell cellWeek = rowWeek.createCell(0);
sheet.addMergedRegion(new CellRangeAddress(rownum,rownum,0,columnNumber));
cellWeek.setCellValue("(万元)");
cellWeek.setCellStyle(styleWeek);
return rownum;
}
//设置字体靠右
private HSSFCellStyle createTableDescStyleRight(HSSFWorkbook wb) {
HSSFCellStyle style = wb.createCellStyle();
style.setAlignment(HSSFCellStyle.ALIGN_RIGHT);
HSSFFont titleFont = (HSSFFont) wb.createFont();
titleFont.setFontName("宋体");
titleFont.setFontHeightInPoints((short) 11);
style.setFont(titleFont);
return style;
}
private String getContentStr(String content) {
return StringUtils.isNotEmpty(content) ? content : StringUtils.EMPTY;
}
private int getTextDesc(int rownum, HSSFWorkbook wb, HSSFSheet sheet, int columnNumber, String desc, String titleDesc) {
rownum = rownum + 1;
HSSFCellStyle styleWeek = createTableDescStyleNo(wb);
styleWeek.setWrapText(true);
HSSFRow rowWeek = sheet.createRow(rownum);
HSSFCell cellWeek = rowWeek.createCell(0);
sheet.addMergedRegion(new CellRangeAddress(rownum,rownum,0,columnNumber));
cellWeek.setCellValue(titleDesc);
cellWeek.setCellStyle(styleWeek);
rownum = rownum + 1;
HSSFRow row = sheet.createRow(rownum);
row.setHeightInPoints(110);
HSSFCell cell = row.createCell(0);
HSSFCellStyle style = wb.createCellStyle();
style.setWrapText(true);
style.setVerticalAlignment(HSSFCellStyle.VERTICAL_TOP);
style.setAlignment(HSSFCellStyle.ALIGN_LEFT);
cell.setCellStyle(style);
cell.setCellValue(desc + "\n");
CellRangeAddress region = new CellRangeAddress(rownum,rownum,0,columnNumber);
sheet.addMergedRegion(region);
setBorderStyle(HSSFCellStyle.BORDER_THIN, region, sheet, wb); //给合并过的单元格加边框
return rownum + 1;
}
//设置字体不加粗
private HSSFCellStyle createTableDescStyleNo(HSSFWorkbook wb) {
HSSFCellStyle style = wb.createCellStyle();
HSSFFont titleFont = (HSSFFont) wb.createFont();
titleFont.setFontName("宋体");
titleFont.setFontHeightInPoints((short) 11);
style.setFont(titleFont);
return style;
}
}