nsh*_*eta 1 java excel apache-poi
我正在尝试使用 apache poi java 创建一个空的 excel 模板。我需要添加一个规则 - 当列没有。3 被填充,然后从 7 到 12 的列需要以某种颜色突出显示(作为用户的强制性指标)。
我可以找到下面的代码,当在同一单元格上满足条件时,它会为单元格着色。但是我想在当前单元格上满足条件时为不同的单元格着色/格式化。
` XSSFSheetConditionalFormatting sheetCF = sheet.getSheetConditionalFormatting();
ConditionalFormattingRule rule1 = sheetCF.createConditionalFormattingRule(ComparisonOperator.GT, "5");
PatternFormatting patternFmt = rule1.createPatternFormatting();
patternFmt.setFillBackgroundColor(IndexedColors.YELLOW.index);
sheetCF.addConditionalFormatting(addressList.getCellRangeAddresses(), rule1); //when rule1 is met, same cell is colored yellow
Run Code Online (Sandbox Code Playgroud)
但我想要的是当满足规则 1 时,然后为不同的单元格范围着色。
这在 poi 中是可能的吗?
Excel 提供基于公式的条件格式规则。
如果 in 中的值是数字且大于 5 , 则该公式=AND(ISNUMBER($C1), $C1>5)返回。如果将此公式应用于 range ,则如果相应行的列中的值满足该条件,则此范围内的每个单元格都将为真。那是因为在公式中使用了列固定。但是行号不是固定的,所以是相对的。True$C1G1:L1000CC$C
使用示例apache poi:
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 main(String[] args) throws Exception {
Workbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet("new sheet");
SheetConditionalFormatting sheetCF = sheet.getSheetConditionalFormatting();
ConditionalFormattingRule rule = sheetCF.createConditionalFormattingRule("AND(ISNUMBER($C1), $C1>5)");
PatternFormatting fill = rule.createPatternFormatting();
fill.setFillBackgroundColor(IndexedColors.YELLOW.index);
fill.setFillPattern(PatternFormatting.SOLID_FOREGROUND);
ConditionalFormattingRule[] cfRules = new ConditionalFormattingRule[]{rule};
CellRangeAddress[] regions = new CellRangeAddress[]{CellRangeAddress.valueOf("G1:L1000")};
sheetCF.addConditionalFormatting(regions, cfRules);
workbook.write(new FileOutputStream("ConditionalFormatting.xlsx"));
workbook.close();
}
}
Run Code Online (Sandbox Code Playgroud)
现在,如果您在列中放入C数字且大于 5 的内容,则列中的单元格G:L将填充为黄色。