java poi 从服务器下载模板写入数据再导出
最近写了一个,Excel 的 写入和导出. 需求是这样的. 在新建合同的时候,会有导出合同的数据, 导出的模板是固定的,,需要在模板里面写入合同的信息.
first : 下载模板 > 写入数据 > 输出
下载模板 :
StringBuilder path = new StringBuilder("");
path.append(request.getSession().getServletContext().getRealPath(""));
path.append(File.separator);
path.append("WEB-INF");
path.append(File.separator);
path.append("classes");
path.append(File.separator);
path.append("template");
path.append(File.separator);
String filePath=path.toString()+"\\"+"contractDemo.xlsx"; //这是获取jboss服务器上的模板路径
FileInputStream fis = new FileInputStream(filePath); XSSFWorkbook workBook=new XSSFWorkbook(fis); // 新建一个workBook 用来新建Excel 的sheet
// 这个是下载和输出excel excel写入数据 是在另一个方法里面写着的 ,方法分开来写比较清晰.
try{ StringBuilder path = new StringBuilder("");
path.append(request.getSession().getServletContext().getRealPath(""));
path.append(File.separator);
path.append("WEB-INF");
path.append(File.separator);
path.append("classes");
path.append(File.separator);
path.append("template");
path.append(File.separator);
String filePath=path.toString()+"\\"+"contractDemo.xlsx"; // 服务器上的模板路径
FileInputStream fis = new FileInputStream(filePath); // 输入流
XSSFWorkbook workBook=new XSSFWorkbook(fis);
String fileName="test_"+System.currentTimeMillis()+".xlsx";
OutputStream out=new FileOutputStream("d:/"+fileName);
contractExportTemplate.createSheet(workBook,vo,conf);
workBook.setForceFormulaRecalculation(true);
workBook.write(out);
fis.close();
out.flush();
out.close();
return "success";
}catch(Exception e){
e.printStackTrace();
return "error";
}
// 下面的代码其实就是在excel 里面写入数据,我是根据模板来写的,所以sheet 表里面的格式都是固定的.我只要获取具体的单元格然后写入数据就可以了.
//给excel表添加数据
public void excelContractWriteData(XSSFWorkbook workBook,XSSFSheet sheet, List<ContractExcelGroupByStoreVo> conList1,
List<ContractExcelGroupByAreaVo> conList2,List<ContractExcelGroupByStoreVo> conList3) throws Exception{
if(conList1.size()!=0){
XSSFRow row0=sheet.getRow(0); row0.getCell(2).setCellValue(conList1.get(0).getTaskId()+""+
(conList1.get(0).getPrintSeqNo()==null?"1":conList1.get(0).getPrintSeqNo()));//写入打印编号 XSSFRow row=sheet.getRow(2);
//获取sheet表的单元格,写入数据
row.getCell(2).setCellValue(conList1.get(0).getYear());
row.getCell(4).setCellValue(conList1.get(0).getCatlgId());
row.getCell(6).setCellValue(conList1.get(0).getSupNo());
}
if(conList2.size()!=0){
for( ContractExcelGroupByAreaVo vo :conList2){
if(vo.getAreaName()!="" && "华东".equals(vo.getAreaName().toString()))
{
sheet.getRow(6).getCell(2).setCellValue(vo.getStoreNum());
sheet.getRow(6).getCell(3).setCellValue(vo.getTargetNum());
}
if(vo.getAreaName()!="" && "西南".equals(vo.getAreaName().toString()))
{
sheet.getRow(7).getCell(2).setCellValue(vo.getStoreNum());
sheet.getRow(7).getCell(3).setCellValue(vo.getTargetNum());
}
if(vo.getAreaName()!="" && "华北".equals(vo.getAreaName().toString()))
{
sheet.getRow(8).getCell(2).setCellValue(vo.getStoreNum());
sheet.getRow(8).getCell(3).setCellValue(vo.getTargetNum());
}
if(vo.getAreaName()!="" && "华南".equals(vo.getAreaName().toString()))
{
sheet.getRow(9).getCell(2).setCellValue(vo.getStoreNum());
sheet.getRow(9).getCell(3).setCellValue(vo.getTargetNum());
}
if(vo.getAreaName()!="" && "华中".equals(vo.getAreaName().toString()))
{
sheet.getRow(10).getCell(2).setCellValue(vo.getStoreNum());
sheet.getRow(10).getCell(3).setCellValue(vo.getTargetNum());
}
}
}
if(conList3.size()!=0){
int rowIndex=14; //这个数字是根据excel模板定的
for(ContractExcelGroupByStoreVo conExcel : conList3){
sheet.getRow(rowIndex).getCell(1).setCellValue(conExcel.getAreaName());
sheet.getRow(rowIndex).getCell(2).setCellValue(conExcel.getProvinceName());
sheet.getRow(rowIndex).getCell(3).setCellValue(conExcel.getCityName());
sheet.getRow(rowIndex).getCell(4).setCellValue(conExcel.getStoreNum()+"-"+conExcel.getStoreName()); //门店的编号
sheet.getRow(rowIndex).getCell(5).setCellValue(conExcel.getStoreAmount());
sheet.getRow(rowIndex).getCell(6).setCellValue(conExcel.getMemo());
if(conExcel.getServReqd()!=null){
String month= conExcel.getServReqd().toString();
sheet.getRow(rowIndex).getCell(7).setCellValue(this.stringtoIntArray(month));
}else{
sheet.getRow(rowIndex).getCell(7).setCellValue(conExcel.getDateStr());
}
rowIndex++;
}
} }
// 这里是一个排序, 月份有 1 2 3 4 5 6 7 8 9 10 11 12 但是每次出现的月份是不固定的 可能中间会有断开的月份. 所以需要先排序然后 判断 第二个数和第一个数相差多少, 如果相差大于2的话就说明 月份中间是有断开的.那就把连续的几个数的头尾 用字符串拼接起来,显示
//把 月份数组转换为字符串
public String stringtoIntArray(String str) { StringBuffer dateStage= new StringBuffer("");
String strs[] = str.split(",");
int array[] = new int[strs.length];
for(int i=0;i<strs.length;i++){
array[i]=Integer.parseInt(strs[i]);
}
for (int i = 0; i < array.length; i++) {
for(int j = 0; j<array.length-i-1; j++){
if(array[j]>array[j+1]){
int temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
}
}
int a=array[0];
for (int j = 1; j < array.length; j++) {
if(array[j] - array[j-1]>=2){
dateStage.append(""+a+"-"+array[j-1]+",");
a=array[j];
}
if(j==(array.length-1)){ dateStage.append(""+a+"-"+array[j]);
}
}
return dateStage.toString(); }
java poi 从服务器下载模板写入数据再导出的更多相关文章
- NPOI 通过excel模板写入数据并导出
private void ToExcel(string id) { //模板文件 string TempletFileName = Server.MapPath("template.xls& ...
- 02使用java脚本向Pxc集群写入数据
使用java脚本向Pxc集群写入数据 批量写入pxc集群程序 导入mysql驱动包 # 批量插入数据的java脚本 package pxc_demo; import java.sql.Connecti ...
- java io流 创建文件、写入数据、设置输出位置
java io流 创建文件 写入数据 改变system.out.print的输出位置 //创建文件 //写入数据 //改变system.out.print的输出位置 import java.io.*; ...
- java之初识服务器跨域获取数据
当一个项目膨大到无法进行整理时,而作为新负责维护的团队是非常苦恼的.对于想实现两个系统的数据访问,使用Ajax数据请求方式获取jsonp格式的数据 需要有前端jquery库文件. 前端代码通过jque ...
- java中通过jacob调用dts进行数据导入导出
在一个项目中需要金蝶软件对接,但是业务服务器和财务服务器相隔很远(中间经过好几台服务器,有内网也有外网),从一个内网向另一个内网中传输时,需要外网辅助,因为不让原始数据受污染,使用了DTS数据同步到另 ...
- tablib把数据导出为Excel、JSON、CSV等格式的Py库(写入数据并导出exl)
#tablib把数据导出为Excel.JSON.CSV等格式的Py库 #python 3 import tablib #定义列标题 headers = ('1列', '2列', '3列', '4列', ...
- Java实现从服务器下载文件到本地的工具类
话不多说,直接上代码...... import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServlet ...
- java中将list、map对象写入文件
链接地址:http://blog.sina.com.cn/s/blog_4a4f9fb50101p6jv.html 推荐:凤爪女瓜子男怪象该谁反思伦敦房价为什么持续暴涨 × wvqusrtg个 ...
- java实现赋值excel模板,并在新文件中写入数据,并且下载
/** * 生成excel并下载 */ public void exportExcel(){ File newFile = createNewFile(); //File newFile = new ...
随机推荐
- Grunt之watch详解
Grunt 之 watch 和 livereload 现在 watch 中已经集成了 livereload ,所以把它们放在一起说明. watch 可以监控特定的文件,在添加文件.修改文件.或者删除文 ...
- SQL之left join、right join、inner join
创建表(Create table): CREATE TABLE A ( Id INT PRIMARY KEY, Name VARCHAR(20) NOT NULL); CREATE TABLE B ( ...
- PHP做负载均衡回话保持问题参考
最近一个项目的服务器老是出现Session数据丢失问题,导致用户莫名其妙的退出,原因是太相信我们的运维人员所谓的负载均衡会话保持的概念.会话保持 的原理就是负载均衡通过Cookie来分发那个客户连接被 ...
- git 配置SSH免密
1.安装TortoiseGit(比较简单,直接在官网上下载安装包安装) 2.打开下图标识 点击 generate按钮 生成key(需要等一会) 3.生成Key保存成.ppk文件,记得存放路径,(建 ...
- #最小生成树# #kruskal# ----- OpenJudge丛林中的路
最小生成树 一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n 个结点,并且有保持图连通的最少的边.最小生成树可以用kruskal(克鲁斯卡尔)算法或prim(普里姆)算法 ...
- WPF学习之数据绑定
WPF中的数据绑定提供了很强大的功能.与普通的WinForm程序相比,其绑定功能为我们提供了很多便利,例如Binding对象的自动通知/刷新,Converter,Validation Rules,Tw ...
- 在 Windows Forms 和 WPF 应用中使用 FontAwesome 图标
前言 FontAwesome 大家都不陌生,精美的图标,出现在各式各样的网页中. 最近在做 Windows Forms 应用程序,要求美观,就想能不能把 FontAwesome 图标用上,于是就有了本 ...
- 算法笔记_017:递归执行顺序的探讨(Java)
目录 1 问题描述 2 解决方案 2.1 问题化简 2.2 定位输出测试 2.3 回顾总结 1 问题描述 最近两天在思考如何使用蛮力法解决旅行商问题(此问题,说白了就是如何求解n个不同字母的所有不同排 ...
- date()中的getYear的小问题
function DateDemo(){ var d,s = "今天得日期是:"; d = new Date(); s += d.getMonth()++"/" ...
- BOM数据基础 - Mobox物料编码管理及实现
1 企业现状 在企业日常经营过程中会产生大量的文档,如设计图纸.变更单.计算书.设计方案等,如果是制造企业还会产生大量的产品.组成产品的零部件等物料,这些数据在进入信息系统前都需要有一个唯一的标识,也 ...