datagrid数据及echarts图表导出到Excel

来源:互联网 发布:c51单片机 编辑:程序博客网 时间:2024/06/06 19:33

导包:

<!-- poi依赖的相关jar包 -->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.9</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.9</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-scratchpad</artifactId>
            <version>3.9</version>
        </dependency>


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
■页面说明:... ...
============================================================================--%>
<form name="统计分析表单" action="#" class="jeasy-panel" data-options="split:true,border:false" style="width: 100%; padding: 5px;">
    <fieldset class="form-field-find push-bottom">
        <legend>统计分析</legend>
        <table width="100%" border="0">
            <tr>
                <td>
                    <label>行政区划:</label>
                    <select class="jeasy-combobox" name="areaId" data-options="editable:false,url:'${ctx}/common/combobox/findBaseAreaId/4401'"></select>
                    <label style="padding-left: 120px;">示范评级:</label>
                    <select class="jeasy-combobox" name="cmtyLevel" data-options="editable:false,url:'${ctx}/common/combobox/findDicInfoId/levelType'"></select>
                </td>
            </tr>
            <tr>
                <td align="right">
                    <a href="#" title="导出" class="jeasy-linkbutton" iconCls="icon-add">导出</a>
                    <a href="#" title="查询" class="jeasy-linkbutton" iconCls="icon-find">查询</a>
                    <a href="#" title="清空" class="jeasy-linkbutton" iconCls="icon-clear">清空</a>
                </td>
            </tr>
        </table>
    </fieldset>
    <table title="显示统计分析列表" width="100%" data-options='url:"${ctx}/statis/statisticsAnalyze"'></table>
    <!-- EChart图表展示 -->
    <div style="margin-top:5px;margin-bottom: 10px;">
        <div title="防震减灾示范-图" class="jeasy-panel" style="width: 69%;">
            <div id="FZJZchart01" style="height: 350px;width: 96%;margin: 10px auto;"></div>
        </div>
    </div>    
</form>
<script type="text/javascript" src="${ctx}/webview/eqkDemo/statisticAnalysis/script/jeasy.statisticAnalysis.js" charset="UTF-8"></script>
<script type="text/javascript" src="${ctx}/resources/scripts/DateUtils.js" charset="UTF-8"></script>
<script type="text/javascript" src="${ctx}/resources/scripts/ECharts/echarts-all.min.js"></script>
<script type="text/javascript">
    /**
     * 系统页面加载后初始化处理.
     */
    $(function() {
        $("table[title=显示统计分析列表]").statisticAnalysis("findStatisticAnalysis");

        //获取图表数据
        var data = getEchartData("form[name=统计分析表单]","${ctx}/statis/findStatisChartCol");
        var myEcharts = echarts.init(document.getElementById("FZJZchart01"));
        playChartCol(myEcharts, "示范单位统计", '类别', '数量', data);
        
        $("form[name=统计分析表单] a[title=查询]").on("click", function() {
            $("table[title=显示统计分析列表]").statisticAnalysis("reload");
            
            var data = getEchartData("form[name=统计分析表单]","${ctx}/statis/findStatisChartCol");
            playChartCol(myEcharts, "防震减灾汇总", '类别', '数量', data);
                
        });

        $("form[name=统计分析表单] a[title=导出]").on("click", function() {
            $("table[title=显示统计分析列表]").statisticAnalysis("deriveData",{myEcharts:myEcharts});
        });

        $("form[name=统计分析表单] a[title=清空]").on("click", function() {
            $("form[name=统计分析表单]").core("clear");
        });

    });

</script>

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="<form action='"+ url +"' method='post' name='attachDonwForm' enctype='multipart/form-data' target='attachDonwForm'>" +
                "<input type='hidden' name='areaId' />" +
                "<input type='hidden' name='cmtyLevel' />" +
                "<input type='hidden' type='text' name='files' class='jeasy-filebox filebox-long jeasy-validatebox' />" +
                "</form><iframe name='attachDonwForm' style='display:none;' />";
        $("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<StatisticAnalysisDto> deriveData(StatisticAnalysisDto dto,HttpServletRequest request,
            HttpServletResponse response){
        logger.info("进入->查询打印的防震减灾数据");
        
        List<StatisticAnalysisDto> lists = new ArrayList<StatisticAnalysisDto>();
        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<Object> values = new ArrayList<Object>();
            values.add(StringSupport.mkEqual(dto.getAreaId()));
            values.add(StringSupport.mkEqual(dto.getCmtyLevel()));
            
            List<StatisticAnalysisDto> dtoList1 = DBService.findEntities(hql.toString(), regulars1, values.toArray());
            List<StatisticAnalysisDto> dtoList2 = DBService.findEntities(hq2.toString(), regulars2, values.toArray());
            List<StatisticAnalysisDto> 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<Map> mapList=new ArrayList<Map>();
            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 = "<script type='text/javascript'>alert('"+message+"');</script>";
                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<Map>
     * @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<headers.length;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<columnId.length;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<headers1.length;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<headers2.length;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<columnId.length;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<cellNumber;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<EntHiddenDangerRec> lists=entHiddenDangerRecImpl.queryByQyid(9461, null);
        String headers1[]={"序号","重大隐患","一般隐患","隐患图片"};
        String headers2[]={"经营场地","隐患类别","隐患级别","上报时间"};
        String columnIds[]={"number","proAddr","yhlb","yhjb","scsj","hdmimage"};
        List<Map> mapList=new ArrayList<Map>();
        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();
        }*/
    }

}



0 0