org.apache.poi 4.0
删除了仅使用java.awt.Color
的XSSFColor
构造函数。在org.apache.poi3.7
中,只需编写
Color inputColor = Color.RED;
XSSFColor test = new XSSFColor(inputColor);
但是,该构造函数在4.0中不再有效。文档位于https://poi.apache.org/apidocs/dev/org/apache/poi/xssf/usermodel/XSSFColor.html 显示了其他几个构造函数,但理想情况下我希望更改尽可能少的行。
所以,我的问题是,现在(在ApachePOI4.0中)从java.awt.Color
创建XSSFColor
的最佳方法是什么?
根据注释中的要求,这里是我的测试代码,使用建议style.setFillForeground Color(new XSSFColor(java.awt.颜色。RED, null);
用LibreOffice 6.1打开它会产生一个错误(尝试修复,然后失败)。评论了POI 3.7版本,正常工作。
@Test
public void testPOI40() throws FileNotFoundException, IOException {
Workbook workbook = new XSSFWorkbook();
XSSFSheet fSheet = (XSSFSheet) workbook.createSheet("new Sheet");
XSSFRow hRow = fSheet.createRow((short) 0);
//header
String[] astrHeaders = new String[]{"Header1", "Header2", "Header3", "Header4"};
for (int col = 0; col < astrHeaders.length; col++) {
XSSFCell cell = hRow.createCell((short) col);
XSSFCellStyle tempHeaderStyle = (XSSFCellStyle) workbook.createCellStyle();
tempHeaderStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
tempHeaderStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
cell.setCellValue(astrHeaders[col]);
cell.setCellStyle(tempHeaderStyle);
}
//body
Double[] astrContent = new Double[]{1.3, 0.3, 0.87, 1.0};
Color[] colors = new Color[] {Color.RED,Color.BLUE,Color.WHITE,Color.GREEN};
XSSFRow fRow = fSheet.createRow((short) 1);
for (int iCol = 0; iCol < 4; iCol++) {
XSSFCell cell = fRow.createCell((short) iCol);
XSSFCellStyle tempBodyStyle = (XSSFCellStyle) workbook.createCellStyle();
cell.setCellValue(astrContent[iCol]);
//working with POI 3.17
//tempBodyStyle.setFillForegroundColor(new XSSFColor(colors[iCol]));
tempBodyStyle.setFillForegroundColor(new XSSFColor(colors[iCol],null));
tempBodyStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
cell.setCellStyle(tempBodyStyle);
}
FileOutputStream fileOut = new FileOutputStream(new File("testfile.xlsx"));
BufferedOutputStream bos = new BufferedOutputStream(fileOut);
workbook.write(bos);
fileOut.close();
}
解决方案:
替换了fileout.close()
带有
bos.close()
并且它可以工作。所以
tempBodyStyle.setFillForegroundColor(新的XSSFColor(Color.RED,null))是一个很好的解决方案
如果你包装的文件输出流
在一个BufferedOutputStream
,但做关闭,然后只有内部文件输出流
,而不是BufferedOutputStream
,然后BufferedOutputStream
保持打开,文件将没有所有字节。
这就是文件损坏的原因。
因此,破坏性与构建XSSFColor
有关。构造函数style.setFillForeground Color(new XSSFColor(java.awt.的颜色。RED, null));
工作。
取而代之:
...
FileOutputStream fileOut = new FileOutputStream(new File("testfile.xlsx"));
BufferedOutputStream bos = new BufferedOutputStream(fileOut);
workbook.write(bos);
bos.close();
workbook.close();
...
它可能在以前的apache poi版本中工作,因为xssf工作簿.write
在准备就绪时关闭了所有流。这并没有更多。这是正确的,因为write
不应该关闭流。
但是由于poimmldocument
实现了java.io.Closeable
至少workbook.close()
应该关闭所有流。但事实并非如此。因此,在ApachePOI4.0.0中,显式关闭所有流是必要的。
我想用十六进制代码将单元格的前景色设置为给定的颜色。例如,当我尝试将其设置为红色时: 无论我在decode函数的参数中设置了什么十六进制值,getIndexed函数都将始终返回黑色。 难道我可能做错了什么?我认为这是一个错误,但我不确定...
我试图使用下面的XSSFColor方法设置RGB颜色值 我正在传递短值,但是不管RGB值是多少,我的前景都会被设置为黑色。我还没有发现这是为什么——有什么想法吗?
问题内容: 我想将单元格的前景色设置为十六进制代码中的给定颜色。例如,当我尝试将其设置为红色时: 无论我在解码函数的参数中设置了什么十六进制值,getIndexed函数都将始终返回黑色。 可能是我做错了什么吗?我认为这是一个错误,但我不确定… 问题答案: 好消息是,如果您使用的是XSSF,而不是HSSF,那么解决问题的方法就很简单。您只需将样式变量转换为XSSFCellStyle。如果这样做,则存
我得到了一个例外: 在[source:(String)“{”product_id“:”1420-131617-82“,”sku“:”1420-131617“,”display_sku“:”8dd 355 100-411“,”genart_number“:82,”name“:”bremscheibe“,”description“:null,”additional_info_text“:null,”p
问题内容: 使用的我可以将任意的数据到数据的URL。有没有办法使用内置的浏览器API 将数据URL转换回实例? 问题答案: 用户Matt一年前提出了以下代码如何在javascript中将dataURL转换为文件对象?,这可能对您有帮助 编辑:正如一些评论者所报道的,BlobBuilder已被弃用了一段时间。这是更新的代码:
问题内容: 这是我认为的Java纯粹主义者之一。最近,我遇到了一种将字符串值自定义解析为布尔值的方法的问题。一个足够简单的任务,但是由于某种原因,以下方法在空情况下抛出NullPointerException…… 该方法的返回类型为布尔值,那么为什么或如何引发NullPointerException?从调试开始,似乎在嵌套的嵌入式条件语句评估为null并向外部嵌入式条件语句返回null的时候抛出了