java导出复杂excel

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;
    }
}


  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值