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>创建时间: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>创建时间: 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>创建时间: 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>