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组";@Autowiredprivate ExportExcelForZTService exportExcelForZTService;@Autowiredprivate ExportExcelForGSService exportExcelForGSService;@Autowiredprivate 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;//OTCcase 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 {@Overridepublic 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;}
}

java导出复杂excel相关推荐

  1. java导出 elsx 文件,如何获取java导出的excel文件,发送请求导出excle文件

    如何获取java导出的excel文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 request.setCharacterEncoding("utf-8"); ...

  2. java导出为excel文件_java导出数据到excel文件

    有的时候,将一些有用的数据导出到excel是很有必要的.比如说,我现在在做一个学校的在线教学平台,有一个需求是:将学生成绩导出到excel文件中去. 那怎样实现用java导出数据到excel文件呢?? ...

  3. Java导出超大Excel文件,防止内存溢出

    将业务数据导出到Excel表中,导出任务数据量较大时,导出的项目就会内存溢出,本文通过Java操作Poi的SXSSFWorkbook类进行导出,解决内存溢出问题. 1.采用Poi中的SXSSFWork ...

  4. java 导出个性 excel 表格

    Java 导出复杂格式 excel java 导出普通格式 excel 新思路创键模板,设置固定样式,替换值 采用模板形式,替换值 代码 衍生导出复杂表头,动态表体excel java 导出普通格式 ...

  5. java导出csv/excel工具类

    导出excel的方法一般来说有两种,一种是根据反射.通过反射来得到想要的数据,定义excel的表头,得到数据内容.但在很多业务场景中,excel想要展示的数据不单单是某一个类,而是根据业务需要,可能是 ...

  6. java导出的excel数字过长_用POI导出excel时,较长的数字不想被自动变为科学计数法的解决方式(转)...

    做过很多次导出excel了.都碰到一个问题,内容里如果包含一个比较长的数字,比如订单号"2546541656596",excel会自动变成科学计数法... 弄过好几次都没有解决,最 ...

  7. java 导出复杂Excel

    本文来自:http://blog.csdn.net/zhanwentao2/article/details/7298341 生成Excel的时候,大多时候都是使用poi,jxl等进行的,但是对于复杂的 ...

  8. java导出复杂excel表格_java使用freemarker导出复杂的excel表格

    正常导出excel表格使用的poi,但是导出复杂的excel有点困难,但是可以使用freemaker模板来导出复杂的excel. 都是先生成一个Excel表格的模板,最好是增加一行数据.具体看图里面的 ...

  9. java导出动态excel表单----表头和内容都为动态

    数据表 CREATE TABLE `f_form` (`id` bigint(32) NOT NULL AUTO_INCREMENT COMMENT '主键',`org_id` bigint(32) ...

最新文章

  1. 采购订单审批/取消审批程序(BAPI_PO_RESET_RELEASE、BAPI_PO_RELEASE)
  2. android r.java 原理,深入理解Android消息处理系统原理
  3. input标签的值只能两位小数_Day51 HTML表格表单标签、flask框架
  4. uva 1623——Enter The Dragon
  5. spring中使用scala的maven打包配置
  6. 本地事务和分布式事务区别
  7. gstreamer向appsrc发送帧画面的代码
  8. IDEA------自动导包快捷键
  9. 客户说发货慢怎么回复_物流走件慢回复话术
  10. python 计算gdp_使用Numpy计算Python-Gini系数
  11. Spring进阶(六):can not find proxy: set exposeproxy property on advised to make it available
  12. 使用 JDB 调试 Android 应用程序
  13. Python挑战游戏( PythonChallenge)闯关之路Level- 3
  14. 上海中兴软件测试面试,中兴综合测评没做完
  15. Tagged Pointer遐想
  16. HLG 1916 小Z的卡片 (set 难题)恏似系亚洲区噶题
  17. 为什么说学计算机更有远见,“孩子,我为什么逼你读书”:有远见的父母,都有点心狠...
  18. 鼎信诺服务器取数不显示账套,鼎信诺审计前端取数.doc
  19. 记一次oom_kill的排查
  20. AI大行其道,你准备好了吗?—谨送给徘徊于转行AI的程序员

热门文章

  1. wpf html5 流畅性,iPad浏览器HTML5性能测试
  2. 文件服务器挂载命令,使用mount命令进行目录挂载
  3. 基于Transformer的多变量风电功率预测TF2
  4. Android 动画和过渡
  5. ThinkPHP3.2.3-文章管理系统-附带源码地址
  6. 核电站问题转载自saltless原创
  7. unity3d webplayer打开新窗口
  8. 存款利率下降如何应对
  9. 云盒子企业私有云对局域网共享软件的代替
  10. 自己架设的传奇怎么设置GM号和使用方法