Java用POI复制excel单元格条件格式规则

8 篇文章 0 订阅
4 篇文章 0 订阅

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.结果如下:
程序运行前
before test
程序运行后
程序运行后
经测试对于03和07版本的excel都适用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值