poi导出excel动态表头并合并

December 17, 2023
测试
测试
测试
测试
65 分钟阅读

实现图,全场总电位第一级,其他 例行政部为第二层,若没有第三层的第二级如V线总电和污水处理站则合并两列,第三级 例生活区,此上数据为动态数据,根据不同用户不同数据动态变化表头

DEMO代码:

package com.springboot.util;

import java.io.OutputStream; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map;

import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;

import org.apache.poi.hssf.usermodel.HSSFBorderFormatting; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFCellStyle; import org.apache.poi.hssf.usermodel.HSSFFont; import org.apache.poi.hssf.usermodel.HSSFRichTextString; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.hssf.util.HSSFColor; import org.apache.poi.ss.util.CellRangeAddress; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody;

@Controller public class DynamicExport {

    @RequestMapping(value = "/export")     @ResponseBody     public void export(HttpServletRequest request, HttpServletResponse response) throws Exception {         // excel标题         String[] title = { "id", "姓名", "手机号", "城市", "县区", "房源", "地铁线", "地铁站", "售价", "面积", "房型", "用途", "权属", "楼层", "朝向",                 "楼龄", "有无电梯", "装修", "咨询时间", "备注" };         // excel文件名         String fileName = "购房需求信息表" + System.currentTimeMillis() + ".xls";         // sheet名         String sheetName = "购房需求信息表";

        String[][] content = {{ "id", "姓名", "手机号", "城市", "县区", "房源", "地铁线", "地铁站", "售价", "面积", "房型", "用途", "权属", "楼层", "朝向",             "楼龄", "有无电梯", "装修", "咨询时间", "备注" },{ "id", "姓名", "手机号", "城市", "县区", "房源", "地铁线", "地铁站", "售价", "面积", "房型", "用途", "权属", "楼层", "朝向",                 "楼龄", "有无电梯", "装修", "咨询时间", "备注" }};         // 创建HSSFWorkbook         HSSFWorkbook wb = getHSSFWorkbook(sheetName, title, content, null);         // 响应到客户端         try {             this.setResponseHeader(response, fileName);             OutputStream os = response.getOutputStream();             wb.write(os);             os.flush();             os.close();         } catch (Exception e) {             e.printStackTrace();         }     }

    //发送响应流方法     public void setResponseHeader(HttpServletResponse response, String fileName) {         try {             try {                 fileName = new String(fileName.getBytes(), "ISO8859-1");             } catch (UnsupportedEncodingException e) {                 // TODO Auto-generated catch block                 e.printStackTrace();             }             response.setContentType("application/octet-stream;charset=ISO8859-1");             response.setHeader("Content-Disposition", "attachment;filename=" + fileName);             response.addHeader("Pargam", "no-cache");             response.addHeader("Cache-Control", "no-cache");         } catch (Exception ex) {             ex.printStackTrace();         }     }

    public static HSSFWorkbook getHSSFWorkbook(String sheetName, String[] title, String[][] values, HSSFWorkbook wb) {

        // 第一步,创建一个HSSFWorkbook,对应一个Excel文件         if (wb == null) {             wb = new HSSFWorkbook();         }

        // 第二步,在workbook中添加一个sheet,对应Excel文件中的sheet         HSSFSheet sheet = wb.createSheet(sheetName);

        // 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制         HSSFRow row = sheet.createRow(0);

        // 第四步,创建单元格,并设置值表头 设置表头居中         HSSFCellStyle style = getColumnTopStyle(wb);         //垂直居中         style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);         style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 创建一个居中格式         // 声明列对象         HSSFCell cell = null;

        CellRangeAddress callRangeAddress = new CellRangeAddress(0,0,0,26);//起始行,结束行,起始列,结束列         sheet.addMergedRegion(callRangeAddress);         cell = row.createCell(0);         cell.setCellValue("2019年11月用电统计表");         cell.setCellStyle(style);

        List<Map<String,Object>> list = new ArrayList<>();         Map<String,Object> map = new HashMap<>();         map.put("id", "1");         map.put("pid", "0");         map.put("name", "全场总电");         list.add(map);         map = new HashMap<>();         map.put("id", "11");         map.put("pid", "1");         map.put("name", "二级");         list.add(map);         map = new HashMap<>();         map.put("id", "12");         map.put("pid", "1");         map.put("name", "二级2");         list.add(map);         map = new HashMap<>();         map.put("id", "13");         map.put("pid", "1");         map.put("name", "二级3");         list.add(map);         map = new HashMap<>();         map.put("id", "14");         map.put("pid", "1");         map.put("name", "二级4");         list.add(map);         map = new HashMap<>();         map.put("id", "131");         map.put("pid", "13");         map.put("name", "三级30");         list.add(map);         map = new HashMap<>();         map.put("id", "121");         map.put("pid", "12");         map.put("name", "三级20");         list.add(map);         map = new HashMap<>();         map.put("id", "122");         map.put("pid", "12");         map.put("name", "三级21");         list.add(map);         map = new HashMap<>();         map.put("id", "111");         map.put("pid", "11");         map.put("name", "三级0");         list.add(map);         map = new HashMap<>();         map.put("id", "112");         map.put("pid", "11");         map.put("name", "三级1");         list.add(map);         map = new HashMap<>();         map.put("id", "113");         map.put("pid", "11");         map.put("name", "三级2");         list.add(map);         map = new HashMap<>();         map.put("id", "114");         map.put("pid", "11");         map.put("name", "三级3");         list.add(map);         map = new HashMap<>();         map.put("id", "115");         map.put("pid", "11");         map.put("name", "三级4");         list.add(map);         HSSFCellStyle style2 = getStyle(wb);

        HSSFRow row2 = sheet.createRow(1);// row(1)第二行         HSSFRow row3 = sheet.createRow(2);// row(2)第三行         int s = 3;         int e = 4;         int s2 = 3;         int s3 = 2;         int i = 1;         int i2 = 1;         for (Map<String, Object> maps : list) {             if (maps.get("pid").equals("0")) {                 CellRangeAddress call = new CellRangeAddress(1,2,1,2);//起始行,结束行,起始列,结束列                 sheet.addMergedRegion(call);                 cell = row2.createCell(1);// cell(2)第二列                 cell.setCellValue(String.valueOf(maps.get("name")));                 cell.setCellStyle(style2);                 List<Map<String,Object>> list2 = treeResultData(list, String.valueOf(maps.get("id")));                 for (Map<String, Object> map2 : list2) {                     List<Map<String,Object>> list3 = treeResultData(list, String.valueOf(map2.get("id")));                     if (i2!=1) {                         s2=s3+1;                     }                     int cr = 1;                     if (list3.size()==0) {                         s3+=2;                         cr = 2;                     }else {                         s3+=list3.size()*2+1;                     }                     CellRangeAddress call2 = new CellRangeAddress(1,cr,s2,s3);//起始行,结束行,起始列,结束列                     sheet.addMergedRegion(call2);                     cell = row2.createCell(s);                     cell.setCellValue(String.valueOf(map2.get("name")));                     cell.setCellStyle(style2);                     i2++;                     for (Map<String, Object> map3 : list3) {                         CellRangeAddress call5 = new CellRangeAddress(2,2,s,e);//起始行,结束行,起始列,结束列                         sheet.addMergedRegion(call5);                         cell = row3.createCell(s);                         cell.setCellValue(String.valueOf(map3.get("name")));                         cell.setCellStyle(style2);                         if (i==list3.size()) {                             cell = row3.createCell(e+1);                             cell.setCellValue("实际用电");                             cell.setCellStyle(style2);                             s++;                             e++;                             i=0;                         }                         i++;                         s+=2;                         e+=2;                     }                 }             }         }         return wb;     }     public static List<Map<String,Object>> treeResultData(List<Map<String, Object>> list, String id){         List<Map<String, Object>> resultList = new ArrayList<>();         for (Map<String, Object> maps : list) {             if (maps.get("pid").equals(id)) {                 Map<String,Object> map = new HashMap<>();                 map.put("id", maps.get("id"));                 map.put("pid", maps.get("pid"));                 map.put("name", maps.get("name"));                 resultList.add(map);             }         }         return resultList;     }

    /*      * 列头单元格样式      */     public static HSSFCellStyle getColumnTopStyle(HSSFWorkbook workbook) {         // 设置字体         HSSFFont font = workbook.createFont();

        // 设置字体大小         font.setFontHeightInPoints((short) 15);         // 字体加粗         font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);         // 设置字体名字         font.setFontName("Courier New");         // 设置样式         HSSFCellStyle style = workbook.createCellStyle();         // 设置低边框         //style.setBorderBottom(HSSFCellStyle.BORDER_THIN);         // 设置低边框颜色         //style.setBottomBorderColor(HSSFColor.BLACK.index);         // 设置右边框         //style.setBorderRight(HSSFCellStyle.BORDER_THIN);         // 设置顶边框         //style.setTopBorderColor(HSSFColor.BLACK.index);         // 设置顶边框颜色         //style.setTopBorderColor(HSSFColor.BLACK.index);         // 在样式中应用设置的字体         style.setFont(font);         // 设置自动换行         style.setWrapText(false);         // 设置水平对齐的样式为居中对齐;         style.setAlignment(HSSFCellStyle.ALIGN_CENTER);         style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);         return style;

    }

    public static HSSFCellStyle getStyle(HSSFWorkbook workbook) {         // 设置字体         HSSFFont font = workbook.createFont();         // 设置字体大小         font.setFontHeightInPoints((short) 10);         // 字体加粗         font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);         // 设置字体名字         font.setFontName("Courier New");         // 设置样式;         HSSFCellStyle style = workbook.createCellStyle();         // 设置底边框;         //style.setBorderBottom(HSSFCellStyle.BORDER_THIN);         // 设置底边框颜色;         //style.setBottomBorderColor(HSSFColor.BLACK.index);         // 设置左边框;         //style.setBorderLeft(HSSFCellStyle.BORDER_THIN);         // 设置左边框颜色;         //style.setLeftBorderColor(HSSFColor.BLACK.index);         // 设置右边框;         //style.setBorderRight(HSSFCellStyle.BORDER_THIN);         // 设置右边框颜色;         //style.setRightBorderColor(HSSFColor.BLACK.index);         // 设置顶边框;         //style.setBorderTop(HSSFCellStyle.BORDER_THIN);         // 设置顶边框颜色;         //style.setTopBorderColor(HSSFColor.BLACK.index);         // 在样式用应用设置的字体;         style.setFont(font);         // 设置自动换行;         style.setWrapText(false);         // 设置水平对齐的样式为居中对齐;         style.setAlignment(HSSFCellStyle.ALIGN_CENTER);         // 设置垂直对齐的样式为居中对齐;         style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);         return style;     } }

实际应用的代码:

package com.sgcc.epri.platform.util;

import java.io.OutputStream; import java.io.UnsupportedEncodingException; import java.math.BigDecimal; import java.text.DecimalFormat; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map;

import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;

import org.apache.poi.hssf.usermodel.HSSFBorderFormatting; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFCellStyle; import org.apache.poi.hssf.usermodel.HSSFFont; import org.apache.poi.hssf.usermodel.HSSFRichTextString; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.hssf.util.HSSFColor; import org.apache.poi.ss.util.CellRangeAddress; import org.bouncycastle.pqc.math.linearalgebra.BigIntUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody;

import com.sgcc.epri.platform.mapper.ElectricityEvaluateMapper; import com.sgcc.epri.platform.model.responseModel.ResponseParam; import com.sgcc.epri.platform.service.TreeService;

@Controller public class DynamicExport {

    @Autowired     private TreeService treeService;     @Autowired     ElectricityEvaluateMapper electricityEvaluateMapper;     @RequestMapping(value = "/appSessionDemo")     @ResponseBody     public ResponseParam appSessionDemo(HttpServletRequest request, HttpServletResponse response) {         String sessionId = request.getSession().getId();         String sessionDemo = (String) request.getSession().getAttribute("demo");         System.err.println(sessionDemo);         String demo = request.getParameter("demo");         System.err.println(demo);         request.getSession().setAttribute("demo", demo);         ResponseParam r = new ResponseParam();         Map<String,Object> map = new HashMap<>();         map.put("returnData", sessionDemo);         map.put("sessionId", sessionId);         r.setResult(map);         return r;     }     @RequestMapping(value = "/export")     @ResponseBody     public void export(HttpServletRequest request, HttpServletResponse response) throws Exception {         String time = request.getParameter("time");         List<Map<String,Object>> treeData = treeService.getTreeData(UserUtil.getUserId(),"01");         // excel标题         String[] title = String.valueOf("1号,2号,3号,4号,5号,6号,7号,8号,9号,10号,11号,12号,13号,14号,15号,16号,17号,18号,19号,20号,21号,22号,23号,24号,25号,26号,27号,28号,29号,30号,31号,合计").split(",");         // excel文件名         String fileName = "用电详情报表" + System.currentTimeMillis() + ".xls";         // sheet名         String sheetName = "用电详情报表";

        String[][] content = {};         // 创建HSSFWorkbook         HSSFWorkbook wb = getHSSFWorkbook(sheetName, title, content, null, treeData, time);         // 响应到客户端         try {             this.setResponseHeader(response, fileName);             OutputStream os = response.getOutputStream();             wb.write(os);             os.flush();             os.close();         } catch (Exception e) {             e.printStackTrace();         }     }

    //发送响应流方法     public void setResponseHeader(HttpServletResponse response, String fileName) {         try {             try {                 fileName = new String(fileName.getBytes(), "ISO8859-1");             } catch (UnsupportedEncodingException e) {                 // TODO Auto-generated catch block                 e.printStackTrace();             }             response.setContentType("application/octet-stream;charset=ISO8859-1");             response.setHeader("Content-Disposition", "attachment;filename=" + fileName);             response.addHeader("Pargam", "no-cache");             response.addHeader("Cache-Control", "no-cache");         } catch (Exception ex) {             ex.printStackTrace();         }     }

    public HSSFWorkbook getHSSFWorkbook(String sheetName, String[] title, String[][] values, HSSFWorkbook wb, List<Map<String, Object>> treeData, String time) {

        // 第一步,创建一个HSSFWorkbook,对应一个Excel文件         if (wb == null) {             wb = new HSSFWorkbook();         }

        // 第二步,在workbook中添加一个sheet,对应Excel文件中的sheet         HSSFSheet sheet = wb.createSheet(sheetName);

        // 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制         HSSFRow row = sheet.createRow(0);

        // 第四步,创建单元格,并设置值表头 设置表头居中         HSSFCellStyle style = getColumnTopStyle(wb);         // 声明列对象         HSSFCell cell = null;

        // 合并首行为标题使用         CellRangeAddress callRangeAddress = new CellRangeAddress(0,0,0,30);//起始行,结束行,起始列,结束列         sheet.addMergedRegion(callRangeAddress);         cell = row.createCell(0);         cell.setCellValue(""+time+"用电统计表");         cell.setCellStyle(style);

        // 获取监测点数据列表         List<Map<String,Object>> list = treeData;         // 定义样式         HSSFCellStyle style2 = getStyle(wb);

        HSSFRow row2 = sheet.createRow(1);// row(1)第二行         HSSFRow row3 = sheet.createRow(2);// row(2)第三行         HSSFRow row4 = sheet.createRow(3);// row(3)第四行         List<Map<String,Object>> countList = new ArrayList<>();// 存储监测点id和对应详情的位置         int s = 3;         int e = 4;         int s2 = 3;         int s3 = 2;         int i = 1;         int i2 = 1;         // 便利监测点数据写入表头         for (Map<String, Object> maps : list) {             if (maps.get("parentSturctId").equals("0")) {// 判断为总表(0)                 // 合并总表位置并对合并位置赋值                 CellRangeAddress call = new CellRangeAddress(1,2,1,2);// 起始行,结束行,起始列,结束列                 sheet.addMergedRegion(call);                 cell = row2.createCell(1);// cell(2)第二列                 cell.setCellValue(String.valueOf(maps.get("unitName")));                 cell.setCellStyle(style2);                 Map<String,Object> countMap = new HashMap<>();                 countMap.put("msId", maps.get("msId"));                 countMap.put("shishuCell", 1);                 countMap.put("valueCell", 2);                 countList.add(countMap);                 // 赋值对应位置的明细列头                 cell = row4.createCell(0);                 cell.setCellValue("日期");                 cell.setCellStyle(style2);                 cell = row4.createCell(1);                 cell.setCellValue("示数");                 cell.setCellStyle(style2);                 cell = row4.createCell(2);                 cell.setCellValue("电量");                 cell.setCellStyle(style2);                 List<Map<String,Object>> list2 = treeResultData(list, String.valueOf(maps.get("structDetId")));// 获取总表下的监测点信息                 for (Map<String, Object> map2 : list2) {// 循环二级监测点信息                     List<Map<String,Object>> list3 = treeResultData(list, String.valueOf(map2.get("structDetId")));// 获取三级监测点信息                     if (i2!=1) {// 判断i2不等于1时则是已经循环过,新合并开始列需获取最后的列+1                         s2=s3+1;// 获取最后一列并+1作为河北开始列                     }                     int cr = 1;// cr默认为1                     if (list3.size()==0) {// 验证此2级节点无子级                         s3+=2;// 合并列为两列                         cr = 2;// 合并行为两行                         // 给第三级合并标识+2告诉新的开始结束位置                         s+=2;                         e+=2;                     }else {// 若有子级结束行则+=当前查询数据条数*2+1                         s3+=list3.size()*2+1;                     }                     if (cr==2) {// 验证无子级    赋值对应位置的明细列头                         countMap = new HashMap<>();                         countMap.put("msId", map2.get("msId"));                         countMap.put("shishuCell", s2);                         countMap.put("valueCell", s3);                         countList.add(countMap);                         cell = row4.createCell(s2);                         cell.setCellValue("示数");                         cell.setCellStyle(style2);                         cell = row4.createCell(s3);                         cell.setCellValue("电量");                         cell.setCellStyle(style2);                     }                     // 二级菜单合并赋值                     CellRangeAddress call2 = new CellRangeAddress(1,cr,s2,s3);//起始行,结束行,起始列,结束列                     sheet.addMergedRegion(call2);                     cell = row2.createCell(s2);                     cell.setCellValue(String.valueOf(map2.get("unitName")));                     cell.setCellStyle(style2);                     i2++;// 标识++,说明已开始占位,别占重复位置                     for (Map<String, Object> map3 : list3) {// 循环三级监测点数据                         countMap = new HashMap<>();                         countMap.put("msId", map3.get("msId"));                         countMap.put("shishuCell", s);                         countMap.put("valueCell", e);                         countList.add(countMap);                         // 赋值对应位置的明细列头                         cell = row4.createCell(s);                         cell.setCellValue("示数");                         cell.setCellStyle(style2);                         cell = row4.createCell(e);                         cell.setCellValue("电量");                         cell.setCellStyle(style2);                         // 三级菜单合并赋值                         CellRangeAddress call5 = new CellRangeAddress(2,2,s,e);//起始行,结束行,起始列,结束列                         sheet.addMergedRegion(call5);                         cell = row3.createCell(s);                         cell.setCellValue(String.valueOf(map3.get("unitName")));                         cell.setCellStyle(style2);                         // 验证循环是否是最后一次                         if (i==list3.size()) {// 循环最后一次   +实际用电和总电量的表头写入                             cell = row3.createCell(e+1);                             cell.setCellValue("实际用电");                             cell.setCellStyle(style2);                             cell = row4.createCell(e+1);                             cell.setCellValue("总电量");                             cell.setCellStyle(style2);                             countMap = new HashMap<>();                             countMap.put("msId", map2.get("msId"));                             countMap.put("sumValue", e+1);                             countList.add(countMap);                             s++;                             e++;                             i=0;                         }                         i++;                         s+=2;                         e+=2;                     }                 }             }         }         // 获取左侧日期数据         for (int j = 0; j < title.length; j++) {             HSSFRow forRow = sheet.createRow(4 + j);// row 赋数据时的行             rowSetDate(countList,forRow,cell,style2,j,time,title.length,treeData);             cell = forRow.createCell(0);// createCell赋数据的列             cell.setCellValue(title[j]);             cell.setCellStyle(style2);         }         return wb;     }     /**      * an:因为createRow会覆盖同行之前的数据,所以createRow只能用一次,调此方法传递HSSFRow写入值      * @param countList      * @param forRow      * @param cell      * @param style2      * @param j2       * @param time       * @param length       * @param treeData       * @return       */     public String rowSetDate(List<Map<String,Object>> countList, HSSFRow forRow, HSSFCell cell, HSSFCellStyle style2, int j2, String time, int length, List<Map<String, Object>> treeData) {         String result = "0";         String j = String.valueOf(j2+1);         List<Map<String,Object>> getList = getData(time,length,j2,treeData);         for (Map<String, Object> map : countList) {             for (Map<String, Object> map2 : getList) {                 if (map.get("msId").equals(map2.get("msId"))) {                     if (j.equals(String.valueOf(map2.get("time")))) {                         if (!"null".equals(String.valueOf(map.get("sumValue")))) {                             cell = forRow.createCell(Integer.valueOf(String.valueOf(map.get("sumValue"))));// createCell赋数据的列                             cell.setCellValue(String.valueOf(map2.get("price")));                             cell.setCellStyle(style2);                         }else {                             cell = forRow.createCell(Integer.valueOf(String.valueOf(map.get("shishuCell"))));// createCell赋数据的列                             cell.setCellValue(String.valueOf(map2.get("shishu")));                             cell.setCellStyle(style2);                             cell = forRow.createCell(Integer.valueOf(String.valueOf(map.get("valueCell"))));// createCell赋数据的列                             cell.setCellValue(String.valueOf(map2.get("price")));                             cell.setCellStyle(style2);                         }                     } //                    String sumValue = String.valueOf(map.get("sumValue")); //                    if (sumValue!=null&&!"".equals(sumValue)&&!"null".equals(sumValue)) { //                         cell = forRow.createCell(Integer.valueOf(String.valueOf(map.get("sumValue"))));// createCell赋数据的列 //                         cell.setCellValue(1); //                         cell.setCellStyle(style2); //                    }                 }             }         }         return result;     }     /**      * an:模拟数据      * @param time       * @param j2       * @param length       * @param treeData       * @return      */     public List<Map<String,Object>> getData(String time, int length, int j2, List<Map<String, Object>> treeData){         DecimalFormat dcf = new DecimalFormat("0.00");         List<Map<String,Object>> getList = electricityEvaluateMapper.queryTBMonthElecTricity(UserUtil.getUserId(), time+"-01", time+"-31");         List<Map<String,Object>> list = new ArrayList<>();         String msId = null;         double a = 0;         for (Map<String, Object> map : getList) {             Map<String,Object> setMap = new HashMap<>();             setMap.put("msId", map.get("MS_ID"));             setMap.put("shishu", map.get("SHISHU")==null?"-":map.get("SHISHU"));             setMap.put("price", map.get("ELECTRICITY")==null?"-":map.get("ELECTRICITY"));             setMap.put("time", Integer.valueOf(String.valueOf(map.get("DATA_DATE")).split("-")[2]));             list.add(setMap);             int i = 1;             for (Map<String, Object> map2 :treeData) {                 if (map2.get("msId").equals(map.get("MS_ID"))) {                     if (!String.valueOf(map.get("MS_ID")).equals(msId)) {                         a = 0;                     }                     msId = String.valueOf(map.get("MS_ID"));                     a += Double.parseDouble(String.valueOf(map.get("ELECTRICITY")==null?"0":map.get("ELECTRICITY")));                 }                 if (i==treeData.size()) {                     Map<String,Object> setMap2 = new HashMap<>();                     setMap2.put("msId", msId);                     setMap2.put("shishu", "");                     setMap2.put("price", dcf.format(a));                     setMap2.put("time", length);                     list.add(setMap2);                 }                 i++;             }         } //        List<Map<String,Object>> list = new ArrayList<>(); //        for (int i = 1; i <= 12; i++) { //            Map<String,Object> map = new HashMap<>(); //            map.put("time", i); //            map.put("price", "2"+i); //            map.put("shishu", "2"+i); //            map.put("msId", "1000010000232435"); //            list.add(map); //            map = new HashMap<>(); //            map.put("time", i); //            map.put("price", "3"+i); //            map.put("shishu", "3"+i); //            map.put("msId", "1000010000232447"); //            list.add(map); //        } //        Map<String,Object> map = new HashMap<>(); //        map.put("time", 13); //        map.put("price", "858"); //        map.put("shishu", ""); //        map.put("msId", "1000010000232435"); //        list.add(map); //        map = new HashMap<>(); //        map.put("time", 13); //        map.put("price", "1248"); //        map.put("shishu", ""); //        map.put("msId", "1000010000232447"); //        list.add(map);         return list;     }     /**      * an:根据id获得子级数据      * @param list      * @param id      * @return      */     public static List<Map<String,Object>> treeResultData(List<Map<String, Object>> list, String id){         List<Map<String, Object>> resultList = new ArrayList<>();         for (Map<String, Object> maps : list) {             if (maps.get("parentSturctId").equals(id)) {                 Map<String,Object> map = new HashMap<>();                 map.put("structDetId", maps.get("structDetId"));                 map.put("parentSturctId", maps.get("parentSturctId"));                 map.put("unitName", maps.get("unitName"));                 map.put("msId", maps.get("msId"));                 resultList.add(map);             }         }         return resultList;     }

    /*      * 列头单元格样式      */     public static HSSFCellStyle getColumnTopStyle(HSSFWorkbook workbook) {         // 设置字体         HSSFFont font = workbook.createFont();

        // 设置字体大小         font.setFontHeightInPoints((short) 15);         // 字体加粗         font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);         // 设置字体名字         font.setFontName("Courier New");         // 设置样式         HSSFCellStyle style = workbook.createCellStyle();         // 设置低边框         //style.setBorderBottom(HSSFCellStyle.BORDER_THIN);         // 设置低边框颜色         //style.setBottomBorderColor(HSSFColor.BLACK.index);         // 设置右边框         //style.setBorderRight(HSSFCellStyle.BORDER_THIN);         // 设置顶边框         //style.setTopBorderColor(HSSFColor.BLACK.index);         // 设置顶边框颜色         //style.setTopBorderColor(HSSFColor.BLACK.index);         // 在样式中应用设置的字体         style.setFont(font);         // 设置自动换行         style.setWrapText(false);         // 设置水平对齐的样式为居中对齐;         style.setAlignment(HSSFCellStyle.ALIGN_CENTER);         style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);         return style;

    }

    public static HSSFCellStyle getStyle(HSSFWorkbook workbook) {         // 设置字体         HSSFFont font = workbook.createFont();         // 设置字体大小         font.setFontHeightInPoints((short) 10);         // 字体加粗         font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);         // 设置字体名字         font.setFontName("Courier New");         // 设置样式;         HSSFCellStyle style = workbook.createCellStyle();         // 设置底边框;         //style.setBorderBottom(HSSFCellStyle.BORDER_THIN);         // 设置底边框颜色;         //style.setBottomBorderColor(HSSFColor.BLACK.index);         // 设置左边框;         //style.setBorderLeft(HSSFCellStyle.BORDER_THIN);         // 设置左边框颜色;         //style.setLeftBorderColor(HSSFColor.BLACK.index);         // 设置右边框;         //style.setBorderRight(HSSFCellStyle.BORDER_THIN);         // 设置右边框颜色;         //style.setRightBorderColor(HSSFColor.BLACK.index);         // 设置顶边框;         //style.setBorderTop(HSSFCellStyle.BORDER_THIN);         // 设置顶边框颜色;         //style.setTopBorderColor(HSSFColor.BLACK.index);         // 在样式用应用设置的字体;         style.setFont(font);         // 设置自动换行;         style.setWrapText(false);         // 设置水平对齐的样式为居中对齐;         style.setAlignment(HSSFCellStyle.ALIGN_CENTER);         // 设置垂直对齐的样式为居中对齐;         style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);         return style;     } }

继续阅读

更多来自我们博客的帖子

如何安装 BuddyPress
由 测试 December 17, 2023
经过差不多一年的开发,BuddyPress 这个基于 WordPress Mu 的 SNS 插件正式版终于发布了。BuddyPress...
阅读更多
Filter如何工作
由 测试 December 17, 2023
在 web.xml...
阅读更多
如何理解CGAffineTransform
由 测试 December 17, 2023
CGAffineTransform A structure for holding an affine transformation matrix. ...
阅读更多