需求描述:

  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导出功能,局部列写保护总结的更多相关文章

  1. Atitit.excel导出 功能解决方案 php java C#.net版总集合.doc

    Atitit.excel导出 功能解决方案 php java C#.net版总集合.docx 1.1. Excel的保存格式office2003 office2007/2010格式1 1.2. 类库选 ...

  2. 用SpringMvc实现Excel导出功能

    以前只知道用poi导出Excel,最近用了SpringMvc的Excel导出功能,结合jxl和poi实现,的确比只用Poi好,两种实现方式如下: 一.结合jxl实现: 1.引入jxl的所需jar包: ...

  3. SpringBoot加Poi仿照EasyPoi实现Excel导出

    POI提供API给Java程序对Microsoft Office格式档案读和写的功能,详细功能可以直接查阅API,因为使用EasyPoi过程中总是缺少依赖,没有搞明白到底是什么坑,索性自己写一个简单工 ...

  4. excel导出功能优化

    先说说优化前,怎么做EXCEL导出功能的: 1. 先定义一个VO类,类中的字段按照EXCEL的顺序定义,并且该类只能用于EXCEL导出使用,不能随便修改. 2. 将查询到的结果集循环写入到这个VO类中 ...

  5. Java常用工具类之Excel导出

    package com.wazn.learn.util; import java.util.List; import java.util.Map; import org.apache.poi.hssf ...

  6. 并发编程概述 委托(delegate) 事件(event) .net core 2.0 event bus 一个简单的基于内存事件总线实现 .net core 基于NPOI 的excel导出类,支持自定义导出哪些字段 基于Ace Admin 的菜单栏实现 第五节:SignalR大杂烩(与MVC融合、全局的几个配置、跨域的应用、C/S程序充当Client和Server)

    并发编程概述   前言 说实话,在我软件开发的头两年几乎不考虑并发编程,请求与响应把业务逻辑尽快完成一个星期的任务能两天完成绝不拖三天(剩下时间各种浪),根本不会考虑性能问题(能接受范围内).但随着工 ...

  7. 利用Aspose.Cells完成easyUI中DataGrid数据的Excel导出功能

    我准备在项目中实现该功能之前,google发现大部分代码都是利用一般处理程序HttpHandler实现的服务器端数据的Excel导出,但是这样存在的问题是ashx读取的数据一般都是数据库中视图的数据, ...

  8. excel导出功能原型

    本篇博客是记录自己实现的excel导出功能原型,下面我将简单介绍本原型: 这是我自制的窗体,有一个ListView和一个Button(导出)控件. 这是我在网上找到了使用exel需要引用的库. usi ...

  9. java利用EasyPoi实现Excel导出功能

    easypoi功能如同名字easy,主打的功能就是容易,让一个没见接触过poi的人员 就可以方便的写出Excel导出,Excel模板导出,Excel导入,Word模板导出,通过简单的注解和模板 语言( ...

随机推荐

  1. CSS实现背景透明,文字不透明(各浏览器兼容)

    /*CSS*/.waps{ background:url(07158.bmp) no-repeat top center fixed; width:1004px; text-align:center; ...

  2. (WPF, MVVM) Textbox Binding

    参考:http://msdn.microsoft.com/en-us/library/system.windows.data.updatesourcetrigger(v=vs.110).aspx Te ...

  3. Hadoop MapReduce编程学习

    一直在搞spark,也没时间弄hadoop,不过Hadoop基本的编程我觉得我还是要会吧,看到一篇不错的文章,不过应该应用于hadoop2.0以前,因为代码中有  conf.set("map ...

  4. Javascript函数声明与函数表达式

    在定义函数时,我们一般使用下面这两种方法: 使用函数声明定义: function sum (a, b) { return a + b; } 使用函数表达式定义: var sum = function ...

  5. 树莓派安装3.5inch RPi LCD (A)显示屏

    3.5inch RPi LCD (A) 资料 产品介绍 用户手册 开发资料 开发软件 树莓派镜像 演示视频 FAQ 在自定义Raspbian系统镜像上怎么使用树莓派LCD? 先确保自定义镜像可正常进入 ...

  6. mongodb csv 文件导入数据库,删除特定字段

    1. 导入数据库 mongoimport -h host_ip -p port -d db_name -c collection_name --fields name1,name2,name3,nam ...

  7. RunJS - 在线编辑、展示、分享、交流你的 JavaScript 代码

    发现一个很好玩,很强大的网站 RunJS - 在线编辑.展示.分享.交流你的 JavaScript 代码   http://runjs.cn/ 比如: http://runjs.cn/detail/l ...

  8. by which, in which, from which 语法区别

    (1)Here is Beijing,where I grow up.where其实也是指代北京,不过where是在北京的意思,也就是 in Beijing (2)Here is Beijing,in ...

  9. 《c++程序设计》笔记

    本文是学习谭浩强老师的<c++程序设计>后的笔记. 1.概述 c++是贝尔实验室在c语言的基础上发展而来,与c兼容.用c语言写的程序可以不加修改用于c++.从c++的名字可以看出它是c的超 ...

  10. ASPxGridView中DetailRow的使用

    ASPxGridView是一个方便的数据显示控件,可是自动的绑定我们所需要的数据,但是有时,当数据属性过多时,我们并不一定要把所有的信息提供给所有的人,当有人需要这些数据时可以自动的进行查看,这时就可 ...