我以前生成了.xls(也是Apache POI),再次打开并按单元格值更改背景颜色。问题是,背景不是在所有细胞上都改变了,而是仅在大约50行中改变,其他残留在白色bg中。函数mark()
在一个循环中,我试图转储值,行号,尝试结束迭代xls一次又一次地分配颜色,没有任何作用......
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Font;
public class Xls {
private FileOutputStream fileOut;
private Sheet xlsSheet;
private HSSFWorkbook xlsWorkbook;
private CellStyle cellStyle;
public Xls(String path) {
try {
fileOut = new FileOutputStream(path);
this.xlsWorkbook = new HSSFWorkbook();
this.xlsSheet = xlsWorkbook.createSheet("test");
cellStyle = this.xlsWorkbook.createCellStyle();
Row row1 = xlsSheet.createRow((int) 0);
this.xlsSheet.autoSizeColumn(0, true);
this.xlsSheet.autoSizeColumn(1, true);
this.xlsSheet.autoSizeColumn(2, true);
this.xlsSheet.autoSizeColumn(3, true);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
public void mark(int rowNumber, String status) {
short color = Constants.getColor(status);
CellStyle style = this.xlsWorkbook.createCellStyle();
style.setFillForegroundColor(color);
style.setFillPattern(CellStyle.SOLID_FOREGROUND);
//TODO!!! Why filling color only in first 50 rows?!
// System.out.println("Changing row " + sameRows.get(rowNumber) + " status is:'" + status + "' color:" + color);
Row row = xlsSheet.getRow(sameRows.get(rowNumber));
Cell statusCell = null;
if (!isCellEmpty(row.getCell(3))) {
statusCell = row.getCell(3);
} else {
statusCell = row.createCell(3);
}
statusCell.setCellValue(status);
statusCell.setCellStyle(style);
}
}
}
你知道哪里可以出错吗?
注意:setCellValue()
正在运行 - 所有字段都有正确的值。
答案 0 :(得分:2)
不应为每个Cell重新创建CellStyles,它们是Excel文件中的有限资源(限制由Excel本身强加),因此只创建一次样式对象并将其重新用于所有应该应用的单元格有相同的风格。