springboot npoi 合并单元格 之后设置单元格居中

//设置style
ICellStyle cellstyle = workbook.CreateCellStyle();
cellstyle.VerticalAlignment = VerticalAlignment.Center;
cellstyle.Alignment = HorizontalAlignment.Center;

//合并操作

sheet.AddMergedRegion(new CellRangeAddress(index["firstRow"], index["lastRow"], index["firstCol"], index["lastCol"]));//起始行,结束行,起始列,结束列

//设置合并后style
var cell = sheet.GetRow(index["firstRow"]).GetCell(index["firstCol"]);
cell.CellStyle = cellstyle;
    @GetMapping("/a")
    public void a(HttpServletResponse response) {
        // 创建工作簿类
        XSSFWorkbook wb = new XSSFWorkbook();
        // 创建工作表并设置表名
        XSSFSheet sheet = wb.createSheet("订单");
        // 创建行,下标从0开始
        XSSFRow row = sheet.createRow(0);
        // 第四步,创建单元格,并设置值表头 设置表头居中
        XSSFCellStyle style = wb.createCellStyle();
        style.setAlignment(HorizontalAlignment.CENTER); // 创建一个居中格式
        //声明列对象
        XSSFCell cell = null;

        //标题
        String[] title = {"姓名", "年龄", "性别", "物品名称", "数量"};
        //创建标题
        for (int i = 0; i < title.length; i++) {
            cell = row.createCell(i);
            cell.setCellValue(title[i]);
            cell.setCellStyle(style);
        }

        //设置合并后居中显示样式
        XSSFCellStyle cellstyle = wb.createCellStyle();
        cellstyle.setVerticalAlignment(VerticalAlignment.CENTER);
        cellstyle.setAlignment(HorizontalAlignment.CENTER);

        int RowCount=1;
        List<order> orders = getOrders();
        for (int i = 0; i < orders.size(); i++) {
            row = sheet.createRow(RowCount);

            cell = row.createCell(0);
            cell.setCellValue(orders.get(i).name);
            cell.setCellStyle(style);

            cell = row.createCell(1);
            cell.setCellValue(orders.get(i).age);
            cell.setCellStyle(style);

            cell = row.createCell(2);
            cell.setCellValue(orders.get(i).sex);
            cell.setCellStyle(style);

            for(int j=0;j<orders.get(i).goods.size();j++) {
                if(j==0) {
                    cell = row.createCell(3);
                    cell.setCellValue(orders.get(i).goods.get(j).goodsName);
                    cell.setCellStyle(style);
                    cell = row.createCell(4);
                    cell.setCellValue(orders.get(i).goods.get(j).quantity);
                    cell.setCellStyle(style);
                    RowCount = RowCount + 1;
                }
                else{
                    row = sheet.createRow(RowCount);
                    cell = row.createCell(3);
                    cell.setCellValue(orders.get(i).goods.get(j).goodsName);
                    cell.setCellStyle(style);
                    cell = row.createCell(4);
                    cell.setCellValue(orders.get(i).goods.get(j).quantity);
                    cell.setCellStyle(style);
                    RowCount = RowCount + 1;
                }
            }

            //合并单元格
            if(orders.get(i).goods.size()>1) {
                for (int colnum = 0; colnum < 3; colnum++) {
                    //参数1:起始行 参数2:终止行 参数3:起始列 参数4:终止列
                    int firstRow = RowCount - orders.get(i).goods.size();
                    int lastRow = RowCount - 1;
                    sheet.addMergedRegion(new CellRangeAddress(firstRow, lastRow, colnum, colnum));
                    //设置样式
                    sheet.getRow(firstRow).getCell(colnum).setCellStyle(cellstyle);
                }
            }
        }
        //响应到客户端
        try {
            String fileName = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss").format(new Date()) + ".xlsx";
            this.setResponseHeader(response, fileName);
            OutputStream os = response.getOutputStream();
            wb.write(os);
            os.flush();
            os.close();
            wb.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     *
     * @return
     */
    private List<order> getOrders() {
        List<order> orderList = new ArrayList<order>();
        for (int i = 0; i < 10; i++) {
            order order = new order(String.valueOf(i), String.valueOf(i), String.valueOf(i));
            List<goods> goodsList = new ArrayList<goods>();
            if (i == 0 || i == 5 || i == 7) {
                goodsList.add(new goods("篮球", 1));
                goodsList.add(new goods("足球", 1));
                goodsList.add(new goods("运动鞋", 2));
                order.setGoods(goodsList);
            } else {
                goodsList.add(new goods("其它", i));
                order.setGoods(goodsList);
            }
            orderList.add(order);
        }
        return orderList;
    }

    //发送响应流方法
    public void setResponseHeader(HttpServletResponse response, String fileName) {
        try {
            try {
                fileName = new String(fileName.getBytes("iso8859-1"), "utf-8");
                System.out.println(fileName);
            } 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();
        }
    }
原文地址:https://www.cnblogs.com/xubao/p/14949057.html