数据写入到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");
      }
    });

flex+java将数据库里的数据导出到指定目录下excel表里(poi)的更多相关文章

  1. File操作-将数据库里的数据写入到指定路径的txt文件里

    package com.Cristin.File;//将数据库里的数据写入到指定路径的txt文件里 import java.io.File;import java.io.FileOutputStrea ...

  2. 【Java】数据库查询的数据直接以指定文件类型下载到本地(弹出下载框)

    欲实现的功能目标:当点击下图的导出数据文件时弹出文件下载框,默认csv格式,用户自定义下载的本地路径 遇到的问题: 1.项目之前做过一次下载,但是是使用了本地文件模板.用输入流读取文件模板,插入数据, ...

  3. java 跨数据库导入大数据

    java 跨数据库导入大数据 /** * java程序跨服务器跨数据库批量导入导出百万级数据 * @param args * @throws Exception */ public static vo ...

  4. Django数据操作F和Q、model多对多操作、Django中间件、信号、读数据库里的数据实现分页

    models.tb.objects.all().using('default'),根据using来指定在哪个库里查询,default是settings中配置的数据库的连接名称. 外话:django中引 ...

  5. TreeView树形控件递归绑定数据库里的数据

    TreeView树形控件递归绑定数据库里的数据. 第一种:性能不好 第一步:数据库中查出来的表,字段名分别为UNAME(显示名称),DID(关联数据),UTYPE(类型) 第二步:前台代码 <% ...

  6. 使用C#或javascript将Table里的数据导出到Excel

    原文:使用C#或javascript将Table里的数据导出到Excel Demo效果图: 用C#将Table数据导出Excel: 本方法已经将导出excel做成分部视图,引用时只需在视图中使用如下代 ...

  7. 如何将存储在MongoDB数据库中的数据导出到Excel中?

    将MongoDB数据库中的数据导出到Excel中,只需以下几个步骤: (1)首先,打开MongoDB安装目录下的bin文件夹,(C:\Program Files (x86)\MongoDB\Serve ...

  8. [软件共享]将数据库中的数据导出为SQL脚本

    可以直接将数据库中的数据导出为脚本,并可以自己设置过滤条件.使用方法很简单,不在多说了.下面是软件截图.123 下载:http://files.cnblogs.com/pw/mssql2.rar

  9. Java基础---Java---IO流-----File 类、递归、删除一个带内容的目录、列出指定目录下文件夹、FilenameFilte

    File 类 用来将文件或者文件夹封装成对象 方便对文件与文件夹进行操作. File对象可以作为参数传递给流的构造函数 流只用操作数据,而封装数据的文件只能用File类 File类常见方法: 1.创建 ...

随机推荐

  1. jquery 行交换 上移 下移

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. Android SDK的安装以及环境变量的配置

    想来试试app的开发,于是便需要在电脑上安装各种软件包,其中Android SDK就是其中一种,特地记录一下其安装过程: 1.下载地址http://baoku.360.cn/soft/show/app ...

  3. LevelDb简单介绍和原理——本质:类似nedb,插入数据文件不断增长(快照),再通过删除老数据做更新

    转自:http://www.cnblogs.com/haippy/archive/2011/12/04/2276064.html 有时间再好好看下整个文章! 说起LevelDb也许您不清楚,但是如果作 ...

  4. EF Code First 导航属性 与外键

    一对多关系 项目中最常用到的就是一对多关系了.Code First对一对多关系也有着很好的支持.很多情况下我们都不需要特意的去配置,Code First就能通过一些引用属性.导航属性等检测到模型之间的 ...

  5. [示例]NSEnumerator-使用枚举类型实现数组的逆序输出

    代码: #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepo ...

  6. InLineHookSSDT

    //当Ring3调用OpenProcess //1从自己的模块(.exe)的导入表中取值 //2Ntdll.dll模块的导出表中执行ZwOpenProcess(取索引 进入Ring0层) //3进入R ...

  7. 二模 (6) day2

    第一题: 题目大意:50*50的格子里玩贪吃蛇.给出N步扭头的操作,判断贪吃蛇会在第几步挂掉.(蛇初始向东) 解题过程: 1.一开始的方法是:为了加快速度,只保存头和尾的坐标,然后保存尾巴的方向,每次 ...

  8. Zabbix源码包安装

    Zabbix源码包安装 Cenos5.3 Basic server 安装顺序 Libxml2 Libmcrypt Zlib Libpng Jpeg:需要创建目录jpeg  /bin  /lib   / ...

  9. [转]jQuery Pagination Ajax分页插件中文详解

    在做项目时需要用到在前端页面中需要实现分页显示的功能,类似于博客园下面的分页导航.从网上找了几个,觉得下面这个使用起来非常简单,也很方便.特在这里记录一下. 以下为文章原文. 中文项目地址:http: ...

  10. 神奇的NOIP模拟赛 T2 LGTB 学分块

    LGTB 学分块 LGTB 最近在学分块,但是他太菜了,分的块数量太多他就混乱了,所以只能分成3 块今天他得到了一个数组,他突然也想把它分块,他想知道,把这个数组分成3 块,块可以为空.假设3 块各自 ...