`

excel 导出 (带加密)

阅读更多

试了好几种excell导出,jxcell导出加密是成功的。poi的加密只支持2003版的。

参考地址:

http://blog.csdn.net/opzoonzhuzhengke/article/details/7255309

http://blog.csdn.net/opzoonzhuzhengke/article/details/7256870

http://blog.csdn.net/opzoonzhuzhengke/article/details/7257869

http://blog.csdn.net/opzoonzhuzhengke/article/details/7263392

http://blog.csdn.net/opzoonzhuzhengke/article/category/1076971

http://blog.csdn.net/opzoonzhuzhengke/article/details/7265050

http://blog.csdn.net/opzoonzhuzhengke/article/details/7265225

 

1.引入依赖包  pom.xml

              <dependency>
		  <groupId>org.juxinli.jxcell</groupId>
		  <artifactId>jxcell</artifactId>
		  <version>V1.0.0.01</version>
		</dependency>

 

2. 实现Tool_jxcell

   

package com.chengshu.tool;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Calendar;

import org.apache.log4j.Logger;

import com.jxcell.CellException;
import com.jxcell.CellFormat;
import com.jxcell.ConditionFormat;
import com.jxcell.View;

/**
 * @author 张彦
 * @email: 522378972@qq.com
 * @date 创建时间:2016年7月14日 下午5:05:07
 * @version 1.0
 */
public class Tool_jxcell {
    private static final Logger LOG = Logger.getLogger(Tool_jxcell.class.getName());

    /**
     * 读取excel,并进行加密
     * 
     * @param url
     *            excel文件路径 例:D:\\word.xls
     * @param pwd
     *            加密密码
     * @throws Exception 
     */
    public static void encrypt(String path, String pwd) throws Exception {
        View view = new View();
        try {
            view.setText(0, 0, "机构");
            view.setText(0, 1, "aa贷");
            view.setText(0, 2, "时间区间");
            view.setText(0, 3, "从"+SimpleDateFormat.getInstance().format(Calendar.getInstance().getTime())+"到"+SimpleDateFormat.getInstance().format(Calendar.getInstance().getTime()));
            view.setText(1, 0, "下载日期");
            view.setText(1, 1, SimpleDateFormat.getInstance().format(Calendar.getInstance().getTime()));
            view.setText(1, 2, "评分区间");
            view.setText(1, 3, "80-90");
            view.setText(2, 0, "");
            view.setText(2, 1, "");
            view.setColWidth(2, 36*256);
            view.setText(2, 0, "概述");
            CellFormat cfmt = view.getCellFormat();
            view.setSelection(2, 0, 4, 0); //从第几行开始合并,从第几列开始合并,合并到第几行,合并到第几列 
            cfmt = view.getCellFormat();  
            cfmt.setMergeCells(true);  
            view.setCellFormat(cfmt);  
            view.setText(2, 1, "具体内容放在这里,房价大幅降低萨芬的萨芬。。。。。。。。");
            view.setSelection(2, 1, 4, 9); //从第几行开始合并,从第几列开始合并,合并到第几行,合并到第几列 
            cfmt = view.getCellFormat();  
            cfmt.setMergeCells(true);  
            view.setCellFormat(cfmt);  
            for(int i=0;i<100; i++){
                for(int j = 0 ; j<10 ;j++){
                    view.setText(i+4, j, i+4+","+j);
                }
            }
            //设置宽和高
//            view.setText(3,1,"你倒是出来呀 你到是~~~~~");           
//            view.setColWidth(3, 36*256);  
//            view.setRowHeight(3, 120*20);  
// 
//            //倾斜
//            CellFormat rangeStyle = view.getCellFormat();  
//            rangeStyle.setOrientation((short)45);  
//            view.setCellFormat(rangeStyle);  
//            
//          //multi text selection format  
//            view.setTextSelection(0, 6);  
//            cfmt.setFontItalic(true);  
//            cfmt.setFontColor(Color.BLUE.getRGB());  
//            view.setCellFormat(cfmt);  
//            
//            view.setTextSelection(7, 10);  
//            cfmt = view.getCellFormat();  
//            cfmt.setFontBold(true);  
//            cfmt.setFontSize(16*20);  
//            view.setCellFormat(cfmt); 
//            
//            view.setTextSelection(11, 13);  
//            cfmt = view.getCellFormat();  
//            cfmt.setFontUnderline(CellFormat.UnderlineSingle);  
//            cfmt.setFontColor(Color.GREEN.getRGB());  
//            view.setCellFormat(cfmt);  
//            
//            String text = "Hello, you are welcome!";  
//            view.setTextSelection(14, text.length()-1);  
//            cfmt = view.getCellFormat();  
//            cfmt.setFontSize(14*20);  
//            view.setCellFormat(cfmt);  
            
            view.write(path, pwd);
            
        } catch (CellException e) {
            LOG.error("加密失败!", e);
        } catch (IOException e) {
            LOG.error("写入excell错误!", e);
        }
    }

    /**
     * excel 解密
     * 
     * @return void
     * @author lifq
     * @date 2015-3-13 下午02:15:49
     */
    public static void decrypt(String url, String pwd) {
        View view = new View();
        // read the encrypted excel file
        try {
            view.read(url, pwd);
        } catch (IOException e) {
            LOG.error("读取excell错误!", e);
        } catch (CellException e) {
            LOG.error("解密失败!", e);
        }
    }

    private static void test() {
        View m_view = new View();
        try {
            // m_view.getLock();
            ConditionFormat condfmt[] = new ConditionFormat[3];
            condfmt[0] = m_view.CreateConditionFormat();
            condfmt[1] = m_view.CreateConditionFormat();
            condfmt[2] = m_view.CreateConditionFormat();

            // Condition #1
            CellFormat cf = condfmt[0].getCellFormat();
            // condfmt[0].setType(ConditionFormat.TypeFormula);
            // condfmt[0].setFormula1("and(iseven(row()), $D1 > 1000)", 0, 0);
            cf.setFontColor(0x0D8427);
            cf.setPattern((short) 1);
            cf.setPatternFG(0x0D8427);
            condfmt[0].setCellFormat(cf);

            // Condition #2
            // condfmt[1].setType(ConditionFormat.TypeFormula);
            // cf.setFontColor(0xffffff);
            condfmt[1].setCellFormat(cf);

            // Condition #3
            // condfmt[2].setType(ConditionFormat.TypeCell);
            // condfmt[2].setFormula1("500", 0, 0);
            // condfmt[2].setOperator(ConditionFormat.OperatorGreaterThan);
            // cf=condfmt[2].getCellFormat();
            // cf.setFontColor(0xff0000);
            // condfmt[2].setCellFormat(cf);

            // Select the range and apply conditional formatting
            m_view.setSelection(0, 0, 39, 3);
            m_view.setConditionalFormats(condfmt);

            m_view.write("./sonditionFormats.xls");
            com.jxcell.designer.Designer.newDesigner(m_view);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            m_view.releaseLock();
        }
    }

    public static void main(String args[]) {
        // 下面1与2 两个方法请分开执行,可以看到效果
        //
        // 1. 把g:\\test.xls 添加打开密码123
         try {
            Tool_jxcell.encrypt("E:\\test.xls", "123");
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        // 2. 把g:\\test.xls 密码123 去除
        // Tool_jxcell.decrypt("E:\\test.xls", "111");
        // test();
//        test1();
    }

    public static void test1() {
        try {
            View m_view = new View();
            try {
                m_view.getLock();
                ConditionFormat condfmt[] = new ConditionFormat[1];
                condfmt[0] = m_view.CreateConditionFormat();

                // Condition #1
                CellFormat cf = condfmt[0].getCellFormat();
                condfmt[0].setType(ConditionFormat.TypeCell);
//                condfmt[0].setFormula1("and(iseven(row()), $D1 > 1000)", 0, 0);
                cf.setFontColor(0x00ff00); //白
                cf.setPattern((short) 1);
                cf.setPatternFG(0x99ccff); //蓝色
                condfmt[0].setCellFormat(cf);

                // Condition #2
//                condfmt[1].setType(ConditionFormat.TypeFormula);
//                condfmt[1].setFormula1("iseven($A1)", 0, 0);
//                cf.setFontColor(0xffffff);//黑色
//                condfmt[1].setCellFormat(cf);

                // Condition #3
//                condfmt[2].setType(ConditionFormat.TypeCell);
//                condfmt[2].setFormula1("500", 0, 0);
//                condfmt[2].setOperator(ConditionFormat.OperatorGreaterThan);
//                cf = condfmt[2].getCellFormat();
//                cf.setFontColor(0xff0000); //红色
//                condfmt[2].setCellFormat(cf);

                // Select the range and apply conditional formatting
                m_view.setSelection(0, 0, 39, 3);
                m_view.setConditionalFormats(condfmt);

                m_view.write("E:\\conditionFormats.xls");
                com.jxcell.designer.Designer.newDesigner(m_view);
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                m_view.releaseLock();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

 

3.调用导出并下载

package com.chengshu.controller;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.chengshu.tool.Tool_jxcell;

/** 
 * @author  张彦
 * @email: zhangyan1@juxinli.com
 * @date 创建时间:2016年7月21日 下午6:19:28 
 * @version 1.0  
 */
@RestController
@RequestMapping(value = "/download")
public class DownLoadExcell {
    private static final Logger LOG = Logger.getLogger(DownLoadExcell.class.getName());
    
    @RequestMapping(value = "/monthlyData")
    public void download(HttpServletRequest request,HttpServletResponse response){
        String filePath = request.getServletContext().getRealPath("/").concat("/tmp/");
        System.out.println("filePath "+filePath);
        String fileName= "text.xls";
        try {
            Tool_jxcell.encrypt(filePath.concat(fileName), "123");
        } catch (Exception e1) {
            LOG.error("导出加密excell失败",e1);
        }
        try {
            File file = new File(filePath.concat(fileName));//根据文件路径获得File文件
            //设置文件类型
            response.setContentType("application/msexcel;charset=UTF-8");
            //文件名
            response.setHeader("Content-Disposition", "attachment;filename="+new String(fileName.getBytes(), "UTF-8"));
            response.setContentLength((int) file.length());
            
            byte[] buffer = new byte[4096];// 缓冲区
            BufferedOutputStream output = null;
            BufferedInputStream input = null;
            try {
                output = new BufferedOutputStream(response.getOutputStream());
                input = new BufferedInputStream(new FileInputStream(file));
                int n = -1;
                //遍历,开始下载
                while ((n = input.read(buffer, 0, 4096)) > -1) {
                    output.write(buffer, 0, n);
                }
                output.flush();   //不可少
                response.flushBuffer();//不可少
            } catch (Exception e) {
                //异常自己捕捉     
                LOG.error("导出失败");
            } finally {
                //关闭流,不可少
                if (input != null)
                    input.close();
                if (output != null)
                   output.close();
                file.delete();//删除文件,以免占用服务器空间
            }
        } catch (Exception e) {
            LOG.error("导出失败",e);
        }
    }
}

 

 

分享到:
评论

相关推荐

    .net实现导入导出excel,带加密模板

    总结来说,.NET实现导入导出Excel并带加密模板的技术主要包括选择合适的库(如EPPlus)、读写Excel单元格、数据转换、文件加密解密以及用户交互设计。在开发过程中,应注重性能、安全性和用户体验,确保功能的稳定和...

    NPOIExcel设置密码导出.txt

    NPOIdll Excel设置密码导出 s先新建一个excel得空模板注意不要加密 再用这个方法workbook.WriteProtectWorkbook(Password, "");//设置加密密码

    导出Excel功能,导出Excel功能,导出Excel功能

    8. **安全性**:为保护数据,可以加密Excel文件或限制打开权限。同时,需要注意避免敏感信息的泄露,比如使用哈希函数处理敏感数据。 9. **自定义导出选项**:用户可能需要选择导出特定列、筛选条件或自定义导出...

    C#读取加密Excel文件

    C# 读取加密的Excel 文件; 有源码,VS2010开发。 采用的是微软的Microsoft.Office.Interop.Excel, V14.0,来读取加密后的Excle文件。 不是采用第三方控件NPOI读取加密的Excel文件。 开始研究NPOI读取加密的Excel文件...

    poi excel加密

    当我们谈论“poi excel加密”时,这通常是指使用Apache POI来处理加密的Excel文件。Excel文件可以被加密以保护其内容不被未经授权的用户访问,而Apache POI提供了API来支持这种操作。 首先,我们需要了解Excel文件...

    POI的EXCEL导出,自动换行

    ### POI的EXCEL导出,自动换行 在日常工作中,经常需要处理大量的数据导入导出任务,尤其是在企业级应用开发中,Excel文件的处理成为了一项必不可少的能力。Apache POI项目提供了一系列用于读写Microsoft Office...

    多个excel导出压缩成zip 文件 数据量大导出

    "多个Excel导出压缩成zip文件"的场景通常是为了解决数据量过大导致的文件管理不便、传输效率低以及存储空间占用过多等问题。下面我们将深入探讨这个话题,主要涵盖以下几个方面: 1. **大数据量导出**: - 当数据...

    SQL导出EXCEL(带表头)的存储过程

    ### SQL导出EXCEL(带表头)的存储过程详解 在日常的数据库管理与数据分析工作中,将数据从SQL数据库导出至Excel是常见的需求之一。尤其当涉及到大量的数据处理时,一个能够自动生成带有表头的Excel文件的存储过程...

    使用java直接给EXCEL文件加密

    使用该JAR包,能够给EXCEL直接加密,弹出对话框,输入正确密码,才能进入 方法: View m_view = new View(); m_view.read(inputExcelFile.getAbsolutePath()); m_view.editCopyRight(); m_view.write(outputExcel...

    excel导出导入示例,导出导入的模板自定义

    "excel导出导入示例,导出导入的模板自定义"这个主题主要涉及到如何利用编程或者自动化的方式,从系统或应用中导出数据到Excel文件,并且能够根据需求定制导入和导出的模板。下面将详细探讨这两个关键知识点。 首先...

    java 导出数据到excel 之 WritableWorkbook

    java 导出数据到excel 之 WritableWorkbook

    Android 加密解密文件 txt/excel文件

    在Android平台上,对txt或excel文件进行加密解密是保护数据安全的重要手段。这涉及到信息安全领域,特别是当处理敏感信息时,确保数据不被未经授权的人员访问至关重要。本项目通过提供的MainActivity.java、Util....

    普元导入导出用于Excel导入导出

    6. **安全性控制**: 在敏感数据的处理上,需要确保只有授权用户才能执行导入导出操作,并且在传输过程中要加密数据,防止数据泄露。 7. **自定义配置**: 用户可能需要根据具体需求定制导入导出的规则,如特定字段的...

    Excel模板导出(针对复杂模板情况)

    这可能需要对导出的文件进行加密、隐藏或删除不必要的列。 9. **模板版本控制**:随着需求变更,模板可能需要更新。因此,有效的版本控制系统可以帮助管理不同版本的模板,便于追溯和协同。 10. **自动化流程**:...

    access快速导出excel

    3. **快速导出到Excel**:在Access中,你可以通过“外部数据”菜单选择“Excel”选项来快速导出数据。只需选择要导出的表,设置导出范围(全表或特定查询结果),然后指定保存的Excel文件路径和格式,即可完成导出。...

    excel导入导出.rar

    避免导出敏感信息,使用加密或权限控制保护工作簿,确保数据在传输和存储过程中的安全性。 总结来说,"excel导入导出.rar"这个压缩包可能涵盖了Excel数据导入导出的基本方法、ASP与数据库交互的技术,以及可能的...

     NPOI iTextSharp导出Excel并加水印源码.rar

    标题中的"NPOI iTextSharp导出Excel并加水印源码"涉及到两个主要的开源库:NPOI和iTextSharp,它们都是在.NET环境中处理文档的强大工具。NPOI主要用于读写Microsoft Office格式的文件,如Excel,而iTextSharp则用于...

    excel 导入导出插件

    Excel导入导出插件是一种工具,它扩展了Excel的功能,使得用户能够方便地从电子表格中导入数据到其他系统,或者从外部数据源导出数据到Excel进行分析和处理。这种插件通常用于数据迁移、数据整合或数据分析,特别是...

    档案系统文档excel导出、将附件抛到本地

    档案系统文档Excel导出与附件抛到本地是一个常见的IT应用场景,尤其在企业级的信息管理和办公自动化系统中。这里主要涉及的技术点包括 Domino Lotus 数据库、Excel 导出、以及附件管理。 1. **Domino Lotus 数据库*...

    导出excel

    KeyTool在这里可能指的是Java开发中的一个工具,它主要用于处理和管理Java密钥对,与Excel导出看似无关,但可能在某些场景下结合使用,例如在数据安全或数据交换上下文中。 首先,我们来详细了解一下“导出Excel”...

Global site tag (gtag.js) - Google Analytics