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");
}
});
flex+java将数据库里的数据导出到指定目录下excel表里(poi)的更多相关文章
- File操作-将数据库里的数据写入到指定路径的txt文件里
package com.Cristin.File;//将数据库里的数据写入到指定路径的txt文件里 import java.io.File;import java.io.FileOutputStrea ...
- 【Java】数据库查询的数据直接以指定文件类型下载到本地(弹出下载框)
欲实现的功能目标:当点击下图的导出数据文件时弹出文件下载框,默认csv格式,用户自定义下载的本地路径 遇到的问题: 1.项目之前做过一次下载,但是是使用了本地文件模板.用输入流读取文件模板,插入数据, ...
- java 跨数据库导入大数据
java 跨数据库导入大数据 /** * java程序跨服务器跨数据库批量导入导出百万级数据 * @param args * @throws Exception */ public static vo ...
- Django数据操作F和Q、model多对多操作、Django中间件、信号、读数据库里的数据实现分页
models.tb.objects.all().using('default'),根据using来指定在哪个库里查询,default是settings中配置的数据库的连接名称. 外话:django中引 ...
- TreeView树形控件递归绑定数据库里的数据
TreeView树形控件递归绑定数据库里的数据. 第一种:性能不好 第一步:数据库中查出来的表,字段名分别为UNAME(显示名称),DID(关联数据),UTYPE(类型) 第二步:前台代码 <% ...
- 使用C#或javascript将Table里的数据导出到Excel
原文:使用C#或javascript将Table里的数据导出到Excel Demo效果图: 用C#将Table数据导出Excel: 本方法已经将导出excel做成分部视图,引用时只需在视图中使用如下代 ...
- 如何将存储在MongoDB数据库中的数据导出到Excel中?
将MongoDB数据库中的数据导出到Excel中,只需以下几个步骤: (1)首先,打开MongoDB安装目录下的bin文件夹,(C:\Program Files (x86)\MongoDB\Serve ...
- [软件共享]将数据库中的数据导出为SQL脚本
可以直接将数据库中的数据导出为脚本,并可以自己设置过滤条件.使用方法很简单,不在多说了.下面是软件截图.123 下载:http://files.cnblogs.com/pw/mssql2.rar
- Java基础---Java---IO流-----File 类、递归、删除一个带内容的目录、列出指定目录下文件夹、FilenameFilte
File 类 用来将文件或者文件夹封装成对象 方便对文件与文件夹进行操作. File对象可以作为参数传递给流的构造函数 流只用操作数据,而封装数据的文件只能用File类 File类常见方法: 1.创建 ...
随机推荐
- word-wrap word-break white-space 用法。
一.word-wrap使用: 语法: word-wrap : normal | break-word 取值说明: 1.normal和break-word,其中normal为默认值,当其值为normal ...
- eclipse 项目修改和更新项目,回退版本,解决分支的冲突的办法
一个关于git的图 1.我在github建立了3个分支. 2.把其中一个分支拉到本地. 项目修改提交到远程库 3.修改完代码以后commit项目,点击项目右击->team->commit ...
- BZOJ1579 [Usaco2009 Feb]Revamping Trails 道路升级
各种神作不解释QAQQQ 先是写了个作死的spfa本机过了交上去T了... 然后不想写Dijkstra各种自暴自弃... 最后改了一下步骤加了个SLF过了... 首先一个trivial的想法是$dis ...
- ORACLE数据泵还原(IMPDP命令)【转】
Oracle数据库还原IMPDP命令是相对于EXPDP命令的,方向是反向的.即对于数据库备份进行还原操作.一.知晓IMPDP命令 ? C:\>impdp -help Import: Rele ...
- outlook 用宏发邮件
经常发面试邮件,通常只是修改一下收件人邮箱地址,和收件人姓名,其他全部一致,有木有发现每次都用用outlook写邮件很麻烦? 使用宏发邮件,就会不麻烦了,直接修改下称呼,修改下收件人地址,按下F5,就 ...
- mysql 无法远程访问(授权也没办法,确切的说是因为只绑定了127IP)
默认状况下,出于安全考虑,mysql数据库屏蔽了远程访问功能. 然而在许多状况下,你需要在家或者从web程序去访问远端数据库服务器,这就相当麻烦了. 第一步: 激活网络设置你需要编辑mysql配置文件 ...
- CSS3学习教程:Media Queries详解
说起CSS3的新特性,就不得不提到 Media Queries . Media Queries 的引入,其作用就是允许添加表达式用以确定媒体的情况,以此来应用不同的样式表.换句话说,其允许我们在不改变 ...
- SQL语句大全(mysql,sqlserver,oracle)
SQL语句大全 --语句功能--数据操作SELECT --从数据库表中检索数据行和列-selectINSERT --向数据库表添加新数据行-insertDELETE --从数据库表中删除数据行-del ...
- SQL 调试:无法启动 T-SQL 调试。未能附加到 SQL Server 进程
将 Windows 登录帐户添加为 sysadmin 已经具有 sysadmin 特权的用户必须执行以下命令: sp_addsrvrolemember 'Domain\Name', 'sysadmin ...
- WCF服务编程中使用SvcMap实现类型共享等技巧【转】
原文链接:http://www.cr173.com/html/19026_1.html 国外的一篇文章:Sharing DataContracts between WCF Services 文中提到的 ...