POI提供了為單元格添加條件樣式的方法,但是我並沒有找到獲取單元格改變后樣式的方法,獲取到樣式依舊是沒有改變之前的。
比如為單元格添加條件樣式用於監聽單元格值是否被修改,如果單元格值被修改那么字體顏色變紅。
但是即使字體變紅了,POI獲取字體顏色依舊是黑色的,而不是紅色的。這樣就無法監聽到單元格的變化。
因此只能另辟蹊徑,每個單元格對應一個隱藏的單元使用公式監聽單元格是否被修改。
我這里是當單元格被修改時,將相應的列號添加到隱藏單元格中,分別用逗號隔開。只要讀取到單元格的值遍歷行數即可以得到對應被修改的列號,從而定位哪個單元格被修改。
POI單元格添加公式的方法是:
org.apache.poi.hssf.usermodel.HSSFCell.setCellFormula(String formula);
POI單元格的格式CellType為CELL_TYPE_FORMULA(對應型號編碼2)
POI讀取公式類型的單元格的方法與普通讀取單元格的方法是不同的:
HSSFFormulaEvaluator eva= new HSSFFormulaEvaluator(HSSFWorkBook wb); CellValue cellVal = eva.evaluate(row.getCell(short index));//獲取單元格的值 //根據值的類型獲取公式的計算結果 String cellValue= (cellVal.getCellType()==HSSFCell.LAST_COLUMN_NUMBER) ?String.valueOf(cellVal.getNumberValue()) :cellVal.getStringValue();