我正在尝试使用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);
}
如果您查看条件格式,您会发现一个链接
请参阅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工作簿,我想在一组定义了条件格式的单元格中定义一个自定义背景色,但问题是类中的方法只接受一个类型短参数,而不是像这样的: 我可以做,但我想定义一种自定义颜色。我该怎么做?。