1.說明
pom就不列了,POI版本爲4.1.0
2.程序功能
將源單元格的條件格式規則複製到目標區域,兼容03與07。
3.代碼如下
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.ConditionalFormatting;
import org.apache.poi.ss.usermodel.ConditionalFormattingRule;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.SheetConditionalFormatting;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFSheetConditionalFormatting;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
/**
* @author sheromin
*
*/
public class ConditionalFormatMain {
public static void main(String[] args) {
try {
FileInputStream inputStream=new FileInputStream("D:\\test.xlsx");
XSSFWorkbook workbook=new XSSFWorkbook(inputStream);
XSSFSheet sheet=workbook.getSheet("Sheet1");
XSSFSheetConditionalFormatting scf =sheet.getSheetConditionalFormatting();
XSSFRow row=sheet.getRow(0);
XSSFCell cell=row.getCell(0);
List<ConditionalFormattingRule> ruleList=getConditionalRule(sheet,cell);
CellRangeAddress[] regions= {new CellRangeAddress(1,1,0,7)};
if(ruleList!=null&& ruleList.size()>0) {
for(ConditionalFormattingRule rule:ruleList) {
scf.addConditionalFormatting(regions,rule);//區域內添加規則
}
}
workbook.write(new FileOutputStream("D:\\test.xlsx"));
workbook.close();
inputStream.close();
System.out.print("Finish!!!");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private static List<ConditionalFormattingRule> getConditionalRule(Sheet sheet,Cell cell){
List<ConditionalFormattingRule> ruleList=new ArrayList<ConditionalFormattingRule>();
if(cell!=null) {
SheetConditionalFormatting scf=sheet.getSheetConditionalFormatting();//獲取sheet中條件格式對象
int countOfFormat=scf.getNumConditionalFormattings();//條件格式的數量
for(int i=0;i<countOfFormat;i++) {
ConditionalFormatting format=scf.getConditionalFormattingAt(i);//第countOfFormat個條件格式
CellRangeAddress[] ranges=format.getFormattingRanges();//條件格式區域
for(int r=0;r<ranges.length;r++) {
if(ranges[r].isInRange(cell)) {//cell是否在此區域
int numOfRule=format.getNumberOfRules();
for(int j=0;j<numOfRule;j++) {// 獲取具體的規則
ConditionalFormattingRule rule=format.getRule(j);
ruleList.add(rule);
}
}
}
}
}
return ruleList;
}
}
4.結果如下:
程序運行前
程序運行後
經測試對於03和07版本的excel都適用。