Java - Output Excel File with ConditionFormat

在這邊我輸出Excel檔案時,將利用JXCell來建立條件化格式,如此一來可以動態地因應資料

的多寡來定義條件化格式的範圍。

假設,我要輸出的條件化格式如下:


這邊分成兩種規則,建立公式型態及儲存格型態。

1. 儲存格的條件化格式
View m_view=new View();  
m_view.read("D:\\template.xls");

ConditionFormat condfmt[]=new ConditionFormat[1];
condfmt[0].setType(ConditionFormat.TypeCell);
condfmt[0].setOperator(ConditionFormat.OperatorNotEqual);
condfmt[0].setFormula1("0", 0, 0);
CellFormat cf=condfmt[0].getCellFormat();
cf.setPattern((short)1);
cf.setPatternFG(0xFFCC99);
condfmt[0].setCellFormat(cf);
m_view.setSelection(4, 5, 10, 5);
m_view.setConditionalFormats(condfmt);

一開始先讀取樣版檔案,再來由於套用的範圍只會定義一種規則,因此在new時只給予1的

大小即可。

再來設定type為TypeCell規則樣式,並且定義此儲存格為不等於0時,將設定該儲存格會給予

一個顏色!

最後,設定這個儲存格要套用在哪個範圍($F$5:$F$11)之下。

PS. setFormula1 method在此只針對第一個參數給予定義,第二、第三參數無特別指定!

API定義如下:

public void setFormula1(java.lang.String formula,
                        int row,
                        int col)
                 throws java.lang.Exception

因此,在Demo時,當您在$F$5:$F$11儲存格內輸入非0的數字,該格就會被標記一個顏色!

2. 公式的條件化格式
 
...
ConditionFormat condfmt1[]=new ConditionFormat[1];
condfmt1[0]= m_view.CreateConditionFormat();
condfmt1[0].setType(ConditionFormat.TypeFormula);
condfmt1[0].setFormula1("$F1<>0", 0, 0);
cf=condfmt1[0].getCellFormat();
cf.setPattern((short)1);
cf.setPatternFG(0xFFCC99);
condfmt1[0].setCellFormat(cf);
m_view.setSelection(4, 0, 10, 2);
m_view.setConditionalFormats(condfmt1);
m_view.write("D:\\output.xls");

一樣地,由於套用的範圍只會定義一種規則,因此在new時只給予1的大小即可。

再來,在setType時指定為TypeFormula,並且在setFormula1時,寫入公式"$F1<>0",1可以想

成起始位置,若搭配選擇的範圍($A$5:$C$11),在產生檔案後會對應成"$F5<>0"。

最後,這兩個規則相組合,會產生當您在$F$5輸入一非0的數字時,$A$5:$C$5會給予顏色!

因為公式設成$F5為鎖定F,因此數字row的部分會自動遞移向下,即$F$6輸入相對地造成

$A$6:$C$6會給予顏色!

如下圖:
 

PS. 為什麼針對在$F$5輸入會一次造成$A$5:$C$5三格都有顏色,原因在於公式內定義$F為

鎖定,若今天設定"F5<>0",只會在A5有顏色,而相對地B5要有顏色就必須在G5輸入了。可

以自行操作看看!

留言