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

Java Excel automation单元格背景色重复setFillForegroundColor

卫阳炎
2023-03-14

嘿,我下面的代码将单元格的背景更改为红色或绿色。似乎当我注释掉绿色的其他代码时,我的excel表对第1行中的每个单元格框都显示为红色。同样,如果我做相反的事情并注释掉RED并取消注释GREEN,那么第1行中的所有单元格都是绿色的。

我不明白下面的代码中是什么让所有的细胞颜色相同,即使前两个细胞应该是红色的,而所有其他细胞应该是绿色的。我已经检查了我的逻辑,它去了第一个IF 2次,然后剩下的去了else,所以这是正确的。

我的代码:

static CellStyle headerCellStyle    = workbook.createCellStyle();

for (int i = 0; i < arr.length; i++) {
     Row row             = sheet.createRow(rowNum1++);
     HSSFWorkbook hwb    = new HSSFWorkbook();
     HSSFPalette palette = hwb.getCustomPalette();
     Cell cell           = row.createCell(colNum);

     headerCellStyle.setWrapText(true);
     headerCellStyle.setAlignment(HorizontalAlignment.LEFT);
     headerCellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
     headerCellStyle.setAlignment(HorizontalAlignment.JUSTIFY);
     headerCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);

     if (arr[i].contains("*")) {
         //RED
         headerCellStyle.setFillForegroundColor(IndexedColors.RED.getIndex());
         cell.setCellValue(arr[i].replace(" " + (i + 1) + ".xml*", ""));
     } else {
         //GREEN
         headerCellStyle.setFillForegroundColor(IndexedColors.GREEN.getIndex());
         cell.setCellValue(arr[i].replace(" " + (i + 1) + ".xml", ""));
     }

     row.getCell(0).setCellStyle(headerCellStyle);
     row.setHeightInPoints(20);
}

我肯定我只是在看一些很明显的东西,但现在我无法找到可能是什么。

任何帮助都会很棒!

注:也发到以下论坛:

科德兰奇。通用域名格式

科德古鲁

共有1个答案

濮阳奇逸
2023-03-14

单元格填充存储在单元格样式中,单元格填充存储在工作簿级别。因此,永远不要在同一个循环中创建单元样式,该循环将单元值设置到图纸中。

如果需要两种不同的单元格填充(一种为红色,另一种为绿色实体图案),则还需要两种单元格样式。这些需要首先在工作簿级别创建,然后在设置单元格值的循环中设置为单元格样式。

你的代码不完整,所以我只能猜测,你到底想实现什么。

我希望以下最小但完整的示例将帮助您:

import java.io.FileOutputStream;

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class CreateExcelCellStyleRedAndGreen {

 public static void main(String[] args) throws Exception {
  //Workbook workbook = new XSSFWorkbook();
  Workbook workbook = new HSSFWorkbook();

  CellStyle headerCellStyleRed = workbook.createCellStyle();
  CellStyle headerCellStyleGreen = workbook.createCellStyle();

  headerCellStyleRed.setWrapText(true);
  headerCellStyleRed.setFillPattern(FillPatternType.SOLID_FOREGROUND);
  headerCellStyleRed.setAlignment(HorizontalAlignment.JUSTIFY);
  headerCellStyleRed.setVerticalAlignment(VerticalAlignment.CENTER);

  headerCellStyleGreen.cloneStyleFrom(headerCellStyleRed);

  headerCellStyleRed.setFillForegroundColor(IndexedColors.RED.getIndex());
  headerCellStyleGreen.setFillForegroundColor(IndexedColors.GREEN.getIndex());

  String[] arr = new String[] {
   "A Name of File.xml", 
   "B Name of File.xml*", 
   "C Name of File.xml", 
   "D Name of File.xml", 
   "E Name of File.xml*", 
   "F Name of File.xml"
  };

  int rowNum=1;
  int colNum=1;

  Sheet sheet = workbook.createSheet();

  for (int i = 0; i < arr.length; i++) {
   Row row = sheet.createRow(rowNum++);
   Cell cell = row.createCell(colNum);
   if (arr[i].contains("*")) {
    //RED
    cell.setCellStyle(headerCellStyleRed);
    cell.setCellValue(arr[i].replace(".xml*", ""));

   } else {
    //GREEN
    cell.setCellStyle(headerCellStyleGreen);
    cell.setCellValue(arr[i].replace(".xml", ""));
   }
   row.setHeightInPoints(50);
  }

  FileOutputStream out = null;
  if (workbook instanceof HSSFWorkbook) {
   out = new FileOutputStream("CreateExcelCellStyleRedAndGreen.xls");
  } else if (workbook instanceof XSSFWorkbook) {
   out = new FileOutputStream("CreateExcelCellStyleRedAndGreen.xlsx");
  }
  workbook.write(out);
  out.close();
  workbook.close();
 }
}
 类似资料:
  • 问题内容: 我正在尝试使用渲染器为jTable的单元格上色,但是它们工作不佳,因为它们滞后于表格并且无法看到。这是我的代码: 我没有将其放入rendererclass中,因为它滞后了,我将其放入cicle的双精度中,具体地说,放入了第二个cicle。我希望它为超过24的单元格上色,如果现在我写的话,那是行不通的 它使桌子完全着色 编辑 按照要求,我创建了一个描述我的问题的小示例,我不知道是否存在发

  • 在多个浏览器中最兼容的最佳做法是什么: 或 还是最好同时使用这两种方法来涵盖更多内容:

  • 我正在使用Apache POI 4.1.2运行以下代码: 输出文档包含两个具有红色背景的单元格:似乎在第二个单元格上设置红色背景具有覆盖第一个单元格背景颜色的效果。 如果仅在第一个单元格上设置背景,则背景颜色将正确设置为绿色。 我如何解决这个问题?

  • 我有一个简单的word文档,其中有一个表,包含一行和两列(换句话说,两个单元格)。第一个单元格的背景色是红色,另一个是黑色。我想使用python-docx将两者都改为白色。 我已经尝试了几种方法,但似乎最有希望的是下面的方法。它修改基础XML。 上面的代码将第一个单元格修改为白色,而将第二个单元格保留为黑色。我试图修改第二个单元格,方法是在之前添加以下代码: 问题是,现在,第一个单元格仍然是红色的

  • 我如何在Vaadin 8或更高版本中绘制网格单元。由于Vaadin 8不再支持grid.setCellStyleGenerator,我不知道还能做什么。有什么建议吗?