HSSFWorkbook创建和导出excel

关键词:HSSFWorkbook,excel,导出

PS:昨天碰到一个改造练成文档样式的需求,修改了几个地方开发就完成了,但是觉得HSSFWorkbook还挺好玩,今天下午闲来无事,找点乐子写一个简单的Excel中。

预期效果想要一个如下图所示excel:
HSSFWorkbook创建和导出excel_第1张图片

主要就是做的几个部分就是

  • 使用HSSFWorkBook写excel格式
  • 合并单元格
  • 样式居中
  • 导出Excel中
public static HSSFWorkbook exprotExcel(List arrayList) {

        HSSFWorkbook workbook = new HSSFWorkbook();
        HSSFSheet sheet = workbook.createSheet("东西詹数据对比");
        HSSFCellStyle cellStyle = workbook.createCellStyle();
        HSSFFont font = workbook.createFont();
        cellStyle.setAlignment(CellStyle.ALIGN_CENTER);// 左右居中
        cellStyle.setVerticalAlignment(CellStyle.VERTICAL_CENTER);// 上下居中
//        建立表头
        HSSFRow row = sheet.createRow(0);
        sheet.createRow(1);

        HSSFCell cell2 = row.createCell(0);
        HSSFCell cell3 = row.createCell(1);
        HSSFCell cell4 = row.createCell(2);
        cell2.setCellStyle(cellStyle);
        cell3.setCellStyle(cellStyle);
        cell4.setCellStyle(cellStyle);
        cell2.setCellValue("Player");
        cell3.setCellValue("Data type");
        cell4.setCellValue("东西詹 2013~2018 数据分析");

        HSSFRow row3 = sheet.createRow(2);
        for (int i = 2;i<=8;i++){
            HSSFCell cell = row3.createCell(i);
            cell.setCellStyle(cellStyle);
            if (i!=8){
                cell.setCellValue(2011+i);
            }else {
                cell.setCellValue("场均");
            }
        }
        for (int i=3;i<9;i++){
            HSSFRow rown = sheet.createRow(i);
            HSSFCell cell0 = rown.createCell(0);
            HSSFCell cell1 = rown.createCell(1);
            cell1.setCellStyle(cellStyle);
            cell0.setCellStyle(cellStyle);
            //得到数据
             float[] dataList= (float[]) arrayList.get(i-3);

            if (i==3){
                cell0.setCellValue("LeBron James");
            }else if (i==6){
                cell0.setCellValue("James Harden");
            }
            switch (i%3) {
                case 0 : cell1.setCellValue("Pnt");
                break;
                case 1 : cell1.setCellValue("Rbk");
                break;
                case 2 : cell1.setCellValue("Ast");
                break;
            }
            for (int j=2;j<9;j++){
                float avg = 0;
                HSSFCell celln = rown.createCell(j);
                celln.setCellStyle(cellStyle);
                if (j==8){
                    for(int z=0;z<6;z++){
                        avg += dataList[z];
                    }
                    celln.setCellValue(avg/6);
                }else {
                    celln.setCellValue(dataList[j-2]);
                }
            }
        }
         //合并单元格
        mergeAllTitle(sheet);

    return workbook;
    }
    private static void mergeAllTitle(HSSFSheet sheet){
        for (int i = 0;i<3;i++){
            mergeTitle(0,2,0,0,sheet);
            mergeTitle(0,2,1,1,sheet);
            mergeTitle((i+1)*3,(i+1)*3+2,0,0,sheet);

        }
        for (int i = 0;i<2;i++){
            mergeTitle(0,1,2,8,sheet);
        }

    }
    private static void mergeTitle(int rowIndexStart,int rowIndexEnd,int cellIndexStart,int cellIndexEnd,HSSFSheet sheet){
        CellRangeAddress region = new CellRangeAddress(rowIndexStart, rowIndexEnd, cellIndexStart , cellIndexEnd);
        sheet.addMergedRegion(region);
    }

问题
在设置CellStyle的时候我发现其实是有RowStyle可以设置的,但是我设置rowStyle的时候并没有生效,所以非得得到cell再一个个的设置cellStyle显得很low。
如果做过的人看到这个问题,烦请 解答一波。

你可能感兴趣的:(工具类)