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();

	   }

  

时间: 2024-11-06 15:05:08

java poi 从服务器下载模板写入数据再导出的相关文章

java使用Aspose向word模板写入数据

Aspose.Words是一个商业.NET类库,可以使得应用程序处理大量的文件任务.Aspose.Words支持Doc,Docx,RTF,HTML,OpenDocument,PDF,XPS,EPUB和其他格式.使用Aspose.Words可以在不使用Microsoft.Word的情况下生成.修改.转换和打印文档. 1.Aspose在maven下的包引用,例如: <dependency> <groupId>com.mlsc</groupId> <artifactId

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

java io流 创建文件 写入数据 改变system.out.print的输出位置 //创建文件 //写入数据 //改变system.out.print的输出位置 import java.io.*; public class Index{ public static void main(String[] args) throws Exception{ /** * 存储为二进制,给计算机看的 */ //创建文件 DataOutputStream sjl = new DataOutputStrea

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

当一个项目膨大到无法进行整理时,而作为新负责维护的团队是非常苦恼的.对于想实现两个系统的数据访问,使用Ajax数据请求方式获取jsonp格式的数据 需要有前端jquery库文件. 前端代码通过jquery的处理方式如下: $.ajax({ type : "get", //jquey是不支持post方式跨域的 async:false, url : "http://192.168.0.113:8080/test/", //跨域请求的URL dataType : &quo

ASP.NET之Excel下载模板、导入、导出操作

1.下载模板功能 前提是服务器某文件夹中有这个文件.代码如下 1 protected void btnDownload_Click(object sender, EventArgs e) 2 { 3 var path = Server.MapPath(("upfiles\\") + "test.xlt"); //upfiles-文件夹 test.xlt-文件 4 var name = "test.xlt"; 5 6 try 7 { 8 var f

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

#tablib把数据导出为Excel.JSON.CSV等格式的Py库 #python 3 import tablib #定义列标题 headers = ('1列', '2列', '3列', '4列', '5列') #需写入的数据,按照一行一行的输入 #元组数据的个数必须和列数一致 data = [('23','23','34','23','34'),('sadf','23','sdf','23','fsad')] #写入数据 mylist = tablib.Dataset(*data, head

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

链接地址:http://blog.sina.com.cn/s/blog_4a4f9fb50101p6jv.html 推荐:凤爪女瓜子男怪象该谁反思伦敦房价为什么持续暴涨 × wvqusrtg个人中心发博文消息 doudouhe的博客 http://blog.sina.com.cn/dechuan608hewei [订阅][手机订阅] 首页博文目录图片关于我 个人资料 doudouhe 微博 加好友发纸条 写留言加关注 博客等级: 博客积分:842 博客访问:222,144 关注人气:34 获赠金

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

/** * 生成excel并下载 */ public void exportExcel(){ File newFile = createNewFile(); //File newFile = new File("d:/ss.xls"); //新文件写入数据,并下载***************************************************** InputStream is = null; HSSFWorkbook workbook = null; HSSFSh

java通过POI技术操作Excel(2)----模板读取,录入数据

先来回顾下通常把java对Excel的操作分为以下功能:1.生成模板,导出模板:2.填充模板,录入数据:3:读取数据库数据,导出数据:在上一篇博文中,我简单记录了模板生成和导出,在这篇博文中,主要来记录--Excel文件导入,数据录入(仍然是以jsp+servlet为例) 既然要解决这个问题,那首先来分析下我们需要面对的有哪些需求需要实现: 1.Excel文件导入(这是最基础的,巧妇难为无米之炊,导入环节也是查了好久才完成的); 2.Excel文件中数据的格式判定,你要读取文件,如果文件中其实没

java poi excel 导入导出数据

背景:1.pringmvc 框架下 的excel 导入导出   2.OI 操作office. 页面代码: <div class="modal fade bs-example-modal-lg" tabindex="-1" role="dialog" aria-labelledby="myLargeModalLabel" aria-hidden="true"> <div class=&quo