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");
      }
    });

时间: 2024-07-31 14:21:39

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

java导出数据库里的数据至Excel进行数据备份

调用部分: package com.otdrmsys.action; import com.otdrmsys.util.ResultSetToExcel; public class ExcelExport { public static void main(String[] args) { // String fileName = "otdr";//文件名,不带路径,不带.xls后缀 // String [] coloumItems = {"otdr编号",&quo

运用反射原理的简单工厂模式和运用反射原理从数据库里读出数据直接封装到实体集合里

一:简单工厂 最初学习的一个运用简单工厂的例子是做一个计算器: 首先是接口 public interface Cal { public double Calcu(double num1,double num2); } 然后是加减乘除类实现计算接口: public class Add implements Cal{ @Override public double Calcu(double num1, double num2) { return num1+num2; } } 再写一个工厂类,里面有一

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

TreeView树形控件递归绑定数据库里的数据. 第一步:数据库中查出来的表,字段名分别为UNAME(显示名称),DID(关联数据),UTYPE(类型) 第二步:前台代码 1 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="tree.aspx.cs" Inherits="Maticsoft.Web.tree" %> 2 3 <!DOCTYPE

[SQL]取得数据库里的数据表、字段、型态、长度、数据结构等资讯

如果想动态做查询条件,或是撰写表单产生器,以及动态产生表单,可以利用以下语法,放到检视表里以供使用. 如果想动态做查询条件,或是撰写表单产生器,以及动态产生表单,可以利用以下语法,放到检视表里以供使用. 假设我数据库里有两个数据表分别为Departments和Employees如下: Departments 数据行名称 数据类型 长度 允许Null dno varchar 50 0 name varchar 50 0 manager varchar 50 0 budget int 4 0 Emp

取得数据库里的数据表、字段、型态、长度、数据结构等资讯 (SQL Server 2008)

取得数据库里的数据表.字段.型态.长度.数据结构等资讯 ?SELECT???????? dbo.sysobjects.name AS sTableName,?????????????????????????? dbo.syscolumns.name AS sColumnsName,?????????????????????????? dbo.syscolumns.prec AS iColumnsLength,?????????????????????????? dbo.syscolumns.co

Android-Android文件存储之将数据保存在data目录下

在平常使用Android手机的时候,我们都知道,几乎每一个app都在/data/data/<相应的包名>的文件夹下保存数据.那这些数据怎么进行保存的呢?在这里,将简单的介绍一下. 1.将数据保存在文件中  Context类中有一个openFileOutPut方法,这个方法可以将我们的数据保存在data目录下的文件里面. openFileOutput(String name, int mode)方法中带两个参数,第一个参数是文件名,这里只能写文件的名字,不能包含路径,因为所有的数据都保存在/da

JAVA之IO技术-获取指定目录下的文件夹和文件的File对象或是字符串名称。

package ioTest.io3; /* * 获取指定目录下的文件夹和文件的File对象或是字符串名称. * 也可以通过filter获取指定的文件夹或者指定类型的文件 * 这里面需要做一个总结,如何利用jdk的源码去理解不熟悉的方法的应用. */ import java.io.File; import java.io.FileFilter; import java.io.FilenameFilter; public class FileDemo2 { public static void m

Java版本的删除指定目录下名叫“xxx.txt”文件名的文件

以前写过一个python版本的,但是在查找文件路径的时候出现错误,无法正确的获取到文件的路径,就造成无法删除该路径下的“xxx.txt”文件. 当时以为是windows版本系统的错误造成这个问题的,也就没有继续深究,就把这个bug给放过了. 最近一段时间在学习android,肯定要用的java了,就用java实现了下,思路的话,肯定还是以前的了,结果还是出错,后来仔细的看了看代码,其实是自己的bug. 把代码贴下:(主要功能,删除指定目录下名叫"pylist.txt"的所有文件,使用递

JAVA之File类-将指定目录下的所有java文件的绝对路径存储到文本文件中

/* * 将指定目录下的所有java文件的绝对路径存储到文本文件中 * 建立一个java列表. * 思路: * 1.对指定目录进行递归 * 2.获取递归过程所有的java文件的路径 * 3.将这些路径存储在集合中 * 4.将集合中的内容写到文本文件 * 注:3,4步骤也可以合并成一个步骤 */ package ioTest.io3; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; imp