当前位置: 首页 > 知识库问答 >
问题:

无法在XSSFCell Apache POI中设置自定义颜色

梁晋鹏
2023-03-14

我正试图将一些自定义颜色(从hexcode或rgb值)设置为XSSFCell,但尽管我给出了一些其他颜色,但单元格的颜色还是变黑了。我已经通过以下方法尝试了这样做:

File xlSheet = new File("C:\\Users\\IBM_ADMIN\\Downloads\\Excel Test\\Something3.xlsx");
    System.out.println(xlSheet.createNewFile());
    FileOutputStream fileOutISPR = new FileOutputStream("C:\\Users\\IBM_ADMIN\\Downloads\\Excel Test\\Something3.xlsx");
    XSSFWorkbook isprWorkbook = new XSSFWorkbook();
    XSSFSheet sheet = isprWorkbook.createSheet("TEST");
    XSSFRow row = sheet.createRow(0);
    XSSFCellStyle cellStyle = isprWorkbook.createCellStyle();
    byte[] rgb = new byte[3];
    rgb[0] = (byte) 24; // red
    rgb[1] = (byte) 22; // green
    rgb[2] = (byte) 219; // blue
    XSSFColor myColor = new XSSFColor(rbg);
    cellStyle.setFillForegroundColor(myColor);
    cellStyle.setFillPattern(CellStyle.SOLID_FOREGROUND);
    cellStyle.setAlignment(HorizontalAlignment.CENTER);
    XSSFCell cell = row.createCell(0);
    cell.setCellValue("Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has");
    cell.setCellStyle(cellStyle);
    CellRangeAddress rangeAddress = new CellRangeAddress(0, 0, 0, 2);
    sheet.addMergedRegion(rangeAddress);
    int width = ((int)(90 * 0.73)) * 256;
    sheet.setColumnWidth(cell.getColumnIndex(), width);
    //sheet.autoSizeColumn(cell.getColumnIndex());
    RegionUtil.setBorderBottom(XSSFCellStyle.BORDER_MEDIUM, rangeAddress, sheet, isprWorkbook);
    RegionUtil.setBottomBorderColor(IndexedColors.RED.getIndex(), rangeAddress, sheet, isprWorkbook);

    XSSFCell cell2 = row.createCell(11);
    cell2.setCellValue("222222222222222");
    isprWorkbook.write(fileOutISPR);

//节目结束

   XSSFCellStyle cellStyle = isprWorkbook.createCellStyle();
   byte[] rgb = new byte[3];
    rgb[0] = (byte) 24; // red
    rgb[1] = (byte) 22; // green
    rgb[2] = (byte) 219; // blue
    XSSFColor myColor = new XSSFColor(rgb);
    cellStyle.setFillForegroundColor(myColor);//1st method
    //cellStyle.setFillForegroundColor(new XSSFColor(new   java.awt.Color(128, 0, 128)));//2nd method  
  //XSSFColor myColor = new XSSFColor(Color.decode("0XFFFFFF"));
  cellStyle.setFillForegroundColor(myColor);//3rd Method

我尝试了在回答相关问题时提到的许多其他方法,但都没有解决我的问题。请帮帮我。

共有1个答案

宗政金鹏
2023-03-14

这是由于包org.apache.poi.ss.util的不完整造成的。

PropertyTemplate以及CellutilRegionUtil仅基于SS.usermodel级别,而不是基于XSSF.usermodel级别。但是到目前为止,org.apache.poi.ss.usermodel.CellStyle还不知道setfillForegroundColor(Color,Color)。它只知道setfillForegroundColor(short bg)。因此,ss.usermodellevel在此之前根本无法将color设置为填充前景色。只有(颜色索引)是可能的。

如果涉及到为什么在只使用org.apache.poi.ss.util设置边框时必须设置颜色的问题,那么答案是,这是必要的,因为color和border都在同一个CellStyle中。这就是为什么在将边框设置添加到CellStyle时,必须维护颜色设置,并最终设置为新的。

因此,总而言之,没有办法走出这一困境。如果需要使用org.apache.poi.ss.util,则不能同时使用setfillForegroundColor(XSSFColor color)。唯一的希望是setfillForegroundcolor(Color Color)将被添加到org.apache.poi.ss.usermodel.cellstyle,在Apache POI的更高版本中。

 类似资料:
  • 问题内容: 我正在尝试为xssfcell设置一些自定义的颜色(从hexcode或rgb值开始),但是即使我提供了其他颜色,单元的颜色也正在变成黑色。我尝试通过以下方式进行操作: //程序结束 我尝试了其他在相关问题答案中提到的其他方法,但是这些方法都没有解决我的问题。请帮帮我。 问题答案: 这是由于软件包org.apache.poi.ss.util不完整引起的。 以及和仅基于级别而不是基于级别。但

  • 我使用以下代码来设置jTable中的备用背景行颜色: 它是有效的。但是,我想使用自定义颜色(如rgb(242242))代替浅灰色作为替代颜色,但在执行以下操作时: 替代颜色完全被忽略,所有行都有白色背景。看起来此方法仅适用于属于颜色枚举的颜色。怎么会这样? 下面是一个完整的工作示例,随后是结果屏幕:

  • 我将Firebaseui的登录屏幕进行子类化: 当我看到登录屏幕上加载的xib LoginText时,我的实现工作正常。但背景颜色却被完全忽略了。 如何从该子类在登录屏幕上强制使用bg颜色? 编辑:如果我将下面的答案与View.InsertSubView(imageViewBackground,在:0)一起应用 我得到的是: 正如您所看到的,图像被插入到包含login按钮的视图下。如果我设置“在:

  • 跟着这个答案https://stackoverflow.com/a/55113171/324969这个答案https://stackoverflow.com/a/60686826/324969. 如果我按下Ctrl,逗号,在设置中搜索“颜色”,单击settings.json中的

  • 我想在我的应用程序android中使用一个自定义复选框,这个自定义复选框没有设置颜色的功能,在示例中,他们使用(http://schemas.android.com/apk/res-auto)喜欢(app)并设置颜色app:stroke_color=“#2196F3”我想知道如何通过编程设置颜色,链接自定义复选框https://github.com/lguipeng/AnimCheckBox