最近写了一个,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 从服务器下载模板写入数据再导出的更多相关文章

  1. NPOI 通过excel模板写入数据并导出

    private void ToExcel(string id) { //模板文件 string TempletFileName = Server.MapPath("template.xls& ...

  2. 02使用java脚本向Pxc集群写入数据

    使用java脚本向Pxc集群写入数据 批量写入pxc集群程序 导入mysql驱动包 # 批量插入数据的java脚本 package pxc_demo; import java.sql.Connecti ...

  3. java io流 创建文件、写入数据、设置输出位置

    java io流 创建文件 写入数据 改变system.out.print的输出位置 //创建文件 //写入数据 //改变system.out.print的输出位置 import java.io.*; ...

  4. java之初识服务器跨域获取数据

    当一个项目膨大到无法进行整理时,而作为新负责维护的团队是非常苦恼的.对于想实现两个系统的数据访问,使用Ajax数据请求方式获取jsonp格式的数据 需要有前端jquery库文件. 前端代码通过jque ...

  5. java中通过jacob调用dts进行数据导入导出

    在一个项目中需要金蝶软件对接,但是业务服务器和财务服务器相隔很远(中间经过好几台服务器,有内网也有外网),从一个内网向另一个内网中传输时,需要外网辅助,因为不让原始数据受污染,使用了DTS数据同步到另 ...

  6. tablib把数据导出为Excel、JSON、CSV等格式的Py库(写入数据并导出exl)

    #tablib把数据导出为Excel.JSON.CSV等格式的Py库 #python 3 import tablib #定义列标题 headers = ('1列', '2列', '3列', '4列', ...

  7. Java实现从服务器下载文件到本地的工具类

    话不多说,直接上代码...... import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServlet ...

  8. java中将list、map对象写入文件

    链接地址:http://blog.sina.com.cn/s/blog_4a4f9fb50101p6jv.html     推荐:凤爪女瓜子男怪象该谁反思伦敦房价为什么持续暴涨 × wvqusrtg个 ...

  9. java实现赋值excel模板,并在新文件中写入数据,并且下载

    /** * 生成excel并下载 */ public void exportExcel(){ File newFile = createNewFile(); //File newFile = new ...

随机推荐

  1. PHP之Mysql常用SQL语句示例的深入分析

    1.插入数据insert into表名(列名1,列名2,列名..) values(值1,值2,值...); insert into product(name, price, pic_path) val ...

  2. 如何在windows下载和安装Apache

    进入apache服务器官网http://httpd.apache.org/,这里我们以下载稳定版的httpd 2.4.25为例,点击"Files for Microsoft Windows& ...

  3. 关于android:id="@+id/xx"的理解

    之前学习android的时候,对android:id="@+id/xx"总感觉混淆,不理解,刚看了一篇文章.现在貌似是恍然大悟.故做了一下笔记,希望帮助有共同问题的人... and ...

  4. SQL Server 2005入门到精通(案例详解)

    SQL Server 2005基础应用   一.数据库的基本操作 --创建数据库 create database new_db2 on primary ( name='new.mdf', filena ...

  5. js原生设计模式——3简单工厂模式\js面向对象编程实例

    <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8&qu ...

  6. oracle11g手工建库

    1.设置环境变量 [oracle@HE3~]$ vi .bash_profile exportPATH exportEDITOR=vi exportORACLE_SID=orcl exportORAC ...

  7. Apache的.htaccess到Nginx的转换

    今天项目要求从Apache转到Nginx,遇到了要将原来的rewrite规则移过来的问题,找了半天资源,居然有一个转换工具,地址如下: http://www.anilcetin.com/convert ...

  8. HTML5 & CSS3初学者指南(3) – HTML5新特性

    介绍 本文介绍了 HTML5 的一些新特性.主要包含以下几个方面: Web 存储 地理位置 拖放 服务器发送事件 Web存储 HTML5 Web 存储的设计与构想是一个更好的机制来存储客户端的网络数据 ...

  9. Socket-IOS

    Socke Socket又称"套接字” 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket. 应用程序通常通过"套接字"向网络发出请 ...

  10. WebForm 全局对象、commend

    Repeater的增删改 内置对象:页面之间的数据交互为什么要用这些玩意? HTTP的无状态性 Response:响应请求 Request:获取请求 Cookies:保存登录状态----------- ...