POI读取加密的EXCEL(兼容XLS,XLSX格式)

最近项目里需要读取加密的excel,有xls和xlsx两种类型,对于加解密apache官方网站有简要说明

需要的jar包poi-3.9,jar    poi-ooxml-3.9.jar  poi-ooxml-schemas-3.9.jar   xmlbeans-2.3.0.jar  dom4j-1.6.1.jar

注意poi的3个jar版本号要对应,不然会有一些问题。

上代码咯~

    /**
     * Excel导入
     */
    @SuppressWarnings("unchecked")
    @RequestMapping(value = {"importExcel"})
    @ResponseBody
    public Result importExcel(@RequestParam(value = "ym")String ym,@RequestParam(value = "filedata")MultipartFile file){
    	int count=0;
        Result result = null;
        try {
            if (file != null) {

        		String password = "5151";
        		String fileName=file.getOriginalFilename();
        		String prefix = fileName.substring(fileName.lastIndexOf(".") + 1);
        		String yyyyMM=ym.replace("-", "");

        		Workbook workbook;
        		//解密excel
        		if (prefix.toUpperCase().equals("XLS")) {
        			org.apache.poi.hssf.record.crypto.Biff8EncryptionKey
        					.setCurrentUserPassword(password);
        			workbook = WorkbookFactory.create(file.getInputStream());
        			file.getInputStream().close();
        		} else {
//        		    POIFSFileSystem pfs = newPOIFSFileSystem(POIDataSamples.getPOIFSInstance().openResourceAsStream("**.xlsx"));
        			POIFSFileSystem pfs = new POIFSFileSystem(file.getInputStream());
        			file.getInputStream().close();
        			EncryptionInfo encInfo = new EncryptionInfo(pfs);
        			Decryptor decryptor = Decryptor.getInstance(encInfo);
        			decryptor.verifyPassword(password);
            	    workbook = new XSSFWorkbook(decryptor.getDataStream(pfs));//不支持2007+的EXCEL
            	 // XSSFWorkbook workbook = new XSSFWorkbook(decryptor.getDataStream(pfs));//支持2007+的EXCEL
        		}
                //读取excel数据
        		Sheet sheet = workbook.getSheetAt(0);	<span style="font-family: Arial, Helvetica, sans-serif;">//不支持2007+的EXCEL</span>
//	                XSSFSheet sheet = workbook.getSheetAt(0);	支持2007+的excel
时间: 2024-10-11 13:04:07

POI读取加密的EXCEL(兼容XLS,XLSX格式)的相关文章

Java使用POI读取和写入Excel指南

Java使用POI读取和写入Excel指南 做项目时经常有通过程序读取Excel数据,或是创建新的Excel并写入数据的需求: 网上很多经验教程里使用的POI版本都比较老了,一些API在新版里已经废弃,这里基于最新的Apache POI 4.0.1版本来总结一下整个读取和写入Excel的过程,希望能帮助到需要的人 ^_^ 1. 准备工作 1.1 在项目中引入Apache POI相关类库 引入 Apache POI 和 Apache POI-OOXML 这两个类库,Maven坐标如下: <depe

lucent检索技术之创建索引:使用POI读取txt/word/excel/ppt/pdf内容

在使用lucent检索文档时,必须先为各文档创建索引.索引的创建即读出文档信息(如文档名称.上传时间.文档内容等),然后再经过分词建索引写入到索引文件里.这里主要是总结下读取各类文档内容这一步. 一.之前做过一个小工具也涉及到读取word和excel内容,采用的是com组件的方式来读取.即导入COM库,引入命名空间(using Microsoft.Office.Interop.Word;using Microsoft.Office.Interop.Excel;),然后读代码如下: 读取word

java实现文件批量导入导出实例(兼容xls,xlsx)

1.介绍 java实现文件的导入导出数据库,目前在大部分系统中是比较常见的功能了,今天写个小demo来理解其原理,没接触过的同学也可以看看参考下. 目前我所接触过的导入导出技术主要有POI和iReport,poi主要作为一些数据批量导入数据库,iReport做报表导出.另外还有jxl类似poi的方式,不过貌似很久没跟新了,2007之后的office好像也不支持,这里就不说了. 2.POI使用详解 2.1 什么是Apache POI? Apache POI是Apache软件基金会的开放源码函式库,

phpexcel读取excel的xls xlsx csv格式

我之前写过一篇PHP读取csv文件的内容 上代码index.php <?php /** * * @author XC * */ class Excel { public $currentSheet; public $filePath; public $fileType; public $sheetIndex=0; public $allColumn; public $allRow; public function initialized($filePath) { if (file_exists(

关于jquery读取excel文件内容 xls xlsx格式

在一个项目中需要读取excel的内容,当然excel是有格式的,格式就是读取到的第一行会作为属性(Title) 例如如下excel Language Detil en English cn Chinese jp Japanese 该excel会解析成:方式1 当然也可以解析成:方式2 ///////////////////////////////////////////////////////////////////////////////////////////////////////////

Apache POI读取和创建Excel ----01(简单操作)

public class ExcelCreatAndRead { /**     * 使用Apache POI创建Excel文档     * */    public static void createXL(){        /**Excel文件要存放的位置,假定在D盘下*/        String outputFile="D:\\test.xlsx";        try {        //创建新的Excel工作薄        XSSFWorkbook workboo

java使用org.apache.poi读取与保存EXCEL文件

---恢复内容开始--- 一.读EXCEL文件 1 package com.ruijie.wis.cloud.utils; 2 3 import java.io.FileInputStream; 4 import java.io.FileNotFoundException; 5 import java.io.IOException; 6 import java.io.InputStream; 7 import java.text.DecimalFormat; 8 import java.util

POI读取Word与Excel

import java.io.BufferedWriter; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.File; import java.io.OutputStreamWriter; impo

java使用poi解析或处理excel的时候,如何防止数字变成科学计数法的形式和其他常见Excel中数据转换问题

当使用POI处理excel的时候,遇到了比较长的数字,虽然excel里面设置该单元格是文本类型的,但是POI的cell的类型就会变成数字类型. 而且无论数字是否小数,使用cell.getNumbericCellValue() 去获取值的时候,会得到一个double,而且当长度大一点的时候会变成科学计数法形式. 那么获取这个单元格的原始的数据,就其实是一个double怎么转换成整数的问题了. 使用DecimalFormat对这个double进行了格式话,随后使用format方法获得的String就