当我尝试从一个XSLX文件获取单元格背景颜色并将此颜色设置为单元格的背景到另一个XSLX文件时,我遇到了问题。
输入和输出文件均采用2007(XLSX)格式(输入文件是使用MS Excel 2010创建的)。
对于使用XLSX文件,我使用的是Apache Poi 3.14:
InputStream is = new FileInputStream("forRead.xlsx");
Workbook wb_in = WorkbookFactory.create(is);
XSSFCell cell_in = (XSSFCell) wb_in.getSheetAt(0).getRow(0).getCell(0);
XSSFColor background_in = ((XSSFColor) cell_in.getCellStyle().getFillForegroundColorColor());
XSSFColor background_out = new XSSFColor();
background_out.setARGBHex(background_in.getARGBHex()); // this works wrong :(.
XSSFWorkbook wb_out = new XSSFWorkbook();
Sheet sheet_out = wb_out.createSheet();
Row row_out = sheet_out.createRow((short) 2);
XSSFCell cell_out = (XSSFCell)row_out.createCell((short)1);
XSSFCellStyle style_out = wb_out.createCellStyle();
style_out.setFillForegroundColor(background_out); // if I use background_in, then the output color will be correct
style_out.setFillPattern(CellStyle.SOLID_FOREGROUND);
cell_out.setCellStyle(style_out);
FileOutputStream fileOut = new FileOutputStream("forWrite.xlsx");
wb_out.write(fileOut);
fileOut.close();
输出文件中的结果颜色明显不同。它比较暗。 这是一个我不知道如何解决的问题。
除此之外,我注意到两件奇怪的事情:
1)background_in.getARGBHex()
获得了我在Excel中看到的不同颜色。 #F79646 or rgb(247, 150, 70)
代替#fde9d9 or rgb(253, 233, 217)
2)如果我style_out.setFillForegroundColor(background_in);
输出文件中的颜色是正确的这使我认为我可以通过为XSSFColor对象设置一些额外属性(如alpha
或其他东西来解决问题。
可以下载My Maven项目 from here。包含XLSX文件。
更新:已解决
除RGB之外,我应该设置色调。
答案 0 :(得分:0)
除了RGB之外,我还应该添加色调属性的设置。 back_XSSFColor_out.setTint(back_XSSFColor_in.getTint());