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

使用色阶规则的XSSFheetConditionalFormatting不会格式化使用java中的poi生成的excel中的数据

班承恩
2023-03-14

我正在尝试使用XSSFWorkbook功能在java中通过poi(4.0.1)生成的excel中创建色阶条件格式。尽管我尝试了许多在线可用的示例代码来创建红黄绿色阶格式,但我没有看到数据格式有任何变化。我正在粘贴我目前正在处理的代码。有人能帮助找到问题所在吗?

        applyColorScale(cf, "J2:J21", "00FF0000", "0000FFFF", "0000FF00");
        applyColorScale(XSSFSheetConditionalFormatting cf, String region, String... colors) {
            XSSFConditionalFormattingRule cr = cf.createConditionalFormattingColorScaleRule();
            XSSFColorScaleFormatting color = cr.createColorScaleFormatting();
            int steps = 100 / (colors.length - 1);
            for (int i = 0; i < colors.length; i++) {
                XSSFConditionalFormattingThreshold th = color.createThreshold();
                if (i == 0) {
                    th.setRangeType(XSSFConditionalFormattingThreshold.RangeType.MIN);
                } else if (i == colors.length - 1) {
                    th.setRangeType(XSSFConditionalFormattingThreshold.RangeType.MAX);
                } else {
                    th.setRangeType(XSSFConditionalFormattingThreshold.RangeType.PERCENTILE);
                }
                th.setValue((double)steps*i);
                XSSFColor clr = color.createColor();
                clr.setARGBHex(colors[i]);
            }
            CellRangeAddress[] regions = {CellRangeAddress.valueOf(region)};
            cf.addConditionalFormatting(regions, cr);
        }

共有1个答案

东郭自强
2023-03-14

如果您查看条件格式,您会发现一个链接

请参阅ConditionalFormats.java中有关Excel条件格式的更多示例

下面的例子是:

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

import org.apache.poi.ss.util.CellRangeAddress;

import java.io.FileOutputStream;

public class ConditionalFormatting {

 public static void applyColorScale(SheetConditionalFormatting sheetCF, String region, String... colors) {
  CellRangeAddress[] regions = { CellRangeAddress.valueOf(region) };
  ConditionalFormattingRule rule = sheetCF.createConditionalFormattingColorScaleRule();
  ColorScaleFormatting csf = rule.getColorScaleFormatting();
  if (colors.length == 3) {
   csf.getThresholds()[0].setRangeType(ConditionalFormattingThreshold.RangeType.MIN);
   csf.getThresholds()[1].setRangeType(ConditionalFormattingThreshold.RangeType.PERCENTILE);
   csf.getThresholds()[1].setValue(50d);
   csf.getThresholds()[2].setRangeType(ConditionalFormattingThreshold.RangeType.MAX);
   for (int c = 0; c < 3; c++) {
    ((ExtendedColor)csf.getColors()[c]).setARGBHex(colors[c]);
   }
  } else if (colors.length == 2) {
   csf.setNumControlPoints(2);
   csf.getThresholds()[0].setRangeType(ConditionalFormattingThreshold.RangeType.MIN);
   csf.getThresholds()[1].setRangeType(ConditionalFormattingThreshold.RangeType.MAX);
   for (int c = 0; c < 2; c++) {
    ((ExtendedColor)csf.getColors()[c]).setARGBHex(colors[c]);
   }
  }

  sheetCF.addConditionalFormatting(regions, rule);
 }

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

  Sheet sheet = workbook.createSheet("new sheet");

  for (int r = 1; r < 20; r++) {
   sheet.createRow(r).createCell(9).setCellFormula("RANDBETWEEN(-100, 100)");
   sheet.getRow(r).createCell(11).setCellFormula("RANDBETWEEN(-100, 100)");
  }

  SheetConditionalFormatting sheetCF = sheet.getSheetConditionalFormatting();

  applyColorScale(sheetCF, "J2:J21", "FFFF0000", "FFFFFF00", "FF00FF00");
  applyColorScale(sheetCF, "L2:L21", "FFFF0000", "FF00FF00");

  FileOutputStream out = new FileOutputStream("ConditionalFormatting.xlsx");
  workbook.write(out);
  out.close();
  workbook.close();

 }
}

代码的主要区别:您创建的XSSFColor没有在任何地方使用。仅限范围类型。百分数需要一个值。ARGB中的Alpha应该是完全不透明的,而不是完全不透明的。黄色是FFFF00

 类似资料:
  • 问题内容: 我正在使用apache POI读取Excel文档。至少可以说,到目前为止,它已经可以满足我的目的。但是令我震惊的一件事是将单元格的值提取为HTML。 我有一个单元格,用户将在其中输入一些字符串并应用某种 格式(例如,项目符号/数字/粗体/斜体) 等。 因此,当我阅读它时,内容应为 HTML 格式,而不是POI给出的纯字符串格式。 我几乎遍历了整个POI API,但找不到任何人。我只想保

  • 我试图读取一个excel表格,并使用以下代码填充行的背景色: 当我运行代码时,颜色只填充空白单元格。对于包含数据的所有单元格,颜色没有变化。有人可以告诉我为什么会这样吗?

  • 背景:我正在尝试将Excel文件读入Java程序。我的Excel文件的意思是表示一个网格或栅格地图,所以我使每个单元格的高度和宽度为一英寸。我的想法是,我可以“绘制”一个地图或图像,通过阴影在每个单元格与一个颜色。然后,我可以将Excel文件读到一个我自己用“Pixel”对象创建的Java程序,并创建一个更文字化的图像。我是计算机科学的本科生,到目前为止我只上过四节计算机科学课。我懂OOP,能用J

  • 在Java中,我应该得到的输出是

  • 我试图用Java(Apache POI)更新一个现有excel文件中的空单元格,这是我写的代码,我没有得到任何错误,值也没有改变。 谢谢:)

  • 我有一个XSSF工作簿,我想在一组定义了条件格式的单元格中定义一个自定义背景色,但问题是类中的方法只接受一个类型短参数,而不是像这样的: 我可以做,但我想定义一种自定义颜色。我该怎么做?。