//
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四种格式通用组件
使用apach poi 导出Excel,可直接在项目中使用使用apach poi 导出Excel,可直接在项目中使用使用apach poi 导出Excel,可直接在项目中使用
详解JAVA_POI导出EXCEL报表的操作(包括各种格式及样式的实现),最全面的JAVA_POI导出EXCEL报表操作。
利用开源组件POI3.0.2,用java语言实现了动态导出Excel文档,并且也实现了Excel文档的导入。有完整的例子,可直接使用。ExportExcel类为导出Excel报表通用类。 1.将源代码导入eclipse中 2.部署项目,启动tomcat...
java使用POI导出 Excel+图片工具类 ,里面含有poi jar包,只调用接口即可直接保存Excel。使用的时候需先把数据封装,具体包装需根据实际导出数据进行处理。文件demo中只提供包装格式。
可以运行的POI导出Excel文件实例,里面有两种方法,一个是Servlet,一个是main
JAVA POI导出EXCEL代码
java实现excel的导入导出(poi详解),经过测试poi效率要比jxl要高很多,特别是数据量大的时候jxl根本无法用肉眼入目,本资源是个可运行项目demo,很有参考价值!
文件包含了 1.POI导入导出的工具类; 2.图片URL导出成图片文件; 3.导出excel和图片压缩包格式文件。 如果下载后有任何问题,可以联系我哦!
java poi导出导入.zip
主要介绍java poi如何导出图片到excel,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
Java Poi 导出excel(支持各种设置字体、颜色、垂直居中)
java_poi实现excel导入导出功能,有详细的注解
里面是完整的java程序,导入可执行,根据数据生成excel文件,http://localhost:8080/poi/export
使用poi导出excel支持xls、xlsx格式大数据导出java工具类,支持同一个单元格不同文本格式。找了好久,加上自己修改后,调试通过,发布出来分享,(调整student类位置)包含所需jar包,工具类,使用示例
需要使用JAVA 做EXCEL导出的同学,有问题尽管私信
Java利用poi导出excel表格.zipJava利用poi导出excel表格.zip
springboot+poi导出指定格式Excel模板,完整项目,导出即用。springboot+poi导出指定格式Excel模板,完整项目,导出即用。springboot+poi导出指定格式Excel模板,完整项目,导出即用。springboot+poi导出指定格式...
Java POI EXCEL导入导出Java POI EXCEL导入导出Java POI EXCEL导入导出Java POI EXCEL导入导出Java POI EXCEL导入导出Java POI EXCEL导入导出Java POI EXCEL导入导出Java POI EXCEL导入导出Java POI EXCEL导入导出...
java poi导出大量数据到Excel