//
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将数据库结果自动导出为Excel报表,方便用户查看和分析。 - 自动化文档生成:例如批量创建合同、报告或发票,根据模板和动态数据填充内容。 - 文件格式转换:将Excel数据转换为...
Java POI导出图片到Excel示例代码详解 Java POI是Java开发中常用的开源库,用于读写Microsoft Office文件格式,包括Excel、Word、PowerPoint等。今天,我们将介绍如何使用Java POI将图片导出到Excel中。 标题解释 ...
Java POI 实现 Excel 导入导出 Java POI 是一个流行的 Java 库,用于处理 Microsoft Office 文件格式,包括 Excel 文件。在本文中,我们将详细介绍如何使用 Java POI 实现 Excel 导入导出功能。 1. 什么是 Java ...
Apache POI是一个流行的Java库,用于读取和写入Microsoft Office格式的文件,尤其是Excel(.xlsx和.xls)文件。这个实例提供了两种方法来导出Excel文件:通过Servlet和通过main方法。这两种方法都是在Java环境中操作...
在Java中,如果你需要导出Excel文件,Java POI是一个非常实用的工具。下面将详细介绍如何使用Java POI来实现Excel的导出。 1. **引入依赖** 在Java项目中使用POI,首先需要在项目的构建文件(如Maven的pom.xml或...
Java POI库是Apache软件基金会的一个项目,专门用于读写Microsoft Office格式的文件,包括Excel。在Java开发中,我们经常使用POI库来处理Excel数据,如读取、写入和修改Excel文件。本篇文章将详细介绍如何使用JAVA ...
在Java编程环境中,Apache POI库是一个非常实用的工具,用于读取、写入和修改Microsoft Office格式的文件,特别是Excel(.xlsx 和 .xls)文件。本教程将详细介绍如何使用JAVA POI库来创建一个包含图片的完整Excel...
这个压缩包“java poi导出导入.zip”显然包含了关于如何使用Java POI进行Excel文件的导入和导出的相关示例或代码。在本文中,我们将深入探讨Java POI在Excel文件操作中的应用。 首先,让我们了解Java POI的基本概念...
Java导出Excel是Java开发中常见的需求,尤其是在数据处理和报表生成方面。Apache POI库是Java领域中广泛使用的工具,它允许开发者读写Microsoft Office格式的文件,包括Excel(.xlsx和.xls)。本篇文章将深入讲解...
本文将深入探讨如何使用POI库来实现Excel文件的导出,以及如何将图片URL转换为图片文件并与其他文件一起打包成压缩包。 首先,让我们了解一下Apache POI。POI是Java开发者的开源API,它允许程序创建、修改和显示...
通过以上步骤,我们成功地实现了使用Apache POI在Java中导出Excel文件,并实现了自动换行的功能。这种方式不仅可以提高工作效率,还能确保数据的准确性和完整性。 #### 六、注意事项与优化建议 - **兼容性问题**:...
利用开源组件POI3.0.2,用java语言实现了动态导出Excel文档,并且也实现了Excel文档的导入。有完整的例子,可直接使用。ExportExcel类为导出Excel报表通用类。 1.将源代码导入eclipse中 2.部署项目,启动tomcat...
在Java编程领域,Apache POI 是一个非常流行的库,它允许开发者读取、写入以及修改Microsoft Office格式的文件,尤其是Excel(.xlsx 和 .xls)文件。在本项目"poi_java_excel.zip"中,我们将重点探讨如何使用Apache ...
在这个“POI报表导出excel”的案例中,我们将深入探讨如何使用POI 3.6版本来实现报表的导出,包括设置Excel样式、合并单元格以及处理多表头的合并。 首先,我们需要了解Apache POI的核心组件:HSSFWorkbook(用于...
java使用POI导出 Excel+图片工具类 ,里面含有poi jar包,只调用接口即可直接保存Excel。使用的时候需先把数据封装,具体包装需根据实际导出数据进行处理。文件demo中只提供包装格式。
Apache POI是一个强大的库,它允许开发者使用Java来读取、写入和修改Microsoft Office格式的文件,包括Excel(.xlsx, .xls)。本项目通过Apache POI实现了Excel的导入与导出功能,并在操作过程中加入了进度条展示,...
java spire.xls.free 快速copy excel副本或修改名称另存为、java poi操作excel(xls或者xlsx)样例 excel便捷copy jar包下载地址https://download.csdn.net/download/qq_25073261/85060851
Java中的Apache POI库是处理Microsoft Office格式文件的利器,特别是用于读取和写入Excel文件。本主题将深入探讨如何使用POI库导出EXCEL表格,以及如何结合提供的关键代码实现这一功能。 首先,我们需要理解Apache ...
Java实现POI导出Excel是Java开发者常用的一种技术,用于生成和操作Microsoft Office Excel文件。在Java中,Apache POI库提供了对微软Office文档格式的支持,包括读取和写入Excel文件。这篇博客文章...
本教程将详细讲解如何使用Java和Apache POI库来创建并导出Excel文件。 首先,我们需要在项目中引入Apache POI的相关依赖。在Maven项目中,可以在pom.xml文件中添加以下依赖: ```xml <groupId>org.apache.poi ...