@Test
public void testDownload() throws IOException {
Cell cell;
Row row;
Type type = new TypeToken>() {
}.getType();
List personList = new Gson().fromJson(new String(Files.readAllBytes(Paths.get("C:\\Users\\K22010012\\Desktop\\finalexam\\demo\\src\\main\\resources\\xinxi.json"))), type);
Map> 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班"
}
]

但是按照自己寫的程式,所有數據的顔色都是白色的 好像是自己做的判斷錯了

你只定义了一个font对象,所以你把它设置成白色之后它就一直是白色了啊
你也没必要在循环里不断创建样式,样式创建过多会报错的
实际上你只需要创建两个font和style,然后判断一下到底使用哪种样式就行了
style你的文字设置成了白色,style应该有个设置背景颜色的 setFillForegroundColor(IndexedColors.GREY_50_PERCENT.getIndex()); ,你点进style的源码看看设置背景颜色的方法就好了