博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java使用poi实现excel保护工作表实例代码(支持.xls和.xlsx)
阅读量:4134 次
发布时间:2019-05-25

本文共 2693 字,大约阅读时间需要 8 分钟。

java使用poi实现excel保护工作表,支持.xls和.xlsx类型的excel,代码如下:

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

import org.apache.poi.hssf.usermodel.HSSFSheet;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

/**  
 * <p>类描述:保护工作表  </p>
 * <p>创建人:wanghonggang  </p>
 * <p>创建时间:2019年8月13日 下午3:14:40  </p>
 * 所需引用jar包:poi和poi-ooxml
 */
public class PoiUtil {

    //测试

    public static void main(String[] args) {
        try {
            lockExcel("E:\\test\\test.xlsx",0,"123");
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    
    /**
     * 
     * <p>方法描述:保护表格 TODO</p>
     * <p>创建人: wanghonggang  </p>
     * <p>创建时间: 2019年8月13日 下午4:12:03 </p>
     * <p>修改记录:</p>
     * @param excelPath excel文件路径
     * @param sheetIndex excel表序号,从0开始
     * @param password 加密密码
     * @throws Exception 
     * void
     */
    public static void lockExcel(String excelPath,int sheetIndex,String password) {
        //判断文件路径是否正确
        if(null != excelPath && !excelPath.isEmpty()){
            
            InputStream xlsFile=null;
            XSSFWorkbook xwb=null;
            HSSFWorkbook hwb=null;
            FileOutputStream os=null;
            
            try{
                //文件流
                xlsFile = new FileInputStream(excelPath);
                
                //判断是否为xlsx文件
                boolean is_Xlsx=isXlsx(excelPath);
                //xlsx文件使用XSSF前缀处理类,否则使用HSSF前缀处理类
                if(is_Xlsx){
                    //读取工作簿
                    xwb = new XSSFWorkbook(xlsFile);
                    
                    //获取sheet数量
                    //wb.getNumberOfSheets();
                    //读取工作表
                    XSSFSheet sheet = xwb.getSheetAt(sheetIndex);
                    
                    //sheet添加保护代码
                    sheet.protectSheet(password);
                    
                    //输出结果excel
                    os = new FileOutputStream(excelPath);
                    xwb.write(os);
                    
                }else{
                    //读取工作簿
                    hwb = new HSSFWorkbook(xlsFile);
                    
                    //获取sheet数量
                    //wb.getNumberOfSheets();
                    //读取工作表
                    HSSFSheet sheet = hwb.getSheetAt(sheetIndex);
                    
                    //sheet添加保护代码
                    sheet.protectSheet(password);
                    
                    //输出结果excel
                    os = new FileOutputStream(excelPath);
                    hwb.write(os);
                }
            }catch(FileNotFoundException e1){
                
            }catch(IOException e2){
                
            }finally{
                //关闭
                try {
                    if(null != os) os.close();
                    if(null != xwb) xwb.close();
                    if(null != hwb) hwb.close();
                    if(null != xlsFile) xlsFile.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            
        }else{
            System.out.println("文件路径不正确!");
        }
    }
    
    /**
     * 
     * <p>方法描述:判断是否为.xlsx后缀文件  TODO</p>
     * <p>创建人: wanghonggang  </p>
     * <p>创建时间: 2019年8月13日 下午3:38:35 </p>
     * <p>修改记录:</p> 
     * boolean
     * true 是xlsx
     * false 不是xlsx
     */
    public static boolean isXlsx(String excelPath){
        return ( null != excelPath && !excelPath.isEmpty() && excelPath.toLowerCase().endsWith(".xlsx"))?true:false;
    }
    
}

 

maven所需依赖如下:

        <dependency>

            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>4.1.0</version>
        </dependency>

        <dependency>

            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>4.1.0</version>
        </dependency>

 

转载地址:http://fhivi.baihongyu.com/

你可能感兴趣的文章
将有序数组转换为平衡二叉搜索树
查看>>
最长递增子序列
查看>>
从一列数中筛除尽可能少的数,使得从左往右看这些数是从小到大再从大到小...
查看>>
判断一个整数是否是回文数
查看>>
经典shell面试题整理
查看>>
腾讯的一道面试题—不用除法求数字乘积
查看>>
素数算法
查看>>
java多线程环境单例模式实现详解
查看>>
将一个数插入到有序的数列中,插入后的数列仍然有序
查看>>
在有序的数列中查找某数,若该数在此数列中,则输出它所在的位置,否则输出no found
查看>>
万年历
查看>>
作为码农你希望面试官当场指出你错误么?有面试官这样遭到投诉!
查看>>
好多程序员都认为写ppt是很虚的技能,可事实真的是这样么?
查看>>
如果按照代码行数发薪水会怎样?码农:我能刷到公司破产!
查看>>
程序员失误造成服务停用3小时,只得到半月辞退补偿,发帖喊冤
查看>>
码农:很多人称我“技术”,感觉这是不尊重!纠正无果后果断辞职
查看>>
php程序员看过来,这老外是在吐糟你吗?看看你中了几点!
查看>>
为什么说程序员是“培训班出来的”就是鄙视呢?
查看>>
码农吐糟同事:写代码低调点不行么?空格回车键与你有仇吗?
查看>>
阿里p8程序员四年提交6000次代码的确有功,但一次错误让人唏嘘!
查看>>