导包:
org.apache.poi poi 3.9 org.apache.poi poi-ooxml 3.9 org.apache.poi poi-scratchpad 3.9
jsp页面中datagrid显示的数据及echarts图表显示的代码(包含在form表单中),算了,还是贴上整个jsp算了。
<
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ include file="/includes/taglibs.jsp"%>
<%--============================================================================
■页面标题:统计分析页面:/webview/eqkDemo/statisticAnalysis/findStatistic.jsp
■页面说明:... ...
============================================================================--%>
JS页面:::
JEasy.namespace('com.gzzn.jeasy'); /** * ! jeasy.statisticAnalysis.js * * @note: 防震减灾控制类. * @author: guangwen zhou * -------------------------------------------------------------------------------- */ ;jQuery(function($) { /** --------------------------------构造类与方法---------------------------------- */ /** * 系统基础工程构造方法类 */ com.gzzn.jeasy.StatisticAnalysis = function(element, options) { // 调用父类构造方法. com.gzzn.jeasy.StatisticAnalysis.superclass.constructor.call(this, element, options); }; /** * 系统继承并重写基类方法. */ JEasy.extend(com.gzzn.jeasy.StatisticAnalysis, com.gzzn.jeasy.Core, { init: function() { // 类实例化只有继承方法,没有自身方法. } }); /** * 初始化基础工程列表方法. */ com.gzzn.jeasy.StatisticAnalysis.prototype.findStatisticAnalysis = function(element, params) { var $this=this; $(element).datagrid({ singleSelect:false, pageSize:6, columns:[[ {field:'demoName',title:'防震减灾示范',width:'31%',align:"center"}, {field:'num',title:'统计数量',width:'18%',align:"center"}, {field:'createdTime',title:'统计时间',width:'18%',align:"center"}, // {field:'opt',title:'操作',width:200,align:"center",formatter:function(value,row){ // // button 定义 // var buttons=[{title:"查看",iconCls:"icon-find",data:{id:row.engrId}}, // {title:"修改",iconCls:"icon-edit",data:{id:row.engrId}}, // {title:"删除",iconCls:"icon-delete",data:{id:row.engrId}}]; // // 生成操作buttons // return $this.datagridBtnAppend(element,{buttons:buttons}); // }} ]], onLoadSuccess: function(data){ if(data.rows.length==0){ $.messager.error("错误信息", "数据查询失败,请联系管理员!"); } }, }); }; /** * 防震减灾统计分析查询方法. * @param element * @param params */ com.gzzn.jeasy.StatisticAnalysis.prototype.reload = function(element, params) { $(element).datagrid('reload',{ areaId:$("form[name=统计分析表单]").find($('input[name=areaId]')).val(), cmtyLevel:$("form[name=统计分析表单]").find($('input[name=cmtyLevel]')).val() }); }; /*************************************接口监控数据导出方法************************************************** * @author guangwen zhou * */ com.gzzn.jeasy.StatisticAnalysis.prototype.deriveData = function(element, params) { var $this=this; var imgURL = params.myEcharts.getDataURL('png');//获取base64编码 var areaId=$("form[name=统计分析表单]").find($('input[name=areaId]')).val(); var cmtyLevel=$("form[name=统计分析表单]").find($('input[name=cmtyLevel]')).val(); var url=JEasy.context+"/statis/deriveData"; var html="
";
$("body").append($(html));
$("form[name='attachDonwForm']").attr("action",url);
$("form[name='attachDonwForm'] input[name='areaId']").val(areaId);
$("form[name='attachDonwForm'] input[name='cmtyLevel']").val(cmtyLevel);
$("form[name='attachDonwForm'] input[name='files']").val(imgURL);
$("form[name='attachDonwForm']").form("submit");
$("form[name=attachDonwForm]").remove();
$("iframe[name=attachDonwForm]").remove();
};
/** --------------------------------对象初始化绑定-------------------------------- */
/**
* 系统基础工程组件
*/
$.fn.statisticAnalysis = function(method, options) {
// 系统处理之前显示进度条.
var window = $.messager.progress({title:"加载提示", msg:"正在处理中,请稍后..."});
try {
return this.each(function() {
// 初始化系统参数信息.
options = $.extend({}, $.fn.statisticAnalysis.defaults, options);
// 初始化绑定目标方法.
$.data(this, options.event, method);
// 初始化绑定目标对象.
var target = $.data(this, options.name);
if (!target) {
$.data(this, options.name, (target = new com.gzzn.jeasy.StatisticAnalysis(this, options)));
}
// 系统调用目标方法.
if (typeof method == 'string') {
target[method](this, options);
}
});
} finally {
// 系统处理之后关闭进度条.
window.panel('close');
}
};
/**
* 系统基础工程默认参数
*/
$.fn.statisticAnalysis.defaults = $.extend($.fn.core.defaults, {
name : 'jeasy.statisticAnalysis',
onBeforeLoad : function(target, args) { },
onLoadSuccess : function(target, args) { },
onLoadError : function(target, args) { }
});
});
function getEchartData(form, url){
var data = null;
$.ajax({
type:"POST",
url: url,
async:false,
data: {
areaId:$(form).find('input[name=areaId]').val(),
cmtyLevel:$(form).find('input[name=cmtyLevel]').val()
},
success:function(result){
data = result;
},
error:function(){
alert("系统响应异常!");
},
dataType:'json'
});
return data;
}
/**
* 展示柱状图
* playChartCol(myChart, "灾情汇总", '数量', '类别', eChartDto)
* @param myChart
* @param titleText 图表标题
* @param xAxisName 图表X轴名称
* @param yAxisName 图表Y轴名称
* @param eChartDto 图表数据
*/
function playChartCol(myChart, titleText, xAxisName, yAxisName, eChartDto){
myChart.setOption({
// backgroundColor: '#EEEED1',//背景色
title : {
text: titleText,
},
tooltip : {//鼠标悬浮提示文字
trigger: 'axis'
},
toolbox: {//右上角工具箱
show : true,
feature : {
restore : {show: true},
saveAsImage : {show: true}
}
},
//calculable : true,//可以拖拽
xAxis : [
{
name : xAxisName,
type : 'category',
data : ['地震安全示范社区数','地震减灾科普示范学校数','示范社区数']
}
],
yAxis : [
{
name : yAxisName,
type : 'value'
}
],
series : [
{
name : yAxisName,
type:'bar',
data:eChartDto,
barWidth : 60,//柱图宽度
itemStyle:{
normal:{
color:'#EE7621',
label:{show:true},
textStyle:{
color:"#ffffff",
fontSize:22
}
},//柱体上方数据显示
emphasis:{label:{show:true}}
},
}
]
});
}
导出到Excel的类方法(import sun.misc.BASE64Decoder; 这个包是解密包,Java自带的,不需要写依赖,不过要自己写这个引用包,拷贝放到类里就好!)
/*** * 导出数据、图片到Excel * @param dto * @param request * @param response * @return */ @RequestMapping(value = "/deriveData", method = RequestMethod.POST) public @ResponseBody List deriveData(StatisticAnalysisDto dto,HttpServletRequest request, HttpServletResponse response){ logger.info("进入->查询打印的防震减灾数据"); List lists = new ArrayList(); String message = "导出失败"; try { /*** * 统计出地震安全示范社区、地震减灾科普示范学校、示范社区的数量,并导入Excel, */ StringBuilder hql = new StringBuilder(); StringBuilder hq2 = new StringBuilder(); StringBuilder hq3 = new StringBuilder(); //查询语句 hql.append("from DemoCommunityInfo where $1 and $2 "); hq2.append("from DemoSchoolInfo where $1 and $2 "); hq3.append("from DemonArea where $1 and $2 "); //设置查询条件 String[] regulars1 = new String[]{"areaId = ?"," cmtyLevel = ?"}; String[] regulars2 = new String[]{"areaId = ?"," schlLevel = ?"}; String[] regulars3 = new String[]{"areaLevel = ?"," demonyLevel = ?"}; /** * 设置查询参数 */ List values = new ArrayList(); values.add(StringSupport.mkEqual(dto.getAreaId())); values.add(StringSupport.mkEqual(dto.getCmtyLevel())); List dtoList1 = DBService.findEntities(hql.toString(), regulars1, values.toArray()); List dtoList2 = DBService.findEntities(hq2.toString(), regulars2, values.toArray()); List dtoList3 = DBService.findEntities(hq3.toString(), regulars3, values.toArray()); StatisticAnalysisDto newDto1 = new StatisticAnalysisDto(); StatisticAnalysisDto newDto2 = new StatisticAnalysisDto(); StatisticAnalysisDto newDto3 = new StatisticAnalysisDto(); Date currentTime = new Date(); SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd "); String dateString = formatter.format(currentTime); newDto1.setDemoName("地震安全示范社区"); newDto1.setNum(dtoList1.size()); newDto1.setCreatedTimeOut(dateString); newDto2.setDemoName("地震减灾科普示范学校"); newDto2.setNum(dtoList2.size()); newDto2.setCreatedTimeOut(dateString); newDto3.setDemoName("示范社区"); newDto3.setNum(dtoList3.size()); newDto3.setCreatedTimeOut(dateString); lists.add(newDto1); lists.add(newDto2); lists.add(newDto3); /** * 导出查找到的数据 */ String headers1[]={"序号","示范单位统计","统计数量","统计时间"}; String columnIds[]={"number","demoName","num","createdTimeOut"}; List mapList=new ArrayList(); int num=1; for(StatisticAnalysisDto info:lists){ Map map=new HashMap(); map.put("number", num); map.put("demoName", info.getDemoName()); map.put("num", info.getNum()); map.put("createdTimeOut", info.getCreatedTimeOut()); // map.put("testResult", "D:/TestFile/1234fangwen.bmp"); mapList.add(map); num++; } HSSFWorkbook workbook = peExcelSupport.exportExcel(mapList, headers1,columnIds, "防震减灾数据图表"); /** * 创建临时文件 */ String templatePath="exportFailureData\'grcfData.xls"; String tpFileRealPath = session.getServletContext().getRealPath("/")+"externals\'officeTemp\'"+templatePath; FileOutputStream fout = new FileOutputStream(tpFileRealPath); workbook.write(fout); /*** * 通过echarts64位图片获得字节流,并将流生成图片,然后插入Excel中然后导出Excel */ if(null!=dto.getFiles()){ // BASE64Decoder decoder = new BASE64Decoder(); String[] url = dto.getFiles().split(","); String u = url[1]; BufferedImage bufferImg = null; FileOutputStream fileOut = null; //Base64解码 try { byte[] buffer = new BASE64Decoder().decodeBuffer(u); //生成图片 String imgPath = session.getServletContext().getRealPath("/")+"externals\'officeTemp\'"+(new Date()).getTime()+".jpg"; FileOutputStream out = new FileOutputStream(imgPath); out.write(buffer); // HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet1 = workbook.getSheetAt(0); HSSFPatriarch patriarch = sheet1.createDrawingPatriarch(); //anchor主要用于设置图片的属性 HSSFClientAnchor(dx1,dy1,dx2,dy2,col1,row1,col2,row2) col1:竖(开始位置),row1:行(开始位置) HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 255, 255,(short) 0, 5, (short) 4, 20); anchor.setAnchorType(3); //插入图片 patriarch.createPicture(anchor, workbook.addPicture(buffer, HSSFWorkbook.PICTURE_TYPE_JPEG)); fileOut = new FileOutputStream(tpFileRealPath); // 写入excel文件 workbook.write(fileOut); } catch (IOException e) { e.printStackTrace(); } } fout.close(); File templateFile=new File(tpFileRealPath); if(templateFile.exists()){ fileUpload.downloadFile(templateFile, "防震减灾示范统计表.xls", response, request); }else{ response.setContentType("text/html;charset=utf-8"); String str = ""; try { response.setCharacterEncoding("UTF-8"); response.setHeader("pragma", "no-cache"); response.setHeader("cache-control", "no-cache"); PrintWriter pw = response.getWriter(); pw.write(str); pw.flush(); pw.close(); } catch (IOException e) { e.printStackTrace(); } } templateFile.delete(); } catch (Exception e) { logger.error("001701:查询查询防震减灾信息异常,请联系管理员!" ,e); dto.setMessage("001701:查询查询防震减灾异常,请联系管理员!"); } logger.info("退出->查询防震减灾"); return lists; }
其中需要引用的支持类PoiExportExcelSuport :
package com.gzzn.fzjz.client.support; import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; import java.io.File; import java.util.List; import java.util.Map; import javax.imageio.ImageIO; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFCellStyle; import org.apache.poi.hssf.usermodel.HSSFClientAnchor; import org.apache.poi.hssf.usermodel.HSSFFont; import org.apache.poi.hssf.usermodel.HSSFPatriarch; import org.apache.poi.hssf.usermodel.HSSFRichTextString; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.hssf.util.HSSFColor; import org.apache.poi.ss.usermodel.IndexedColors; import org.apache.poi.ss.util.CellRangeAddress; import org.springframework.stereotype.Component; @Component public class PoiExportExcelSuport { /** * * 创建人:lxb * 创建时间:2013-5-29下午05:58:05 * 方法描述: * @param dataList 列表数据List * @param headers 表头 * @param columnId Map集合对应的列名 * @param sheetName * @return * @throws Exception */ public static HSSFWorkbook exportExcel(List dataList,String headers[], Object[] columnId,String sheetName) throws Exception { HSSFWorkbook workbook = null; BufferedImage bufferImg=null; try { // 创建工作簿实例 workbook = new HSSFWorkbook(); // 创建工作表实例 HSSFSheet sheet = workbook.createSheet(sheetName); HSSFPatriarch patriarch=sheet.createDrawingPatriarch(); // 设置列宽 PoiExportExcelSuport.setSheetColumnWidth(sheet,headers.length); // 获取样式 HSSFCellStyle style = PoiExportExcelSuport.createTitleStyle(workbook); // 生成并设置另一个样式 HSSFCellStyle style2 = PoiExportExcelSuport.createContentStyle(workbook); if (dataList != null && dataList.size() > 0) { // 创建第一行标题,标题名字的本地信息通过resources从资源文件中获取 HSSFRow row = sheet.createRow(0);// 建立新行 for(int i=0;i HSSFCell cell = row.createCell(i); row.setHeight((short)(2*256)); cell.setCellStyle(style); HSSFRichTextString text = new HSSFRichTextString(headers[i]); cell.setCellValue(text); } // 给excel填充数据 for (int i = 0; i < dataList.size(); i++) { row = sheet.createRow(i+1); row.setHeight((short)(2*256)); HSSFCell cell = row.createCell(0); cell.setCellStyle(style2); Map map=(Map)dataList.get(i); for(int j=0;j Object value=map.get(columnId[j]); String colValue=""; if(value!=null){ colValue=value.toString(); } if(columnId[j].toString().indexOf("image")>=0){//图片的处理 PoiExportExcelSuport.createCell(row, j, style2, HSSFCell.CELL_TYPE_BLANK, ""); ByteArrayOutputStream byteArray=new ByteArrayOutputStream(); bufferImg = ImageIO.read(new File(colValue)); ImageIO.write(bufferImg, "jpg", byteArray); HSSFClientAnchor anchor = new HSSFClientAnchor(5,5,0,0,(short)5,i+1,(short)6,i+2); anchor.setAnchorType(2); patriarch.createPicture(anchor , workbook.addPicture(byteArray.toByteArray(), HSSFWorkbook.PICTURE_TYPE_JPEG)); }else{ PoiExportExcelSuport.createCell(row, j, style2, HSSFCell.CELL_TYPE_STRING, colValue); } } } } else { PoiExportExcelSuport.createCell(sheet.createRow(0), 0, style, HSSFCell.CELL_TYPE_STRING, "查无资料"); } } catch (Exception e) { e.printStackTrace(); } return workbook; } public static HSSFWorkbook exportExcel(List dataList,String headers1[],String headers2[], Object[] columnId,String sheetName) throws Exception { HSSFWorkbook workbook = null; BufferedImage bufferImg=null; try { // 创建工作簿实例 workbook = new HSSFWorkbook(); // 创建工作表实例 HSSFSheet sheet = workbook.createSheet(sheetName); HSSFPatriarch patriarch=sheet.createDrawingPatriarch(); // 设置列宽 PoiExportExcelSuport.setSheetColumnWidth(sheet,6); // 获取样式 HSSFCellStyle style = PoiExportExcelSuport.createTitleStyle(workbook); // 生成并设置另一个样式 HSSFCellStyle style2 = PoiExportExcelSuport.createContentStyle(workbook); if (dataList != null && dataList.size() > 0) { // 创建第一行标题,标题名字的本地信息通过resources从资源文件中获取 HSSFRow row = sheet.createRow(0);// 建立新行 sheet.addMergedRegion(new CellRangeAddress(0, (short)1, 0, 0)); sheet.addMergedRegion(new CellRangeAddress(0, 0, (short)1, (short)2)); sheet.addMergedRegion(new CellRangeAddress(0, 0, (short)3, (short)4)); sheet.addMergedRegion(new CellRangeAddress(0, (short)1, (short)5, (short)5)); for(int i=0;i HSSFCell cell = null; if(i==0){ cell = row.createCell(0); } if(i==1){ cell = row.createCell(1); } if(i==2){ cell = row.createCell(3); } if(i==3){ cell = row.createCell(5); } row.setHeight((short)(2*256)); cell.setCellStyle(style); HSSFRichTextString text = new HSSFRichTextString(headers1[i]); cell.setCellValue(text); } HSSFRow row2 = sheet.createRow(1);// 建立新行 for(int i=0;i HSSFCell cell = row2.createCell(i+1); row2.setHeight((short)(2*256)); cell.setCellStyle(style); HSSFRichTextString text = new HSSFRichTextString(headers2[i]); cell.setCellValue(text); } // 给excel填充数据 for (int i = 0; i < dataList.size(); i++) { row = sheet.createRow(i+2); row.setHeight((short)(2*256)); HSSFCell cell = row.createCell(0); cell.setCellStyle(style2); Map map=(Map)dataList.get(i); for(int j=0;j Object value=map.get(columnId[j]); String colValue=""; if(value!=null){ colValue=value.toString(); } if(columnId[j].toString().indexOf("image")>=0){//图片的处理 PoiExportExcelSuport.createCell(row, j, style2, HSSFCell.CELL_TYPE_BLANK, ""); ByteArrayOutputStream byteArray=new ByteArrayOutputStream(); bufferImg = ImageIO.read(new File(colValue)); ImageIO.write(bufferImg, "jpg", byteArray); HSSFClientAnchor anchor = new HSSFClientAnchor(5,5,0,0,(short)5,i+2,(short)6,i+3); anchor.setAnchorType(2); patriarch.createPicture(anchor , workbook.addPicture(byteArray.toByteArray(), HSSFWorkbook.PICTURE_TYPE_JPEG)); }else{ PoiExportExcelSuport.createCell(row, j, style2, HSSFCell.CELL_TYPE_STRING, colValue); } } } } else { PoiExportExcelSuport.createCell(sheet.createRow(0), 0, style, HSSFCell.CELL_TYPE_STRING, "查无资料"); } } catch (Exception e) { e.printStackTrace(); } return workbook; } private static void setSheetColumnWidth(HSSFSheet sheet,int cellNumber) { // 根据你数据里面的记录有多少列,就设置多少列 for(int i=0;i sheet.setColumnWidth(i, 6000); } } // 设置excel的title样式 private static HSSFCellStyle createTitleStyle(HSSFWorkbook wb) { // HSSFFont boldFont = wb.createFont(); // boldFont.setFontHeight((short) 200); HSSFCellStyle style = wb.createCellStyle(); style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex()); style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); style.setBorderBottom(HSSFCellStyle.BORDER_THIN); style.setBorderLeft(HSSFCellStyle.BORDER_THIN); style.setBorderRight(HSSFCellStyle.BORDER_THIN); style.setBorderTop(HSSFCellStyle.BORDER_THIN); style.setAlignment(HSSFCellStyle.ALIGN_CENTER); style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 生成一个字体 HSSFFont font = wb.createFont(); font.setColor(HSSFColor.VIOLET.index); font.setFontHeightInPoints((short) 12); font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); // 把字体应用到当前的样式 style.setFont(font); return style; } //创建内容样式 private static HSSFCellStyle createContentStyle(HSSFWorkbook wb) { HSSFFont boldFont = wb.createFont(); boldFont.setFontHeight((short) 200); HSSFCellStyle style = wb.createCellStyle(); style.setFillForegroundColor(HSSFColor.WHITE.index); style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); style.setBorderBottom(HSSFCellStyle.BORDER_THIN); style.setBorderLeft(HSSFCellStyle.BORDER_THIN); style.setBorderRight(HSSFCellStyle.BORDER_THIN); style.setBorderTop(HSSFCellStyle.BORDER_THIN); style.setAlignment(HSSFCellStyle.ALIGN_CENTER); style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 生成另一个字体 HSSFFont font2 = wb.createFont(); font2.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL); // 把字体应用到当前的样式 style.setFont(font2); return style; } // 创建Excel单元格 private static void createCell(HSSFRow row, int column, HSSFCellStyle style, int cellType, Object value) { HSSFCell cell = row.createCell(column); if (style != null) { cell.setCellStyle(style); } switch (cellType) { case HSSFCell.CELL_TYPE_BLANK: { } break; case HSSFCell.CELL_TYPE_STRING: { cell.setCellValue(value.toString()); } break; case HSSFCell.CELL_TYPE_NUMERIC: { cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC); cell.setCellValue(Double.parseDouble(value.toString())); } break; default: break; } } public static void main(String[] args) { /*context=new ClassPathXmlApplicationContext("applicationContext-*.xml"); entHiddenDangerRecImpl=(IEntHiddenDangerRec)context.getBean("entHiddenDangerRecImpl"); List lists=entHiddenDangerRecImpl.queryByQyid(9461, null); String headers1[]={"序号","重大隐患","一般隐患","隐患图片"}; String headers2[]={"经营场地","隐患类别","隐患级别","上报时间"}; String columnIds[]={"number","proAddr","yhlb","yhjb","scsj","hdmimage"}; List mapList=new ArrayList(); int num=1; for(EntHiddenDangerRec info:lists){ Map map=new HashMap(); map.put("number", num); map.put("proAddr", info.getEntProAddress().getScjydzmc()); map.put("yhlb", info.getSysSelfExaClassField().getZcbzlbmc()); map.put("yhjb", info.getYhfj()==0?"一般隐患":"重大隐患"); map.put("scsj", DateFormatUtil.convertDateToY_M_D(info.getScsj())); map.put("hdmimage", "D:/TestFile/1234fangwen.bmp"); mapList.add(map); num++; } System.out.println(); try { HSSFWorkbook workbook = PoiExportExcelTest.exportExcel(mapList, headers1,headers2, columnIds, "隐患信息"); FileOutputStream fout = new FileOutputStream("D:/TestFile/hdinfoList.xls"); workbook.write(fout); fout.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); }*/ } }