java(POI):基于模版的Excel导出功能,局部列写保护总结
需求描述:
1.导出的Excel中部分列包含有下拉列表,并没有尝试过用代码实现这种功能,个人感觉比较棘手,故采用了模版的形式,直接导出数据到已经创建好的Excel模版中
2.Excel的第一列需要写保护,不允许用户修改
3.每一个大类导出到以大类名称命名的Excel中,连同各个对象对应的附件一同拷贝到同Excel的相同目录,然后压缩,下载
4.下载完成后删除该压缩文件,避免垃圾文件过多
public String doDownloadDatas() {
String fileStr = null;
String ms = String.valueOf(System.currentTimeMillis());//以时间戳创建一个临时文件夹
try {// 获取指定的文件
UserManager userManager = (UserManager)SpringHelper.getBean("userManager");//获取当前登录人信息
UserDTO user = userManager.getCurrentUserInfo();
String orgCode = user.getOrgCode();//"ORG00002";// 当前用户所属组织编码
String orgName = user.getOrgName();//"勘探与生产分公司";// 当前用户所属组织名称
List<PrimaryAllot> dataList = this.getMaterialKinds(orgCode);
if (dataList != null && dataList.size() > 0) {
for (int i = 0; i < dataList.size(); i++) {
PrimaryAllot pa = dataList.get(i);
String materialName = pa.getMaterialName();
String materialCode = pa.getMaterialCode();
// 获取指定的模版文档
// Java Excel API既可以从本地文件系统的一个文件(.xls),也可以从输入流中读取Excel数据表。
// 构建Workbook对象, 只读Workbook对象
// 直接从本地文件创建Workbook
// 从输入流创建Workbookx
// String filePath = this.getClass().getResource("/conf/standartInformationReport.xls").getPath();
//获取文件路径,该方法只在windows环境下好使,但是部署到linux服务器上时报FileNotFoundException // FileInputStream fs=new FileInputStream(filePath);
// 因此修改成如下的方式,可以在Linux和Windows系统中获取到该文件的路径
InputStream fs=this.getClass().getClassLoader().getResourceAsStream("conf/standartInformationReport.xls");
HSSFWorkbook wb=new HSSFWorkbook(fs);
// wb.writeProtectWorkbook("pmsapp", "pmsapp");//写保护操作,下载下来以后,打开Excel文件时所用的 用户名密码都是“pmsapp”
HSSFSheet sheet=wb.getSheetAt(1); //System.out.println(sheet.getLastRowNum()+" "+row.getLastCellNum());
//创建临时目录
String key = "file.root";
String root = PMSPropertyUtil.getValueOfProperties(key);
String tempPath = root + File.separator+"tempprimaryfile" + File.separator + ms + File.separator;
File tempFile = new File(tempPath);
if (!tempFile.exists()) {
tempFile.mkdirs();
}
FileOutputStream out=new FileOutputStream(tempPath+orgName+"_"+materialName+".xls"); // List objList = this.getDatas(orgCode,materialCode); //这个是从数据库中取得要导出的数据
// int m = 4;//从第五行、第一列开始写入数据
// for (int j = 0; j < objList.size(); j++) {
// HSSFRow row=sheet.getRow(m);
// Object[] objs=(Object[])objList.get(j);
// for (int n = 0; n<19; n++) {
// row.getCell((short)n).setCellValue(objs[n]==null||"null".equals(objs[n])?"":objs[n].toString());
// }
// m++;
// }
List<StandardChooseAdvise> objList = this.getDatas(orgCode,materialCode); //这个是从数据库中取得要导出的数据
int m = 4;//从第五行、第一列开始写入数据
for (int j = 0; j < objList.size(); j++) {
HSSFRow row=sheet.createRow(m);
CellStyle locked = wb.createCellStyle();
locked.setLocked(true);
StandardChooseAdvise objs=(StandardChooseAdvise)objList.get(j);
for (int n = 0; n<19; n++) {
row.createCell((short)0).setCellValue(objs.getId()==null||"null".equals(objs.getId())?"":objs.getId().toString());//序号
row.getCell((short)0).setCellStyle(locked);//锁定该表格
row.createCell((short)1).setCellValue(objs.getItem().getNodeCode()==null||"null".equals(objs.getItem().getNodeCode())?"":objs.getItem().getNodeCode());//物料分类
row.createCell((short)2).setCellValue(objs.getItem().getNodeName()==null||"null".equals(objs.getItem().getNodeName())?"":objs.getItem().getNodeName());//物料分类描述
String standardSort = objs.getStandardSort()==null||"null".equals(objs.getStandardSort())?"":objs.getStandardSort();
if(standardSort.length()>0){
standardSort = "";
}else if ("00001".equals(standardSort)) {
standardSort="国际标准";
}else if ("00002".equals(standardSort)) {
standardSort="国外先进标准";
}else if ("00003".equals(standardSort)) {
standardSort="国家标准";
}else if ("00004".equals(standardSort)) {
standardSort="行业标准";
}else if ("00005".equals(standardSort)) {
standardSort="地方标准";
}else if ("00006".equals(standardSort)) {
standardSort="集团公司企业标准";
}else if ("00007".equals(standardSort)) {
standardSort="外部企业标准";
}else if ("00008".equals(standardSort)) {
standardSort="内部企业订货条件及技术规格书";
}
row.createCell((short)3).setCellValue(standardSort);//标准信息标准分类
row.createCell((short)4).setCellValue(objs.getStandardNO()==null||"null".equals(objs.getStandardNO())?"":objs.getStandardNO());//标准信息标准代号
row.createCell((short)5).setCellValue(objs.getStandardOrderNO()==null||"null".equals(objs.getStandardOrderNO())?"":objs.getStandardOrderNO());//标准信息标准顺序号
row.createCell((short)6).setCellValue(objs.getPublicNO()==null||"null".equals(objs.getPublicNO())?"":objs.getPublicNO());//标准信息发布年代号
row.createCell((short)7).setCellValue(objs.getStandardName()==null||"null".equals(objs.getStandardName())?"":objs.getStandardName());//标准信息标准名称
row.createCell((short)8).setCellValue(objs.getUsedStandardNO()==null||"null".equals(objs.getUsedStandardNO())?"":objs.getUsedStandardNO());//采标情况标准代号
row.createCell((short)9).setCellValue(objs.getUsedStandardOrderNO()==null||"null".equals(objs.getUsedStandardOrderNO())?"":objs.getUsedStandardOrderNO());//采标情况标准顺序号
row.createCell((short)10).setCellValue(objs.getUsedPublicNO()==null||"null".equals(objs.getUsedPublicNO())?"":objs.getUsedPublicNO());//采标情况发布年代号
row.createCell((short)11).setCellValue(objs.getUsedStandardName()==null||"null".equals(objs.getUsedStandardName())?"":objs.getUsedStandardName());//采标情况标准名称
row.createCell((short)12).setCellValue(objs.getUsedInTheDefree()==null||"null".equals(objs.getUsedInTheDefree())?"":objs.getUsedInTheDefree());//采标程度
row.createCell((short)13).setCellValue(objs.getOuterCompanyName()==null||"null".equals(objs.getOuterCompanyName())?"":objs.getOuterCompanyName());//外部企业名称
String haveRecode = objs.getHaveRecord()==null||"null".equals(objs.getHaveRecord())?"":objs.getHaveRecord();
if(haveRecode.length()>0){
haveRecode = "";
}else if ("00001".equals(haveRecode)) {
haveRecode="是";
}else if ("00002".equals(haveRecode)) {
haveRecode="否";
}
row.createCell((short)14).setCellValue(haveRecode);//是否在当地技术监督部门备案
String outerAttachment = objs.getOuterAttachment()==null||"null".equals(objs.getOuterAttachment())?"":objs.getOuterAttachment();
if(outerAttachment.length()>0){
outerAttachment = "";
}else if ("00001".equals(outerAttachment)) {
outerAttachment="是";
}else if ("00002".equals(outerAttachment)) {
outerAttachment="否";
}
row.createCell((short)15).setCellValue(outerAttachment);//外部企业标准附件
String hasAttr = objs.getHasAttr()==null||"null".equals(objs.getHasAttr())?"":objs.getHasAttr();
if(hasAttr.length()>0){
hasAttr = "";
}else if ("00001".equals(hasAttr)) {
hasAttr="是";
}else if ("00002".equals(hasAttr)) {
hasAttr="否";
}
row.createCell((short)16).setCellValue(hasAttr);//内部技术规格书附件
row.createCell((short)17).setCellValue(objs.getBigorg()==null||"null".equals(objs.getBigorg())?"":objs.getBigorg());//提报单位
row.createCell((short)18).setCellValue(objs.getCountAdvice()==null||"null".equals(objs.getCountAdvice())?"":objs.getCountAdvice());//所属企业创编意见数量
}
m++;
}
sheet.protectSheet("123");//dui
out.flush();
wb.write(out);
out.close();
}
fileStr = queryAllFiles(dataList,ms);
}
} catch (Exception e) {
fileStr = "导出失败,请联系管理员!";
e.printStackTrace();
}
return fileStr;//如果导出成功则为压缩包路径,否则为空值
}
待续中……
java(POI):基于模版的Excel导出功能,局部列写保护总结的更多相关文章
- Atitit.excel导出 功能解决方案 php java C#.net版总集合.doc
Atitit.excel导出 功能解决方案 php java C#.net版总集合.docx 1.1. Excel的保存格式office2003 office2007/2010格式1 1.2. 类库选 ...
- 用SpringMvc实现Excel导出功能
以前只知道用poi导出Excel,最近用了SpringMvc的Excel导出功能,结合jxl和poi实现,的确比只用Poi好,两种实现方式如下: 一.结合jxl实现: 1.引入jxl的所需jar包: ...
- SpringBoot加Poi仿照EasyPoi实现Excel导出
POI提供API给Java程序对Microsoft Office格式档案读和写的功能,详细功能可以直接查阅API,因为使用EasyPoi过程中总是缺少依赖,没有搞明白到底是什么坑,索性自己写一个简单工 ...
- excel导出功能优化
先说说优化前,怎么做EXCEL导出功能的: 1. 先定义一个VO类,类中的字段按照EXCEL的顺序定义,并且该类只能用于EXCEL导出使用,不能随便修改. 2. 将查询到的结果集循环写入到这个VO类中 ...
- Java常用工具类之Excel导出
package com.wazn.learn.util; import java.util.List; import java.util.Map; import org.apache.poi.hssf ...
- 并发编程概述 委托(delegate) 事件(event) .net core 2.0 event bus 一个简单的基于内存事件总线实现 .net core 基于NPOI 的excel导出类,支持自定义导出哪些字段 基于Ace Admin 的菜单栏实现 第五节:SignalR大杂烩(与MVC融合、全局的几个配置、跨域的应用、C/S程序充当Client和Server)
并发编程概述 前言 说实话,在我软件开发的头两年几乎不考虑并发编程,请求与响应把业务逻辑尽快完成一个星期的任务能两天完成绝不拖三天(剩下时间各种浪),根本不会考虑性能问题(能接受范围内).但随着工 ...
- 利用Aspose.Cells完成easyUI中DataGrid数据的Excel导出功能
我准备在项目中实现该功能之前,google发现大部分代码都是利用一般处理程序HttpHandler实现的服务器端数据的Excel导出,但是这样存在的问题是ashx读取的数据一般都是数据库中视图的数据, ...
- excel导出功能原型
本篇博客是记录自己实现的excel导出功能原型,下面我将简单介绍本原型: 这是我自制的窗体,有一个ListView和一个Button(导出)控件. 这是我在网上找到了使用exel需要引用的库. usi ...
- java利用EasyPoi实现Excel导出功能
easypoi功能如同名字easy,主打的功能就是容易,让一个没见接触过poi的人员 就可以方便的写出Excel导出,Excel模板导出,Excel导入,Word模板导出,通过简单的注解和模板 语言( ...
随机推荐
- jQuery Ajax 方法调用 Asp.Net WebService 以及调用aspx.cs中方法的详细例子
一.jQuery Ajax 方法调用 Asp.Net WebService (引自Terry Feng) Html文件 <!DOCTYPE html PUBLIC "-//W3C//D ...
- C#托管代码与C++非托管代码互相调用
http://www.cnblogs.com/Jianchidaodi/archive/2009/03/11/1407270.html#1473515 http://www.cnblogs.com/J ...
- linux下安装mysql数据库与相关操作
如下命令都是用root身份安装,或者在命令前加上sudo 采用yum安装方式安装 yum install mysql #安装mysql客户端 yum install mysql-server #安装m ...
- C语言小技巧
/* 求阶乘时设置最大调用层数,防止栈占满 当从函数进入另一个函数时当前函数的内容会入栈,另一个函数调用完时在出栈 */ int factorial(int n, int level) { //pri ...
- 【JavaScript】JavaScript模拟Class
beauty("$Class",["$underscore"],function(_){ var Class = function () { var lengt ...
- 转-安卓中实现两端对齐,中间fill_parent的方法
安卓中实现两端对齐,中间fill_parent的方法 Java代码: <?xml version="1.0″ encoding="utf-8″?> <Line ...
- Java多线程之新类库中的构件DelayQueue
DelayQueue 是一个无界的BlockingQueue,用于放置实现了Delayed接口的对象,其中的对象只能在其到期时才能从队列中取走.这种队列是有序的,即队头对象的延迟到期时间最长.注意:不 ...
- nvl
NVL是Oracle PL/SQL中的一个函数.它的格式是NVL( string1, replace_with).它的功能是如果string1为NULL,则NVL函数返回replace_with的值, ...
- 微信JSSDK上传多张图片
之前是使用for循环实现的,但是安卓手机没有问题,苹果手机只能上传最后一张图片. 好在有高手在前面趟路,实用的循环调用.苹果是没有,安卓不清楚.以下内容转自:http://leo108.com/pid ...
- ppm与mg/m3转换
http://wenku.baidu.com/link?url=PY0Nb09VWmBDZgLvMhaHYGJyaC6YcdYAI5XTPRkxMpDHPrs3dNxskYkKmp2F0E6Sl2H5 ...