zoukankan      html  css  js  c++  java
  • 导出excel

    <div id="rds_list_toolbar" style="padding:5px;">
                <a id="slowLogs_excel_btn" href="javaScript:void(0);" class="easyui-linkbutton" data-options="iconCls:'icon-edit'">导出Excel</a>
            </div>

    点击之后:

    $("#slowLogs_excel_btn").click(function(){
                      //获取查询加载数据的总数
                      var total=dataGridTable.datagrid('getData').total;
                      console.info(total);
                      var url=webContext+'/rds/rds_exportSlowLogsList.action?rds.dbinstanceid='+dbinstanceid
                          +'&engine='+engine+'&start_time='+$('#start_time').datebox('getValue')
                          +'&end_time='+$('#end_time').datebox('getValue')+'&dBName='+$('#dBName').combobox('getValue')
                          +'&total='+total;
                      $('#slowLogs_excel_btn').attr("href", url);
                      /* Ajax('/rds/rds_exportSlowLogsList.action?rds.dbinstanceid='+dbinstanceid+'&engine='+engine,{
                          start_time:$('#start_time').datebox('getValue'),
                        end_time:$('#end_time').datebox('getValue'),
                        dBName:$('#dBName').combobox('getValue')
                      },function(data){
                          if(data.success){
                              //Alert('提示','删除成功!');
                          }else{
                              Alert('提示','导出excel失败:'+data.msg);  
                          }
                    }); */
                });

    java代码(action):

    // 慢sql统计-导出excel
        public String exportSlowLogsList() {
            HttpServletRequest request = ServletActionContext.getRequest();
            String engine = request.getParameter("engine");
            String dBName = request.getParameter("dBName");
            String start_time = request.getParameter("start_time");
            String end_time = request.getParameter("end_time");
            //要导出的总记录数
            String total = request.getParameter("total");
            if (StringUtils.isNotEmpty(start_time)) {
                rds.setStartTime(start_time + "Z");
            }
            if (StringUtils.isNotEmpty(end_time)) {
                rds.setEndTime(end_time + "Z");
            }
            rds.setDbName(dBName);
            rds.setPageNo(1);
            if(total==null||Integer.parseInt(total)<=30){
                //最小也要设置30条数据
                rds.setPageSize(30);
            }else{
                //大于30条
                rds.setPageSize(Integer.parseInt(total));
            }
            try {
                rdsManager.exportSlowLogsList(rds,engine,dBName);
                simpleJSON.put("success", true);
            } catch (Exception e) {
                simpleJSON.put("success", false);
                simpleJSON.put("msg", e.getMessage());
                e.printStackTrace();
            }
            return null;
        }
    View Code

    manager代码:

    public void exportSlowLogsList(Rds entity, String engine, String dBName)
                throws Exception {
            try {
                RdsDescribeErrorLogsVO errorLogsVO = new RdsDescribeErrorLogsVO();
                errorLogsVO.setdBInstanceId(entity.getDbinstanceid());
                errorLogsVO.setStartTime(entity.getStartTime());
                errorLogsVO.setEndTime(entity.getEndTime());
                errorLogsVO.setPageNumber((long) entity.getPageNo());
                errorLogsVO.setPageSize((long) entity.getPageSize());
                if ("SQLServer".equals(engine)) {
                    errorLogsVO.setSortKey("TotalQueryTimes");
                }
                if (!"全部数据库".equals(dBName)) {
                    errorLogsVO.setdBName(dBName);
                }
                errorLogsVO.setOwnerId(SysParametersUtil
                        .getParameterValueForDefault("AliyunAdminOwnerId",
                                "1467232540347717"));
                RdsDescribeErrorLogsVO response = (RdsDescribeErrorLogsVO) new RdsClientInterface()
                        .pcitcExecute(errorLogsVO, new DescribeSlowLogsRequest(),
                                new DescribeSlowLogsResponse());
                if (!response.isSuccess()) {
                    throw new RuntimeException(" 错误代码:" + response.getErrorCode()
                            + "  描述:" + response.getMessage());
                } else {
                    HttpServletResponse hresponse = ServletActionContext
                            .getResponse();
                    List<SQLSlowLog> list = response.getItems();
                    ExcelExport eet = new ExcelTemRDSExport(getExportTemplate(list,
                            entity.getDbinstanceid()), hresponse, entity);
                    eet.export();
                }
            } catch (Exception e) {
                throw e;
            }
    
        }
    View Code

    ExcelTemRDSExport:

    package com.aliyun.util.excel;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.List;
    import java.util.Map;
    
    import javax.servlet.http.HttpServletResponse;
    
    import org.apache.poi.xssf.usermodel.XSSFCell;
    import org.apache.poi.xssf.usermodel.XSSFCellStyle;
    import org.apache.poi.xssf.usermodel.XSSFColor;
    import org.apache.poi.xssf.usermodel.XSSFFont;
    import org.apache.poi.xssf.usermodel.XSSFRow;
    import org.apache.poi.xssf.usermodel.XSSFSheet;
    import org.apache.poi.xssf.usermodel.XSSFWorkbook;
    
    import com.aliyun.pcitcAliyun.rds.model.Rds;
    import com.sinopec.common.exception.BaseRuntimeException;
    import com.sinopec.common.util.PlatForm;
    
    /**
     * excel导出RDS慢SQL信息
     *@Description 
     * @author longjiazuo
     * @created 2015年7月17日 下午1:48:05
     * @version 
     * @history
     * @see
     */
    public class ExcelTemRDSExport extends ExcelExport{
    
        private Rds rds;
        
        public ExcelTemRDSExport(ExportDateTemplate eeb, HttpServletResponse response,Rds rds) {
            super(eeb, response);
            this.rds=rds;
            // TODO 自动生成的构造函数存根
        }
        /**
         * 如果使用模板的方式导出excel数据,该方法可以获取模板存放的路径
         */
        public String getFileName(){
            String webRoot=PlatForm.getAbsolutePath();    
            String filePath=webRoot+"/"+eeb.getPath()+"/"+eeb.getRelativePath()+"/"+eeb.getTemplateName();
            return filePath;
        }
        public  void createXSSFWorkbook() throws FileNotFoundException, IOException{
            String fileName = getFileName();
            File excel = new File(fileName);
            xworkbook = new XSSFWorkbook(new FileInputStream(excel));
            if(!excel.exists()){
                throw new BaseRuntimeException("模板文件:" + fileName + "  不存在");
            }    
            createSheet(0);
             
            List<List<Map<Integer,Object>>> sheetList=eeb.getSheetData();
            for(int i=1;i<sheetList.size();i++){
                createSheet(i);
            }
        }
        
        //创建工作簿并装配数据
        public  void createSheet(int sheetNumber) {
            if(sheetNumber<0)
                return;
            try {            
                XSSFSheet xssfSheet=null;
                //用指定模板,获取工作簿 
                xssfSheet=xworkbook.getSheetAt(sheetNumber); 
                List<Map<Integer,Object>> data=null;
                if(sheetNumber==0)
                    data= eeb.getData();    
                else 
                    data=eeb.getSheetData().get(sheetNumber);
                if(data!=null){
                    //创建单元格样式
                    XSSFCellStyle cellStyle=xworkbook.createCellStyle();
                    cellStyle.setAlignment(XSSFCellStyle.VERTICAL_CENTER);// 指定单元格垂直居中对齐 
                    //创建单元格字体
                    XSSFFont font=xworkbook.createFont();
                    font.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD);
                    font.setFontName("Arial");
                    //font.setFontHeight((short) 300);
                    font.setFontHeightInPoints((short)10);
                    cellStyle.setFont(font); 
                    //创建自定义行和列
                    //数据库名称行
                    XSSFRow row0=xssfSheet.createRow(0);
                    XSSFCell cell0_0=row0.createCell(0);
                    cell0_0.setCellValue("表格名称");
                    cell0_0.setCellStyle(cellStyle);
                    XSSFCell cell0_1=row0.createCell(1);
                    cell0_1.setCellValue("慢日志汇总");
                    cell0_1.setCellStyle(cellStyle);
                    //数据库名称行
                    XSSFRow row1=xssfSheet.createRow(1);
                    XSSFCell cell1_0=row1.createCell(0);
                    cell1_0.setCellValue("数据库名称");
                    cell1_0.setCellStyle(cellStyle);
                    XSSFCell cell1_1=row1.createCell(1);
                    cell1_1.setCellValue(rds.getDbName());
                    cell1_1.setCellStyle(cellStyle);
                    //起始时间行
                    XSSFRow row2=xssfSheet.createRow(2);
                    XSSFCell cell2_0=row2.createCell(0);
                    cell2_0.setCellValue("起始时间");
                    cell2_0.setCellStyle(cellStyle);
                    XSSFCell cell2_1=row2.createCell(1);
                    cell2_1.setCellValue(rds.getStartTime().replace("Z", ""));
                    cell2_1.setCellStyle(cellStyle);
                    //结束时间行
                    XSSFRow row3=xssfSheet.createRow(3);
                    XSSFCell cell3_0=row3.createCell(0);
                    cell3_0.setCellValue("结束时间");
                    cell3_0.setCellStyle(cellStyle);
                    XSSFCell cell3_1=row3.createCell(1);
                    cell3_1.setCellValue(rds.getEndTime().replace("Z", ""));
                    cell3_1.setCellStyle(cellStyle);
                    for(int i=0,rowstart=eeb.getStartRow(sheetNumber); i<data.size(); i++,rowstart++){
                        Map<Integer,Object> rowdata = data.get(i);
                        XSSFRow row=xssfSheet.createRow(rowstart);
                         
                        for(int j=0,colstart=eeb.getStartCol(sheetNumber); j<rowdata.size(); j++,colstart++){
                            XSSFCell cell=row.createCell(colstart);
                            Object value=rowdata.get(Integer.valueOf(j));
                            if(value==null||value.equals("")){
                                cell.setCellValue("");    
                            }
                            else if (value instanceof Date) {
                                String pattern="yyyy-MM-dd";
                                Date date = (Date) value;
                                SimpleDateFormat sdf = new SimpleDateFormat(pattern);
                                cell.setCellValue(sdf.format(date));
                            } 
                            else{ 
                                //System.out.println(value);
                                cell.setCellValue(value.toString());    
                            }
                        }
                    }
                } 
            } catch (Exception e) {
                throw new BaseRuntimeException("创建工作薄组装数据时发生异常", e);
            }
        }
    }
    View Code

    ExcelExport:

    package com.aliyun.util.excel;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.io.UnsupportedEncodingException;
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import javax.servlet.ServletOutputStream;
    import javax.servlet.http.HttpServletResponse;
    
    import org.apache.log4j.Logger;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.apache.poi.xssf.usermodel.XSSFCell;
    import org.apache.poi.xssf.usermodel.XSSFRow;
    import org.apache.poi.xssf.usermodel.XSSFSheet;
    import org.apache.poi.xssf.usermodel.XSSFWorkbook;
    
    
    
    import com.sinopec.common.excel.exp.ExcelExportColAttr.CellValType;
    import com.sinopec.common.exception.BaseRuntimeException;
    import com.sinopec.common.util.PlatForm;
    import com.sinopec.system.SysConstants;
    import com.sinopec.system.workflow.service.imp.WkflwManagerImp;
    
    @SuppressWarnings("unused")
    public abstract class ExcelExport {
        private static Logger log = Logger.getLogger(WkflwManagerImp.class.getName());
         
    
        /**
         * 声明一个工作薄由子类完成其对象的创建
         */ 
        protected  XSSFWorkbook xworkbook = null;
        /**
         * 具体的导出excel数据的业务实现类
         */
        protected ExportDateTemplate eeb = null;
        protected ExportDateTemplate[] eebes = null;
        /**
         * 请求响应对象
         */
        private HttpServletResponse response;
    
        public ExcelExport(ExportDateTemplate eeb, HttpServletResponse response) {
            this.eeb = eeb;
            this.response = response;
        }
        public ExcelExport(ExportDateTemplate[] eebes, HttpServletResponse response) {
            this.eebes = eebes; 
            this.response = response;
        }
        public abstract void createXSSFWorkbook()throws Exception; 
        /**
         * 调用此方法,导出excel数据
         * @author hanxg
         * @date 2012-11-27
         */
        public void export(){
            OutputStream outs = null;
            try {
                outs = response.getOutputStream();
                   this.setResponse();
            //    outs = new FileOutputStream(new File("d:\testexport.xls"));
                createXSSFWorkbook();
                if (xworkbook == null)
                    throw new BaseRuntimeException("创建工作薄失败");
                xworkbook.write(outs);
                outs.flush();
            } catch (Exception e) {
                throw new BaseRuntimeException("创建WritableWorkbook发生异常", e);
            }finally {
                try {
                    if(outs!=null){
                      outs.close();
                    }
                } catch (Exception e) {
                    throw new BaseRuntimeException("导出excel关闭流时发生异常", e);
                } 
            }
        }
        
        private void setResponse() {
            String newName = null;
            try {
                if(eeb!=null)
                      newName =  eeb.getFileName();
                else
                    newName =eebes[0].getFileName();
                newName=new String(newName.getBytes("GBK"), "iso8859-1");     
    //            //weblogic
    //            if(SysConstants.APPSERVER.equalsIgnoreCase("weblogic")){
    //                newName=new String(newName.getBytes(), "iso8859-1");
    //            }
    //            else{//tomcat
    //            if(eeb!=null)
    //              newName = new String(newName.getBytes(), "iso8859-1");
    //            else
    //                 newName = new String(newName.getBytes(), "iso8859-1");
    //            }             
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
            response.setContentType("application/octet-stream;");
            response.setHeader("Content-Disposition", "attachment;filename=" + newName);
        }
    
        public static void main(String[] args) throws FileNotFoundException{
    
    //            InputStream    input=Thread.currentThread().getContextClassLoader().getSystemResourceAsStream("com/sinopec/common/excel/imp/testbean.xlsx");
    //            FileOutputStream ost=new FileOutputStream(new File("d:testexport.xlsx"));
    //            TestTemplate tt=new TestTemplate();
    //            ExcelExport ee=new ExcelNoTemExport(tt,null);
    //            ExcelExport eet=new ExcelTemExport(tt,null);    //有模板
    //            ee.export();
    //            eet.export();
                
        }
                
    
    }
    View Code
  • 相关阅读:
    滑雪
    2084 数塔HDU
    括号匹配(二)
    项链
    单调递增最长子序列
    矩形嵌套
    最长公共子序列
    poj3253
    表达式求值
    颜色16进制代码表显示和16进制数值对比显示方便查找
  • 原文地址:https://www.cnblogs.com/longshiyVip/p/4711434.html
Copyright © 2011-2022 走看看