Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ApachePOI4.1:从十六进制代码设置单元格背景颜色_Java_Spring_Colors_Apache Poi_Apache Poi 4 - Fatal编程技术网

Java ApachePOI4.1:从十六进制代码设置单元格背景颜色

Java ApachePOI4.1:从十六进制代码设置单元格背景颜色,java,spring,colors,apache-poi,apache-poi-4,Java,Spring,Colors,Apache Poi,Apache Poi 4,我尝试过在stack overflow上发布不同的解决方案,将背景颜色应用于Apache POI生成的单元格,但没有任何效果 我在做一些事情,比如: Workbook workbook = new XSSFWorkbook(); Sheet sheet = workbook.createSheet(sheetName); XSSFCellStyle cellStyle = ((XSSFCellStyle) workbook.createCellStyle()); if (styleObje

我尝试过在stack overflow上发布不同的解决方案,将背景颜色应用于Apache POI生成的单元格,但没有任何效果

我在做一些事情,比如:

Workbook workbook = new XSSFWorkbook(); 
Sheet sheet = workbook.createSheet(sheetName);

XSSFCellStyle cellStyle = ((XSSFCellStyle) workbook.createCellStyle());

if (styleObject.getBgColor() != null) {
    java.awt.Color javaBdgColor = java.awt.Color.decode(voceStyle.getBgColor()); // this is #FFF000
    XSSFColor bgColor = new XSSFColor(javaBdgColor, new DefaultIndexedColorMap());
    cellStyle.setFillForegroundColor(bgColor.getIndex());
    cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
}

Row newRow = Rowsheet.createRow(0);
Cell newCell = newRow.createCell(0);
newCell.setCellStyle(cellStyle);

// write file
String pathFileExport = buildPathExportFile("test-export");
FileOutputStream fileOut = new FileOutputStream(pathFileExport);
workbook.write(fileOut);
fileOut.close();

//close workbook
workbook.close();

return Paths.get(pathFileExport);
我认为在我的代码中一切都很好,但是每个单元格的样式都会导致黑色背景。

我对调试结果期间没有字段的DefaultIndexedColorMap实例有一些疑问:

在这一点上,我不知道该怎么解决。 其他帖子中的每个人似乎都能正常工作,但我仍然使用黑色背景,而不是黄色背景

有什么建议吗?
提前谢谢

我注意到,在处理xlsx文件XSSF中的颜色时,使用索引颜色效果不太好。默认情况下,XSSF工作簿中似乎没有任何颜色的索引,因此不能使用未索引的颜色索引

但是,您可以使用

当我使用这个重载时,我会得到你期望的黄色背景


通常,在XSSF中使用颜色时,应该使用XSSFColor本身,而不是其索引。这也适用于其他类型的颜色背景、边框颜色和字体颜色。

我注意到,在xlsx文件XSSF中使用颜色时,使用索引颜色效果不佳。默认情况下,XSSF工作簿中似乎没有任何颜色的索引,因此不能使用未索引的颜色索引

但是,您可以使用

当我使用这个重载时,我会得到你期望的黄色背景


通常,在XSSF中使用颜色时,应该使用XSSFColor本身,而不是其索引。这也适用于其他情况,如其他图案颜色背景、边框颜色和字体颜色。

另一个答案告诉我们,在XSSFCellStyle中,当涉及自定义颜色时,使用而不是使用索引颜色是必要的。但是在XSSF中也可以使用索引颜色。如果不需要使用定制的颜色,这将是最兼容的方式

但是也应该避免从java.awt.Color创建XSSFColor。构造函数标记为仅测试。在某些情况下,java.awt.Color将不可用

因此,如果需要从十六进制代码中设置单元格背景颜色,并且十六进制代码位于字符串中,则可以使用org.apache.commons.codec.binary.hex从该字符串获取字节[]数组。ApacheCommons编解码器已经是ApachePOI的依赖项之一。然后可以使用构造函数。IndexedColorMap到目前为止没有任何用途。因此可以将其设置为空。如果IndexedColorMap稍后得到任何使用,则无论如何都必须调整代码

例如:

import java.io.FileOutputStream;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.*;

import org.apache.commons.codec.binary.Hex;

class CreateXSSFColor {

 public static void main(String[] args) throws Exception {

  try (Workbook workbook = new XSSFWorkbook(); 
       FileOutputStream fileout = new FileOutputStream("Excel.xlsx") ) {

   String rgbS = "FFF000";
   byte[] rgbB = Hex.decodeHex(rgbS); // get byte array from hex string
   XSSFColor color = new XSSFColor(rgbB, null); //IndexedColorMap has no usage until now. So it can be set null.

   XSSFCellStyle cellStyle = (XSSFCellStyle) workbook.createCellStyle();
   cellStyle.setFillForegroundColor(color);
   cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);

   Sheet sheet = workbook.createSheet(); 
   Row row = sheet.createRow(0);
   Cell cell = row.createCell(0);
   cell.setCellValue("yellow");
   cell.setCellStyle(cellStyle);

   workbook.write(fileout);
  }

 }
}

另一个答案告诉我们,在XSSFCellStyle中,当涉及到自定义颜色时,使用而不是使用索引颜色是必要的。但是在XSSF中也可以使用索引颜色。如果不需要使用定制的颜色,这将是最兼容的方式

但是也应该避免从java.awt.Color创建XSSFColor。构造函数标记为仅测试。在某些情况下,java.awt.Color将不可用

因此,如果需要从十六进制代码中设置单元格背景颜色,并且十六进制代码位于字符串中,则可以使用org.apache.commons.codec.binary.hex从该字符串获取字节[]数组。ApacheCommons编解码器已经是ApachePOI的依赖项之一。然后可以使用构造函数。IndexedColorMap到目前为止没有任何用途。因此可以将其设置为空。如果IndexedColorMap稍后得到任何使用,则无论如何都必须调整代码

例如:

import java.io.FileOutputStream;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.*;

import org.apache.commons.codec.binary.Hex;

class CreateXSSFColor {

 public static void main(String[] args) throws Exception {

  try (Workbook workbook = new XSSFWorkbook(); 
       FileOutputStream fileout = new FileOutputStream("Excel.xlsx") ) {

   String rgbS = "FFF000";
   byte[] rgbB = Hex.decodeHex(rgbS); // get byte array from hex string
   XSSFColor color = new XSSFColor(rgbB, null); //IndexedColorMap has no usage until now. So it can be set null.

   XSSFCellStyle cellStyle = (XSSFCellStyle) workbook.createCellStyle();
   cellStyle.setFillForegroundColor(color);
   cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);

   Sheet sheet = workbook.createSheet(); 
   Row row = sheet.createRow(0);
   Cell cell = row.createCell(0);
   cell.setCellValue("yellow");
   cell.setCellStyle(cellStyle);

   workbook.write(fileout);
  }

 }
}

工作得很好!谢谢。是的,使用索引颜色不是很清楚,即使遵循api也很完美!谢谢。是的,使用索引颜色不是很清楚,即使遵循api docsLike Rgetman解决方案,即使我必须修复一些代码行,这也非常有效。实际上,我之所以选择这个作为解决方案,是因为它更加外向,涉及到代码的可维护性。请注意,我已经用string.replace从十六进制代码字符串FFF000中删除了char,就像rgetman解决方案一样,即使我必须修复一些代码行,它也能完美地工作。实际上,我之所以选择这个作为解决方案,是因为它更加外向,涉及到代码的可维护性。请注意,我已经用string.replace从十六进制代码字符串FFF000中删除了char,