qq_50822956 2022-09-13 15:42 采纳率: 62.5%
浏览 32
已结题

Java導出Excel

 @Test
    public void testDownload() throws IOException {
        Cell cell;
        Row row;

        Type type = new TypeToken<List<Person>>() {
        }.getType();
        List<Person> personList = new Gson().fromJson(new String(Files.readAllBytes(Paths.get("C:\\Users\\K22010012\\Desktop\\finalexam\\demo\\src\\main\\resources\\xinxi.json"))), type);
        Map<String, List<Person>> collect = personList.stream().collect(Collectors.groupingBy(x -> String.format("%s_%s", x.getAge(), x.getGrade())));
        String fileName = "C:\\Users\\K22010012\\Desktop\\abc.xlsx";
        SXSSFWorkbook wb = new SXSSFWorkbook(10);

        FileOutputStream fileOS = new FileOutputStream(fileName);
        SXSSFSheet ws = wb.createSheet("ss");
        int Col = 0;
        int rowNum = 0;
        SXSSFRow row1 = ws.createRow(rowNum++);
        for (int i = 0; i < 3; i++) {
            row1.createCell(i);
        }
        row1.getCell(Col++).setCellValue("name");
        row1.getCell(Col++).setCellValue("age");
        row1.getCell(Col++).setCellValue("grade");
        ws.trackAllColumnsForAutoSizing();
        Font font = wb.createFont();
        for (String key : collect.keySet()) {
            XSSFCellStyle style=wb.getXSSFWorkbook().createCellStyle();
            for (int i=0;i< collect.get(key).size();i++) {
                int intCol = 0;
                row = ws.createRow(rowNum++);
                if(i!=0 && intCol!=1) {
                    font.setColor(IndexedColors.WHITE.getIndex());
                    style.setFont(font);
                }
              setCellValue(style,collect.get(key).get(i).getName(),row,intCol++);
                setCellValue(style,String.valueOf(collect.get(key).get(i).getAge()),row,intCol++);
                setCellValue(style,collect.get(key).get(i).getGrade(),row,intCol++);
                ws.trackAllColumnsForAutoSizing();
            }
            for (int c = 0; c < 6; c++) {
                ws.autoSizeColumn(c);
            }
            ws.createFreezePane(0, 1);
            wb.write(fileOS);

        }
    }
    public void setCellValue(CellStyle valueCellFormat, @Nullable String value, Row row, int intCol) {
        Cell cell = this.createStyleCell(valueCellFormat, row, intCol);
        if (value != null) {
            cell.setCellValue(value);
        }
    }
        private Cell createStyleCell(CellStyle valueCellFormat, Row row, int intCol) {
            Cell cell = row.createCell(intCol);
            cell.setCellStyle(valueCellFormat);
            return cell;
        }
使用到的Json檔
[
  {
    "name": "陳珍珍",
    "age": 11,
    "grade": "2班"
  },
  {
    "name": "咕嚕泡泡",
    "age": 11,
    "grade": "2班"
  },
  {
    "name": "袁弘",
    "age": 11,
    "grade": "2班"
  }
]

![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/963157450366121.png "#left")
但是按照自己寫的程式,所有數據的顔色都是白色的  好像是自己做的判斷錯了
![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/615105450366156.png "#left")
  • 写回答

3条回答 默认 最新

  • 於黾 2022-09-13 17:08
    关注

    你只定义了一个font对象,所以你把它设置成白色之后它就一直是白色了啊
    你也没必要在循环里不断创建样式,样式创建过多会报错的
    实际上你只需要创建两个font和style,然后判断一下到底使用哪种样式就行了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 9月21日
  • 已采纳回答 9月14日
  • 创建了问题 9月13日

悬赏问题

  • ¥15 VS2022+WDK驱动开发环境
  • ¥30 关于#java#的问题,请各位专家解答!
  • ¥30 vue+element根据数据循环生成多个table,如何实现最后一列 平均分合并
  • ¥20 pcf8563时钟芯片不启振
  • ¥20 pip2.40更新pip2.43时报错
  • ¥15 换yum源但仍然用不了httpd
  • ¥50 C# 使用DEVMOD设置打印机首选项
  • ¥15 麒麟V10 arm安装gdal
  • ¥20 OPENVPN连接问题
  • ¥15 flask实现搜索框访问数据库