zoukankan      html  css  js  c++  java
  • flex+java将数据库里的数据导出到指定目录下excel表里(poi)

    数据写入到excel中采用的是Apache POI:

    //java后台的一个工具类(该工具类适用于为不同字段添加,方便)

    /* 下面这个方法是将list转换为Excel工作表的 */
      public static HSSFWorkbook getWorkbook(List<ExporTable> list)
        throws Exception {
        HSSFWorkbook workbook = new HSSFWorkbook();
        HSSFSheet sheet = workbook.createSheet("sheet1");
        String[] columnNames;
        String[] columnMethods;

        // 首先,我们读取list中的第一个元素,根据它来确定工作表的列名,以及输出数据所对应的方法数组
        ExporTable exp = list.get(0);
        columnNames = exp.getColumnNames();
        columnMethods = exp.getColumnMethods();

        HSSFRow row = sheet.createRow(0); // 创建第1行,也就是输出表头
        HSSFCell cell;
        for (int i = 0; i < columnNames.length; i++) {
          cell = row.createCell(i); // 创建第i列
          cell.setCellValue(new HSSFRichTextString(columnNames[i]));
        }

        // 下面是输出各行的数据
        for (int i = 0; i < list.size(); i++) {
          exp = (ExporTable) list.get(i);
          row = sheet.createRow(i + 1);// 创建第i+1行
          for (int j = 0; j < columnMethods.length; j++) {
            cell = row.createCell(j);// 创建第j列
            Method method;
            method = exp.getClass().getMethod(columnMethods[j]); // 这里用到了反射机制,通过方法名来取得对应方法返回的结果对象
            Object obj = method.invoke(exp);
            if (obj != null) {
              cell.setCellValue(obj.toString());
            }
          }
        }
        return workbook;
    }

    /**
    * 将ExportBean转换为Excel工作表
    *
    * @param exportBeans 集合,每个元素代表一个sheet
    * @return
    * @throws Exception
    */
    public static HSSFWorkbook getWorkbooks(ExportBean<?>... exportBeans)
        throws Exception {

        HSSFWorkbook workbook = new HSSFWorkbook();

        HSSFCellStyle cellStyle = workbook.createCellStyle();
        cellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy h:mm"));

        for (ExportBean<?> eb : exportBeans) {
        HSSFSheet sheet = workbook.createSheet(eb.getSheetName());

        String[] headers = eb.getHeaders();

        HSSFRow row = sheet.createRow(0); // 创建第1行,也就是输出表头
        HSSFCell cell;

        // 设置表头粗体样式
        HSSFFont font = workbook.createFont();
        font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
        HSSFCellStyle cellStyleHeader = workbook.createCellStyle();
        cellStyleHeader.setFont(font);

        for (int i = 0; i < headers.length; i++) {
        // 设置列宽
        sheet.setColumnWidth((short) i, 6000);
        cell = row.createCell(i); // 创建第i列
        cell.setCellStyle(cellStyleHeader);

        cell.setCellValue(new HSSFRichTextString(headers[i]));
        }

        String[] getMethods = eb.getGetMethods();
        List rows = eb.getRows();

        // 下面是输出各行的数据
        for (int i = 0; i < rows.size(); i++) {
          Object rowData = rows.get(i);
          row = sheet.createRow(i + 1);// 创建第i+1行

          for (int j = 0; j < getMethods.length; j++) {

          cell = row.createCell(j);// 创建第j列
          // cell.setCellStyle(cellStyle);
          Method method = null;
          try {
            method = rowData.getClass().getMethod(getMethods[j]); // 这里用到了反射机制,通过方法名来取得对应方法返回的结果对象
          } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
          }
            Object obj = method.invoke(rowData);
              if (obj != null) {
            // cell.setCellType(HSSFCell.);
            if (obj instanceof java.util.Date) {
                cell.setCellValue((java.util.Date) obj);
                cell.setCellStyle(cellStyle);
            } else if (obj instanceof BigDecimal) {
                cell.setCellValue(((BigDecimal) obj).longValue());
            } else {
                cell.setCellValue(obj.toString());
            }
          }
        }
      }

    }
    return workbook;
    }

        // 将Workbook写入到InputStream
        public static InputStream workbook2InputStream(HSSFWorkbook workbook,
            ByteArrayOutputStream baos, String fileName) throws Exception {
            workbook.write(baos);
            baos.flush();
            byte[] aa = baos.toByteArray();
            InputStream excelStream = new ByteArrayInputStream(aa, 0, aa.length);
            return excelStream;
        }

        // 将Workbook写入到byte数组
        public static byte[] workbook2ByteArray(HSSFWorkbook workbook,
            ByteArrayOutputStream baos) throws Exception {
            workbook.write(baos);
            baos.flush();
            byte[] aa = baos.toByteArray();
            return aa;
        }

    /**
    * 考虑到多sheet情况暂时加个数据结构封装下吧
    * @author 王云超
    * 时间 2014-7-16 下午5:30:23
    */
      public class ExportBean<T> {

        private String sheetName ; //sheet名称

        private String[] headers; //表头
        private String[] getMethods; //方法集合
        private List<T> rows; //数据行

        public String[] getGetMethods() {
            return getMethods;
        }
        public void setGetMethods(String[] getMethods) {
            this.getMethods = getMethods;
        }
        public String getSheetName() {
            return sheetName;
        }
        public void setSheetName(String sheetName) {
            this.sheetName = sheetName;
        }

        public String[] getHeaders() {
            return headers;
        }
        public void setHeaders(String[] headers) {
            this.headers = headers;
        }
        public List<T> getRows() {
            return rows;
        }
        public void setRows(List<T> rows) {
            this.rows = rows;
        }
    }

    //java代码:

    public void DbToExcels(){

        byte[] bytes = null;

        try {

          ExportBean<CirCuit> eb = new ExportBean<CirCuit>();
          eb.setHeaders(new String[] { "id","名字","时间" });
          eb.setGetMethods(new String[] {"getId","getCircuit_type","getSystem_id"});
          List<CirCuit> list = cirCuitBo.findAll();
          eb.setRows(list);
          eb.setSheetName("信息");
          HSSFWorkbook workbook = PoiUtil.getWorkbooks(eb);
          ByteArrayOutputStream baos = new ByteArrayOutputStream();
          bytes = PoiUtil.workbook2ByteArray(workbook, baos);

          } catch (Exception e) {
            e.printStackTrace();
            log.error("导出数据失败",e);
          }
            return bytes;
          }

        //flex代码

        Alert.show("是否要保存文件!","提示",Alert.YES|Alert.NO,null,function(evt){
          if(evt.detail == Alert.YES){
            var fileRef:FileReference = new FileReference();
            fileRef.save(data.result,"信息表.xls");
          }
        });

  • 相关阅读:
    关于unicode编码问题——[ASIS 2019]Unicorn shop
    cve-2020-7066 ssrf漏洞——GKCTF2020
    updatexml()报错注入——[极客大挑战 2019]HardSQL
    用户名和密码分开检验产生的mysql注入——[GXYCTF2019]BabySQli
    安恒月赛——Ezunserialize(反序列化字符逃逸)
    记一次Flask模板注入学习 [GYCTF2020]FlaskApp
    [CISCN2019 华北赛区 Day2 Web1]Hack World
    [SUCTF 2019]CheckIn(user.ini文件构成的php后门)
    sql注入用<>绕过被过滤的select ——百度杯9月第二场SQL
    剑指offer32 从上到下打印二叉树(叁)
  • 原文地址:https://www.cnblogs.com/tianmengwei/p/4980868.html
Copyright © 2011-2022 走看看