试了好几种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并带加密模板的技术主要包括选择合适的库(如EPPlus)、读写Excel单元格、数据转换、文件加密解密以及用户交互设计。在开发过程中,应注重性能、安全性和用户体验,确保功能的稳定和...
NPOIdll Excel设置密码导出 s先新建一个excel得空模板注意不要加密 再用这个方法workbook.WriteProtectWorkbook(Password, "");//设置加密密码
8. **安全性**:为保护数据,可以加密Excel文件或限制打开权限。同时,需要注意避免敏感信息的泄露,比如使用哈希函数处理敏感数据。 9. **自定义导出选项**:用户可能需要选择导出特定列、筛选条件或自定义导出...
C# 读取加密的Excel 文件; 有源码,VS2010开发。 采用的是微软的Microsoft.Office.Interop.Excel, V14.0,来读取加密后的Excle文件。 不是采用第三方控件NPOI读取加密的Excel文件。 开始研究NPOI读取加密的Excel文件...
当我们谈论“poi excel加密”时,这通常是指使用Apache POI来处理加密的Excel文件。Excel文件可以被加密以保护其内容不被未经授权的用户访问,而Apache POI提供了API来支持这种操作。 首先,我们需要了解Excel文件...
### POI的EXCEL导出,自动换行 在日常工作中,经常需要处理大量的数据导入导出任务,尤其是在企业级应用开发中,Excel文件的处理成为了一项必不可少的能力。Apache POI项目提供了一系列用于读写Microsoft Office...
"多个Excel导出压缩成zip文件"的场景通常是为了解决数据量过大导致的文件管理不便、传输效率低以及存储空间占用过多等问题。下面我们将深入探讨这个话题,主要涵盖以下几个方面: 1. **大数据量导出**: - 当数据...
### SQL导出EXCEL(带表头)的存储过程详解 在日常的数据库管理与数据分析工作中,将数据从SQL数据库导出至Excel是常见的需求之一。尤其当涉及到大量的数据处理时,一个能够自动生成带有表头的Excel文件的存储过程...
使用该JAR包,能够给EXCEL直接加密,弹出对话框,输入正确密码,才能进入 方法: View m_view = new View(); m_view.read(inputExcelFile.getAbsolutePath()); m_view.editCopyRight(); m_view.write(outputExcel...
"excel导出导入示例,导出导入的模板自定义"这个主题主要涉及到如何利用编程或者自动化的方式,从系统或应用中导出数据到Excel文件,并且能够根据需求定制导入和导出的模板。下面将详细探讨这两个关键知识点。 首先...
java 导出数据到excel 之 WritableWorkbook
在Android平台上,对txt或excel文件进行加密解密是保护数据安全的重要手段。这涉及到信息安全领域,特别是当处理敏感信息时,确保数据不被未经授权的人员访问至关重要。本项目通过提供的MainActivity.java、Util....
6. **安全性控制**: 在敏感数据的处理上,需要确保只有授权用户才能执行导入导出操作,并且在传输过程中要加密数据,防止数据泄露。 7. **自定义配置**: 用户可能需要根据具体需求定制导入导出的规则,如特定字段的...
这可能需要对导出的文件进行加密、隐藏或删除不必要的列。 9. **模板版本控制**:随着需求变更,模板可能需要更新。因此,有效的版本控制系统可以帮助管理不同版本的模板,便于追溯和协同。 10. **自动化流程**:...
3. **快速导出到Excel**:在Access中,你可以通过“外部数据”菜单选择“Excel”选项来快速导出数据。只需选择要导出的表,设置导出范围(全表或特定查询结果),然后指定保存的Excel文件路径和格式,即可完成导出。...
避免导出敏感信息,使用加密或权限控制保护工作簿,确保数据在传输和存储过程中的安全性。 总结来说,"excel导入导出.rar"这个压缩包可能涵盖了Excel数据导入导出的基本方法、ASP与数据库交互的技术,以及可能的...
标题中的"NPOI iTextSharp导出Excel并加水印源码"涉及到两个主要的开源库:NPOI和iTextSharp,它们都是在.NET环境中处理文档的强大工具。NPOI主要用于读写Microsoft Office格式的文件,如Excel,而iTextSharp则用于...
Excel导入导出插件是一种工具,它扩展了Excel的功能,使得用户能够方便地从电子表格中导入数据到其他系统,或者从外部数据源导出数据到Excel进行分析和处理。这种插件通常用于数据迁移、数据整合或数据分析,特别是...
档案系统文档Excel导出与附件抛到本地是一个常见的IT应用场景,尤其在企业级的信息管理和办公自动化系统中。这里主要涉及的技术点包括 Domino Lotus 数据库、Excel 导出、以及附件管理。 1. **Domino Lotus 数据库*...
KeyTool在这里可能指的是Java开发中的一个工具,它主要用于处理和管理Java密钥对,与Excel导出看似无关,但可能在某些场景下结合使用,例如在数据安全或数据交换上下文中。 首先,我们来详细了解一下“导出Excel”...