2013-10-31 57 views
2

我必须使用简单的公式验证单元格,如果无效,请将单元格颜色更改为黄色或红色,这并不重要。使用java更改excel单元格颜色

到目前为止,我已经看到了,并尝试这个办法:

SheetConditionalFormatting sheetCF = sheet.getSheetConditionalFormatting(); 

// formula = =SUMA(L13+M13+N13+O13) 
    //=SUMA(M4+N4+O4+P4+L:L 
    ConditionalFormattingRule rule2 = sheetCF.createConditionalFormattingRule(ComparisonOperator.EQUAL, "4"); 
    PatternFormatting fill2 = rule2.createPatternFormatting(); 
    fill2.setFillBackgroundColor(IndexedColors.GREEN.index); 
    fill2.setFillPattern(PatternFormatting.SOLID_FOREGROUND); 

    CellRangeAddress[] regions = { CellRangeAddress.valueOf("L2:L5")}; 

    sheetCF.addConditionalFormatting(regions, rule2); 
} 

这改变了我的颜色,如果值是四,我知道,但

如何申请和的公式的:

enter image description here

我需要在列L,M2 + N2 + O2 + P2和M3 + N3 + O3 + P3等的总和......的所有行验证

仅供参考,我得到的值从DB和值都喜欢与小数的图片,但我让他们在Java作为INT这样的:

while((j < fallas) && rset.next()){ 
    row = sheet.createRow(j+1); 
    row.createCell(0).setCellValue((rset.getBigDecimal(1)).toString()); 
    row.createCell(1).setCellValue(rset.getString(2)); 
    row.createCell(2).setCellValue(rset.getString(3)); 
    row.createCell(3).setCellValue(rset.getString(4)); 
    row.createCell(4).setCellValue(rset.getString(5)); 
    row.createCell(5).setCellValue(rset.getString(6)); 
    row.createCell(6).setCellValue(rset.getString(7)); 
    row.createCell(7).setCellValue((rset.getBigDecimal(8)).toString()); 
    row.createCell(8).setCellValue((rset.getBigDecimal(9)).toString()); 
    row.createCell(9).setCellValue((rset.getBigDecimal(10)).toString()); 
    row.createCell(10).setCellValue(rset.getString(11)); 

    //row.createCell(11).setCellFormula("SUMA(L13+M13+N13+O13)"); 

    row.createCell(11).setCellValue(String.valueOf((rset.getBigDecimal(12)).toString())); 
    row.createCell(12).setCellValue(String.valueOf((rset.getBigDecimal(13)).toString())); 
    row.createCell(13).setCellValue(String.valueOf((rset.getBigDecimal(14)).toString())); 
    row.createCell(14).setCellValue(String.valueOf((rset.getBigDecimal(15)).toString())); 
    row.createCell(15).setCellValue(String.valueOf((rset.getBigDecimal(16)).toString())); 
    row.createCell(16).setCellValue((rset.getString(17))); 
    row.createCell(17).setCellValue((rset.getString(18))); 
    row.createCell(18).setCellValue(rset.getString(19)); 
    row.createCell(19).setCellValue(rset.getString(20)); 
    row.createCell(20).setCellValue("-"); 
    row.createCell(21).setCellValue(new java.sql.Date(rset.getDate(22).getTime()).toString()); 
    row.createCell(22).setCellValue((rset.getBigDecimal(23)).toString()); 
    row.createCell(23).setCellValue("-"); 
    row.createCell(24).setCellValue("-"); 
    row.createCell(25).setCellValue("-"); 
    row.createCell(26).setCellValue("-"); 
    row.createCell(27).setCellValue((rset.getBigDecimal(28)).toString()); 
    row.createCell(28).setCellValue((rset.getBigDecimal(29)).toString()); 
    row.createCell(29).setCellValue(rset.getString(30)); 
    row.createCell(30).setCellValue(rset.getString(31)); 
    row.createCell(31).setCellValue(rset.getString(32)); 

L,M,N,O,P是createCell(11),12,13,14等

如果我只是把公式放在“createConditionalFormattingRule”它不会做任何事情:(请帮助我!

+1

感谢@JoshC! – jompi

回答

2

你对这个总数进行了什么验证?

假设这些细胞的总和comparred对一些号码,你可以试试这个:

// Condition 1: Formula Is =SUM($M2+$N2+$O2+$P2) > 75 
ConditionalFormattingRule rule1 = sheetCF.createConditionalFormattingRule("SUM($M2+$N2+$O2+$P2)>75"); 

总之

SheetConditionalFormatting sheetCF = sheet.getSheetConditionalFormatting(); 

// Condition 1: Formula Is =SUM($M2+$N2+$O2+$P2) > 75 
ConditionalFormattingRule rule1 = sheetCF.createConditionalFormattingRule("SUM($M2+$N2+$O2+$P2)>75"); 

PatternFormatting fill1 = rule1.createPatternFormatting(); 

fill1.setFillBackgroundColor(IndexedColors.RED.index); 
fill1.setFillPattern(PatternFormatting.SOLID_FOREGROUND); 

CellRangeAddress[] regions = { 
    CellRangeAddress.valueOf("L2:L5") 
}; 

sheetCF.addConditionalFormatting(regions, rule1); 

这里是一个link昭示着使用java创建条件格式的多种方法。

+0

谢谢,我已经得到了解决方案,但没有使用条件格式规则... 为了得到解决方案,我必须从Java进行操作,然后“ifs”更改单元格样式, 非常感谢你的时间我会尝试你说的:),祝你有美好的一天。 – jompi