`
Franciswmf
  • 浏览: 797083 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

java poi 导出.xls的Excel报表 IE11导出文件名称后缀是.action,待修复

 
阅读更多
//
	public void exportStationWaterQualityData(){
		
		List<Object> list=treeService.getExportStationWaterQualityData(stcd, startTm, endTm);
		if (null!=list&&list.size()>0) {
		List<Map<String,String>> factorList = (List<Map<String,String>>)list.get(0);//表头因子项
		List<Object[]> ItemList=(List<Object[]>)list.get(1);//数据项
		  // Excel 文件存放在服务器的相对路径下   
		  HttpServletRequest request = ServletActionContext.getRequest();
		  HttpServletResponse response=ServletActionContext.getResponse();
		  response.reset();
		  try {
		   HSSFWorkbook workbook = new HSSFWorkbook();   
		   HSSFSheet sheet = workbook.createSheet("Sheet1");   
		   HSSFCellStyle cellStyleMiddle = workbook.createCellStyle();   
		   cellStyleMiddle.setAlignment(HSSFCellStyle.ALIGN_CENTER);//居中
		   HSSFCellStyle cellStyleLeft = workbook.createCellStyle();   
		   cellStyleLeft.setAlignment(HSSFCellStyle.ALIGN_CENTER);//居左
		   HSSFRow row;
		   HSSFCell cell;
		   //1、创建标题行
		   row=sheet.createRow((int)0);
		   cell=row.createCell(0);
		   int sizeLen=factorList.size();
		   sheet.addMergedRegion(new CellRangeAddress(0, 0, (short)0, (short)sizeLen)); 
		   cell.setCellValue(reportTitle);//标题
		   cell.setCellStyle(cellStyleMiddle);//居中
		   //2、创建说明(图例)行
		   row=sheet.createRow((int)1);
		   cell=row.createCell(0);
		   sheet.addMergedRegion(new CellRangeAddress(1, 1, (short)0, (short)sizeLen));
		   cell=row.createCell(0);
		   cell.setCellValue("注意:。。。");//标题
		   cell.setCellStyle(cellStyleLeft);//居左
		   //3、创建动态表头
		   row=sheet.createRow(2);//第三行
		   cell=row.createCell(0);
		   cell.setCellValue("时间");
		   cell.setCellStyle(cellStyleMiddle);//居中
		   //第三行第一列后面的动态读取
		   for (int i = 0; i < factorList.size(); i++) {
			   cell=row.createCell(i+1);
				if (null!=factorList.get(i).get("sampling_unit")&&!"".equals(factorList.get(i).get("sampling_unit"))) {
					cell.setCellValue(factorList.get(i).get("name")+"("+factorList.get(i).get("sampling_unit")+")");
				}else {
					cell.setCellValue(factorList.get(i).get("name"));
				}
			   cell.setCellStyle(cellStyleMiddle);//居中
		   }
		   //4、设置表体数据
		   Object[] arr;
		   for (int i = 0; i < ItemList.size(); i++) {
			   arr=ItemList.get(i);//行数据准备
			   row=sheet.createRow(i+3);//增加行,第四行开始......
			   for (int j = 0; j < arr.length; j++) {
				   cell=row.createCell(j);
				   cell.setCellValue(arr[j].toString());
				   cell.setCellStyle(cellStyleMiddle);//设置样式  
			}
		    }
		   //5、设置自定义导出路径
		   response.setContentType("octets/stream");
	       String excelName = "评估表";
	       //转码防止乱码
	       response.addHeader("Content-Disposition", "attachment;filename="+new String( excelName.getBytes("gb2312"), "ISO8859-1" )+".xls");
		   OutputStream os = response.getOutputStream();
		   workbook.write(os);
		   os.close();
		   System.out.println("excel导出成功");
		  } catch (Exception ioexception) {   
		   request.setAttribute("message", "excel导出失败");   
		  }   
		}

		
		
		
		
	}


第二版,依然存在IE11多次导出文件后缀名是.action的问题,待进一步解决:
	List<Object> list=treeService.getExportStationWaterQualityData(stcd, startTm, endTm);
		if (null!=list&&list.size()>0) {
		List<Map<String,String>> factorList = (List<Map<String,String>>)list.get(0);//表头因子项
		List<Object[]> ItemList=(List<Object[]>)list.get(1);//数据项
		List<Object[]> ItemStyleList=(List<Object[]>)list.get(2);//样式项
		  // 
		  HttpServletRequest request = ServletActionContext.getRequest();
		  HttpServletResponse response=ServletActionContext.getResponse();
		  response.reset();
		  try {
		   HSSFWorkbook workbook = new HSSFWorkbook();   
		   HSSFSheet sheet = workbook.createSheet("Sheet1");   
		   //title
		   HSSFCellStyle cellStyleMiddleTitle = workbook.createCellStyle();   
		   cellStyleMiddleTitle.setAlignment(HSSFCellStyle.ALIGN_CENTER);//字体、居中
		   HSSFFont hssfFontTitle = workbook.createFont();
		   hssfFontTitle.setFontName("微软雅黑");
		   hssfFontTitle.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);//加粗
		   hssfFontTitle.setFontHeightInPoints((short)10);//
		   cellStyleMiddleTitle.setFont(hssfFontTitle);
		   //remark
		   HSSFCellStyle cellStyleMiddleRemark = workbook.createCellStyle();   
		   cellStyleMiddleRemark.setAlignment(HSSFCellStyle.ALIGN_CENTER);//居中
		   //
		   HSSFCellStyle cellStyleLeft = workbook.createCellStyle();   
		   cellStyleLeft.setAlignment(HSSFCellStyle.ALIGN_LEFT);//居左
		   HSSFRow row;
		   HSSFCell cell;
		   //1、创建标题行
		   row=sheet.createRow((int)0);
		   cell=row.createCell(0);
		   int sizeLen=factorList.size();
		   sheet.addMergedRegion(new CellRangeAddress(0, 0, (short)0, (short)sizeLen)); 
		   cell.setCellValue(reportTitle);//标题
		   cell.setCellStyle(cellStyleMiddleTitle);//居中
		   //2、创建说明(图例)行
		   row=sheet.createRow((int)1);
		   cell=row.createCell(0);
		   sheet.addMergedRegion(new CellRangeAddress(1, 1, (short)0, (short)sizeLen));
		   cell=row.createCell(0);
		   cell.setCellValue("(注:。。。。。。)");//标题
		   cell.setCellStyle(cellStyleLeft);//居左
		   //3、创建动态表头
		   row=sheet.createRow(2);//第三行
		   cell=row.createCell(0);
		   cell.setCellValue("采样时间");
		   cell.setCellStyle(cellStyleMiddleRemark);//居中
		   //第三行第一列后面的动态读取
		   for (int i = 0; i < factorList.size(); i++) {
			   cell=row.createCell(i+1);
				if (null!=factorList.get(i).get("sampling_unit")&&!"".equals(factorList.get(i).get("sampling_unit"))) {
					cell.setCellValue(factorList.get(i).get("name")+"("+factorList.get(i).get("sampling_unit")+")");
				}else {
					cell.setCellValue(factorList.get(i).get("name"));
				}
			  
		   }
		   //4、设置表体数据
		   //渲染数据
		   Object[] arr;
		   for (int i = 0; i < ItemList.size(); i++) {
			   arr=ItemList.get(i);//行数据准备
			   row=sheet.createRow(i+3);//增加行,第四行开始......
			   for (int j = 0; j < arr.length; j++) {
				   cell=row.createCell(j);
				   cell.setCellValue(arr[j].toString());   
			}
		    }
		   //给数据设置评估颜色
		 
		    //绿色
		   HSSFCellStyle cellStyle_Green = workbook.createCellStyle();   
		   HSSFFont hssfFont_Green = workbook.createFont();
		   hssfFont_Green.setColor(HSSFColor.GREEN.index);
		   cellStyle_Green.setFont(hssfFont_Green);
		   cellStyle_Green.setAlignment(HSSFCellStyle.ALIGN_CENTER);
		   //蓝色
		   HSSFCellStyle cellStyle_Blue = workbook.createCellStyle();  
		   HSSFFont hssfFont_Blue = workbook.createFont();
		   hssfFont_Blue.setColor(HSSFColor.BLUE.index);
		   cellStyle_Blue.setFont(hssfFont_Blue);
		   cellStyle_Blue.setAlignment(HSSFCellStyle.ALIGN_CENTER);
		   //红色
		   HSSFCellStyle cellStyle_Red = workbook.createCellStyle(); 
		   HSSFFont hssfFont_Red = workbook.createFont();
		   hssfFont_Red.setColor(HSSFColor.RED.index);
		   cellStyle_Red.setFont(hssfFont_Red);
		   cellStyle_Red.setAlignment(HSSFCellStyle.ALIGN_CENTER);
		   //黑色
		   HSSFCellStyle cellStyle_Black = workbook.createCellStyle();   
		   HSSFFont hssfFont_Black = workbook.createFont();
		   hssfFont_Black.setColor(HSSFColor.BLACK.index);
		   cellStyle_Black.setFont(hssfFont_Black);
		   cellStyle_Black.setAlignment(HSSFCellStyle.ALIGN_CENTER);
		   //
		   Object[] obj;
		   for (int i = 0; i < ItemStyleList.size(); i++) {
			   obj=ItemStyleList.get(i);//obj=[green;0;5, green;0;6, green;0;7, green;0;8, blue;0;12]=颜色-行数-列数
			  // System.out.println("样式输出obj:"+obj[0].toString());
			   if (null!=obj&&obj.length>0) {
				   for (int j = 0; j < obj.length; j++) {
						String styleObjStr=(String)obj[j];
						String[] arra=styleObjStr.split(";");
						row=sheet.getRow(Integer.parseInt(arra[1])+3);//行数
						cell=row.getCell(Integer.parseInt(arra[2]));//列数
						if ("green".equals(arra[0])) {
							 cell.setCellStyle(cellStyle_Green);//设置样式  
						} else if ("blue".equals(arra[0])) {
							 cell.setCellStyle(cellStyle_Blue);//设置样式  
						} else if ("red".equals(arra[0])) {
							 cell.setCellStyle(cellStyle_Red);//设置样式  
						}else {
							 cell.setCellStyle(cellStyle_Black);//设置样式  
						}
					}
			} else {

				//do nothing
			}
			  
			
		}
		   //5、设置自定义导出路径
		   response.setContentType("octets/stream");
	       String excelName = "。。。。表";
	       //转码防止乱码
	       response.addHeader("Content-Disposition", "attachment;filename="+new String( excelName.getBytes("gb2312"), "ISO8859-1" )+".xls");
		   OutputStream os = response.getOutputStream();
		   workbook.write(os);
		   os.close();
		   System.out.println("excel导出成功");
		  } catch (Exception ioexception) {   
		   request.setAttribute("message", "excel导出失败");   
		  }   
		}


下面两种写法运行效果一样,有待进一步完善:
/*
			   response.setContentType("octets/stream");
		       String excelName = "。。。报表";
		       response.addHeader("Content-Disposition", "attachment;filename="+new String( excelName.getBytes("gb2312"), "ISO8859-1" )+".xls");
			   OutputStream os = response.getOutputStream();
			   workbook.write(os);
			   os.flush();
			   os.close();
			   */
			  String excelName = "。。。报表";
		      response.setContentType("application/vnd.ms-excel");
		      response.setHeader("Content-disposition", "attachment;filename=" +new String( excelName.getBytes("gb2312"), "ISO8859-1" )+".xls");
		      OutputStream ouputStream = response.getOutputStream();
		      workbook.write(ouputStream);
		      ouputStream.flush();
		      ouputStream.close();


分享到:
评论

相关推荐

    POI导出.pdf,.doc,.xls,.jpg四种格式通用组件

    - 数据分析和报告生成:可以利用POI将数据库结果自动导出为Excel报表,方便用户查看和分析。 - 自动化文档生成:例如批量创建合同、报告或发票,根据模板和动态数据填充内容。 - 文件格式转换:将Excel数据转换为...

    java poi导出图片到excel示例代码

    Java POI导出图片到Excel示例代码详解 Java POI是Java开发中常用的开源库,用于读写Microsoft Office文件格式,包括Excel、Word、PowerPoint等。今天,我们将介绍如何使用Java POI将图片导出到Excel中。 标题解释 ...

    java_poi实现excel导入导出

    Java POI 实现 Excel 导入导出 Java POI 是一个流行的 Java 库,用于处理 Microsoft Office 文件格式,包括 Excel 文件。在本文中,我们将详细介绍如何使用 Java POI 实现 Excel 导入导出功能。 1. 什么是 Java ...

    POI导出Excel文件

    Apache POI是一个流行的Java库,用于读取和写入Microsoft Office格式的文件,尤其是Excel(.xlsx和.xls)文件。这个实例提供了两种方法来导出Excel文件:通过Servlet和通过main方法。这两种方法都是在Java环境中操作...

    java poi导出excel

    在Java中,如果你需要导出Excel文件,Java POI是一个非常实用的工具。下面将详细介绍如何使用Java POI来实现Excel的导出。 1. **引入依赖** 在Java项目中使用POI,首先需要在项目的构建文件(如Maven的pom.xml或...

    JAVA POI导出EXCEL代码

    Java POI库是Apache软件基金会的一个项目,专门用于读写Microsoft Office格式的文件,包括Excel。在Java开发中,我们经常使用POI库来处理Excel数据,如读取、写入和修改Excel文件。本篇文章将详细介绍如何使用JAVA ...

    JAVA poi 做EXCEL导出(包含图片) 完整版

    在Java编程环境中,Apache POI库是一个非常实用的工具,用于读取、写入和修改Microsoft Office格式的文件,特别是Excel(.xlsx 和 .xls)文件。本教程将详细介绍如何使用JAVA POI库来创建一个包含图片的完整Excel...

    java poi导出导入.zip

    这个压缩包“java poi导出导入.zip”显然包含了关于如何使用Java POI进行Excel文件的导入和导出的相关示例或代码。在本文中,我们将深入探讨Java POI在Excel文件操作中的应用。 首先,让我们了解Java POI的基本概念...

    java导出excel POI jar包

    Java导出Excel是Java开发中常见的需求,尤其是在数据处理和报表生成方面。Apache POI库是Java领域中广泛使用的工具,它允许开发者读写Microsoft Office格式的文件,包括Excel(.xlsx和.xls)。本篇文章将深入讲解...

    使用POI,实现excel文件导出,图片url导出文件,图片和excel文件导出压缩包

    本文将深入探讨如何使用POI库来实现Excel文件的导出,以及如何将图片URL转换为图片文件并与其他文件一起打包成压缩包。 首先,让我们了解一下Apache POI。POI是Java开发者的开源API,它允许程序创建、修改和显示...

    POI的EXCEL导出,自动换行

    通过以上步骤,我们成功地实现了使用Apache POI在Java中导出Excel文件,并实现了自动换行的功能。这种方式不仅可以提高工作效率,还能确保数据的准确性和完整性。 #### 六、注意事项与优化建议 - **兼容性问题**:...

    Java使用POI实现Excel报表的导入和导出

    利用开源组件POI3.0.2,用java语言实现了动态导出Excel文档,并且也实现了Excel文档的导入。有完整的例子,可直接使用。ExportExcel类为导出Excel报表通用类。 1.将源代码导入eclipse中 2.部署项目,启动tomcat...

    poi_java_excel.zip_java 导出excel_poi excel_poi导出再导入excel中文_导出exce

    在Java编程领域,Apache POI 是一个非常流行的库,它允许开发者读取、写入以及修改Microsoft Office格式的文件,尤其是Excel(.xlsx 和 .xls)文件。在本项目"poi_java_excel.zip"中,我们将重点探讨如何使用Apache ...

    POI报表导出excel

    在这个“POI报表导出excel”的案例中,我们将深入探讨如何使用POI 3.6版本来实现报表的导出,包括设置Excel样式、合并单元格以及处理多表头的合并。 首先,我们需要了解Apache POI的核心组件:HSSFWorkbook(用于...

    java使用POI导出 Excel工具类

    java使用POI导出 Excel+图片工具类 ,里面含有poi jar包,只调用接口即可直接保存Excel。使用的时候需先把数据封装,具体包装需根据实际导出数据进行处理。文件demo中只提供包装格式。

    POI实现Excel导入导出并附带加载进度条

    Apache POI是一个强大的库,它允许开发者使用Java来读取、写入和修改Microsoft Office格式的文件,包括Excel(.xlsx, .xls)。本项目通过Apache POI实现了Excel的导入与导出功能,并在操作过程中加入了进度条展示,...

    excel(xls或xlsx)便捷copy及poi操作demo.rar

    java spire.xls.free 快速copy excel副本或修改名称另存为、java poi操作excel(xls或者xlsx)样例 excel便捷copy jar包下载地址https://download.csdn.net/download/qq_25073261/85060851

    java 利用poi导出EXCEL

    Java中的Apache POI库是处理Microsoft Office格式文件的利器,特别是用于读取和写入Excel文件。本主题将深入探讨如何使用POI库导出EXCEL表格,以及如何结合提供的关键代码实现这一功能。 首先,我们需要理解Apache ...

    Java实现POI导出Excel

    Java实现POI导出Excel是Java开发者常用的一种技术,用于生成和操作Microsoft Office Excel文件。在Java中,Apache POI库提供了对微软Office文档格式的支持,包括读取和写入Excel文件。这篇博客文章...

    java版poi导出excel文件

    本教程将详细讲解如何使用Java和Apache POI库来创建并导出Excel文件。 首先,我们需要在项目中引入Apache POI的相关依赖。在Maven项目中,可以在pom.xml文件中添加以下依赖: ```xml &lt;groupId&gt;org.apache.poi ...

Global site tag (gtag.js) - Google Analytics