需求描述:

  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. JavaScript的jsonp

    目录索引: 一.AJAX的概念二.POST && GET三.原生实现AJAX简单示例 3.1 实现代码 3.2 重点说明四.框架隐藏域 4.1 基本概念 4.2 后台写入脚本 4.3 ...

  2. SparkSQL项目中的应用

    Spark是一个通用的大规模数据快速处理引擎.可以简单理解为Spark就是一个大数据分布式处理框架.基于内存计算的Spark的计算速度要比Hadoop的MapReduce快上100倍以上,基于磁盘的计 ...

  3. 读《java核心技术卷一》有感

    过去一个多月了吧.才囫囵吞枣地把这书过了一遍.话说这书也够长的,一共706页.我从来不是个喜欢记录的人,一直以来看什么书都是看完了就扔一边去,可能有时候有那么一点想记录下来的冲动,但算算时间太紧,很多 ...

  4. JAVA final关键字,常量的定义

    final(最终)是一个修饰符1.final可以修饰类,函数,变量(成员变量,局部变量)2.被final修饰后的类不可以被其它类继承3.被final修饰后的方法(函数)不可以被重写4.被final修饰 ...

  5. Beautiful Soup第三方爬虫插件

    什么是BeautifulSoup? Beautiful Soup 是用Python写的一个HTML/XML的解析器,它可以很好的处理不规范标记并生成剖析树(parse tree). 它提供简单又常用的 ...

  6. 89、Android EditText 悬浮停靠

    package com.willen.topFloatDemo; import android.content.Context; import android.os.Handler; import a ...

  7. Bitbucket使用方法

    一.软件及SSH keys: 由于我的Bitbucket账号的邮箱及用户名与Github相同,所以SSH Public Keys可以用Github的,登录Bitbucket,悬浮在用户名boliqua ...

  8. Entity Framework6 访问MySQL

    先用PM命令安装EF6,MySQL提供的EF实现新增.删除.修改是采用存储过程实现的 Install-Package EntityFramework 配置修改如下 <?xml version=& ...

  9. framMaker、Velocity模版引擎

    1.一种模板文件,可以自动加载数据到模板里面展现. 类似:Velocity 2.使用场景 1.web开发模式 WEB-INF/view/vm 在互联网公司的开发都是基于vm的开发,其次就是使用JS的框 ...

  10. JAVA设计模式之依赖倒转原则

    3.1 依赖倒置原则的定义 依赖倒置原则(Dependence Inversion Principle,简称DIP)这个名字看着有点别扭,“依赖”还“倒置”,这到底是什么意思?依赖倒置原则的原始定义是 ...