- 浏览: 1295672 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (471)
- Database (29)
- Java (47)
- Frameworks (9)
- JavaScript (30)
- Others (27)
- ExtJS (26)
- Linux (49)
- Windows (11)
- Web (8)
- Ubunt (9)
- Shell (21)
- MySQL (26)
- Redis (9)
- Git (6)
- Maven (29)
- Python (3)
- Nginx (10)
- Nodejs (7)
- Network (1)
- GO (2)
- Docker (36)
- MongoDB (5)
- Intellij idea (7)
- Ruby (3)
- Weblogic (3)
- CSS (15)
- VMware (3)
- Tomcat (6)
- Cache (2)
- PHP (8)
- Mac (7)
- jQuery (3)
- Spring (8)
- HTML5 (2)
- Kubernetes (8)
最新评论
-
masuweng:
Intellij idea 主题下载网址 -
mimicom:
还有一个情况, 也是连不上 2018-05-06T06:01: ...
docker-compose 部署shipyard -
lixuansong:
put()方法调用前必须先手动调用remove(),不然不会实 ...
JavaScript创建Map对象(转) -
jiao_zg22:
方便问下,去哪里下载包含Ext.ux.TabCloseMenu ...
Ext.ux.TabCloseMenu插件的使用(TabPanel右键关闭菜单) 示例 -
netwelfare:
对于基本类型的讲解,文章写的有点简单了,没有系统化,这篇文章介 ...
Java 基础类型范围
JXL导出Excel数据表
封装了一个简单易用、通用、动态的从数据库导出到Excel的方法,可以动态的指定导出那些列,显示什么名字,按什么顺序显示;支持本地文件存储和JSP/Servlet文件下载。
本方法包括两个类,Column是辅助类,Excel是主类:
Column:
/** * 用于Excel导出的辅助类,映射数据结果集(ResultSet)内列名的元数据和Excel内的显示列名 */ public class Column { private int index; private String metaName; private String displayName; private int length; /** * 构造函数 * * @param index * 显示顺序,0 为显示的第一列 * @param meta * 元列名,在ResultSet内的名字,必须大写 * @param display * 显示列名,在Excel内的显示,可以是任何文字 * @param length * 列名长度 */ public Column(int index, String meta, String display,int length) { this.index = index; this.metaName = meta; this.displayName = display; this.length = length; } /** * 显示列名,在Excel内的显示,可以是任何文字 * * @return */ public String getDisplayName() { return displayName; } /** * 显示顺序,0 为显示的第一列 * * @return */ public int getIndex() { return index; } /** * 元列名,在ResultSet内的名字,必须大写 * * @return */ public String getMetaName() { return metaName; } public void setDisplayName(String displayName) { this.displayName = displayName; } public void setIndex(int index) { this.index = index; } public void setMetaName(String metaName) { this.metaName = metaName; } public int getLength() { return length; } public void setLength(int length) { this.length = length; } }
Excel:
/**
* 从数据库读数据,写入Excel * * @param os * 数据流,如果是写本地文件的话,可以是FileOutputStream; * 如果是写Web下载的话,可以是ServletOupputStream * @param title * Excel工作簿的标题,如果不用的话,可以写null或者"" * @param rs * 数据结果集 * @param map * 数据结果集对应Excel表列名映射:key对应数据结果集的列名,必须是大写; value,目前只能对应Column对象 * @throws Exception * 方法内的父类异常有SQLException和IOException */ public static void export(OutputStream os, String title, ResultSet rs, Map map) throws Exception { jxl.write.WritableWorkbook wbook = Workbook.createWorkbook(os); // 建立excel文件 jxl.write.WritableSheet wsheet = wbook.createSheet("第一页", 0); // sheet名称 jxl.write.Label wlabel = null; // Excel表格的Cell ResultSetMetaData rsmd = rs.getMetaData(); int count = rsmd.getColumnCount(); // 如果有标题的话,要设置一下偏移 int offset = 1; if (title == null || title.trim().equals("")) offset = 0; else { // 设置标题字体 int numTitle = 18;// 列名字体大小 jxl.write.WritableFont titleFont = new jxl.write.WritableFont( WritableFont.createFont("宋体"), numTitle, WritableFont.BOLD); jxl.write.WritableCellFormat titleFormat = new jxl.write.WritableCellFormat(titleFont); titleFormat.setBorder(Border.ALL, BorderLineStyle.THIN); // 线条 titleFormat.setVerticalAlignment(VerticalAlignment.CENTRE); // 垂直对齐 titleFormat.setAlignment(Alignment.CENTRE); // 水平对齐 // 添加excel标题 jxl.write.Label wlabel1 = new jxl.write.Label(0, 0, title, titleFormat); wsheet.addCell(wlabel1); wsheet.mergeCells(0, 0, count-1, 0);//合并单元格 } // 设置列名字体 int charTitle = 12;// 列名字体大小 jxl.write.WritableFont columnFont = new jxl.write.WritableFont( WritableFont.createFont("宋体"), charTitle, WritableFont.BOLD); jxl.write.WritableCellFormat columnFormat = new jxl.write.WritableCellFormat( columnFont); columnFormat.setBorder(Border.ALL, BorderLineStyle.THIN); // 线条 columnFormat.setVerticalAlignment(VerticalAlignment.CENTRE); // 垂直对齐 columnFormat.setAlignment(Alignment.CENTRE); // 水平对齐 columnFormat.setWrap(true); // 是否换行 columnFormat.setBackground(Colour.GRAY_25);// 背景色暗灰-25% // 根据原数据和map来创建Excel的列名 for (int i = 1; i <= count; i++) { String name = rsmd.getColumnName(i).toUpperCase(); if (map.containsKey(name)) { Column col = (Column) map.get(name); wlabel = new jxl.write.Label(col.getIndex(), offset, col .getDisplayName(),columnFormat); wsheet.setColumnView(i-1, col.getLength()); // 设置列宽,第1列 wsheet.addCell(wlabel); } } // 设置正文字体 int charNormal = 10;// 标题字体大小 WritableFont normalFont = new WritableFont(WritableFont .createFont("宋体"), charNormal); jxl.write.WritableCellFormat normalFormat = new jxl.write.WritableCellFormat( normalFont); normalFormat.setBorder(Border.ALL, BorderLineStyle.THIN); // 线条 normalFormat.setVerticalAlignment(VerticalAlignment.CENTRE); // 垂直对齐 normalFormat.setAlignment(Alignment.CENTRE);// 水平对齐 normalFormat.setWrap(true); // 是否换行 // 往Excel输出数据 int rowIndex = 1 + offset; Collection array = map.values(); while (rs.next()) { Iterator it = array.iterator(); while (it.hasNext()) { Column col = (Column) it.next(); String value = rs.getString(col.getMetaName()); wlabel = new jxl.write.Label(col.getIndex(), rowIndex, value,normalFormat); wsheet.addCell(wlabel); } rowIndex++; } wbook.write(); // 写入文件 wbook.close(); os.flush(); os.close(); } }
//JSP页面的下载如下,同样的代码也可以改成Servlet的
<%
ConnectionPool pool = ConnectionPool.getInstance(); Connection conn = null; ResultSet rs = null; Statement stmt = null; conn = pool.getConnection(); stmt = conn.createStatement(); rs = stmt.executeQuery("Select t.*, t.rowid from mis2_personal_weekly_job_plan t Where Rownum Between 1 And 2"); HashMap map = new HashMap(); map.put("ID", new Column(0, "ID", "编号")); map.put("JOB_CONTENT", new Column(1, "JOB_CONTENT", "工作内容")); map.put("JOB_TARGET", new Column(2, "JOB_TARGET", "工作目标")); String fileName = "周工作计划.xls"; response.reset(); response.setHeader("Cache-Control", "public"); response.setContentType("application/ms-excel;charset=gbk"); //response.setContentType("application/vnd.ms-excel"); String fn=new String(fileName.getBytes("gb2312"),"ISO8859-1");// 将文件名变成中文 response.addHeader("Content-Disposition","attachment;filename=" + fn); Excel.export(response.getOutputStream(), "", rs, map); %>
补充意见:
1、需要注意在封装字段标题时需要将map的关键字置为大写,不然会找不到的,因为在excel类里将从数据库取到的字段名称进行了toUpperCase()。
2、建议使用个计数器,在map中设置value时我们只需使用var++让他自己去加去,不用去写0,1,2,3...,这样我们在修改调整字段时,就不用去改这些写死的索引号,这样更为灵活一些。
3、导出文件好像不支持中文名,如果写中文它会用字母替代,还是用英文吧。
建议写成如下这样:
HashMap map = new HashMap();
int k=0;//计数器,这样我们在写map的value值时,就不用在Column里写0,1,2,3...了,真接用k++
//其中map中的关键字都得是大写的,不然会找不到的,因为在excel类里用了.toUpperCase()方法
map.put("ID".toUpperCase(), new Column(k++, "ID", "编号"));
map.put("JOB_CONTENT".toUpperCase(), new Column(k++, "JOB_CONTENT", "工作内容"));
map.put("JOB_TARGET".toUpperCase(), new Column(k++, "JOB_TARGET", "工作目标"));
最后不要使用JSP的方式导出,如果用JSP写导出的话,会出现异常信息:
java.lang.IllegalStateException: 已获取输出流
出现这种异常,只需要把导出的代码写入Servlet即可以解决。
切忌!切忌!
发表评论
-
JSTL格式化时间戳
2017-08-02 16:06 1057JSTL格式化时间戳 参考:http://www.c ... -
小顶堆排序Java代码样例
2017-05-27 16:54 1136小顶堆排序Java代码样例 import java. ... -
jps(Java Virtual Machine Process Status Tool)
2017-03-12 14:31 722jps(Java Virtual Machine Proc ... -
Java 生成范围内的随机数
2017-03-02 17:32 872Java 生成范围内的随机数 public clas ... -
使用SetUniqueList构造不重复的ArrayList
2017-02-08 18:02 640使用SetUniqueList构造不重复的ArrayList ... -
Base64字符解码保存文件
2016-11-16 15:21 1029Base64字符解码保存文件 /** ... -
使用Java将PDF文件转成图片
2016-11-16 11:13 10804使用Java将PDF文件转成图片 import com. ... -
java 去掉html标签
2016-10-14 14:35 1128java 去掉html标签 参考: http:// ... -
JSTL el 根据动态key 获取map的value
2016-10-13 19:28 1283JSTL el 根据动态key 获取map的value ... -
Java List转成使用分隔符分隔的字符串
2016-08-25 10:48 1804Java List转成使用分隔符分隔的字符串 org ... -
Java 8 List转Map
2016-08-25 10:45 5416Java 8 List转Map 参考:http:// ... -
JRebel注册网址
2016-08-18 11:35 713JRebel注册网址 https: ... -
Java Calendar 获取本周的星期一
2016-06-18 02:25 5019Java Calendar 获取本周的星期一 // ... -
Failed to class-load type while reading annotation metadata. This is a non-fatal
2016-06-18 02:25 4808Failed to class-load type ... -
Java Calendar 获取上下午
2016-05-31 10:13 1294Java Calendar 获取上下午 Simple ... -
java.io.IOException: line too long
2016-01-12 10:13 2593java.io.IOException: line too ... -
java 编译、打包
2015-10-19 16:53 842java 编译、打包 linux 上编译java文 ... -
Java 读取UTF-8文件中文乱码
2015-10-14 16:10 3505Java 读取UTF-8文件中文乱码 InputS ... -
JSP中的两种包含页面的方法
2015-10-14 15:58 666JSP中的两种包含页面的方法 第一种:include ... -
给java代码加一行PACKAGE(在文件头添加一行)
2015-08-06 12:26 1498给java代码加一行PACKAGE(在文件头添加一行) ...
相关推荐
在Java编程环境中,我们经常需要处理数据的导入和导出,Excel作为一种常见的数据存储和展示格式,被广泛应用。`jxl`库是一个流行的Java库,它允许开发者读取、写入和修改Excel文件。本教程将详细介绍如何使用`jxl`库...
在Java编程领域,导出Excel数据是一项常见的任务,特别是在数据处理和报表生成中。`jxl`库是一个广泛使用的开源库,它允许开发者方便地读取和写入Microsoft Excel文件。本文将详细介绍如何使用`jxl`库创建一个导出...
在Java编程环境中,导出Excel数据是一项常见的任务,特别是在数据处理、报表生成或者数据分析的应用中。JXL库是一个广泛使用的开源库,它提供了方便的方式来读取、写入和操作Excel文件。下面我们将深入探讨如何使用...
在Java编程环境中,导出数据到Excel表格是一个常见的需求,特别是在数据分析、报表生成或数据交换时。`jxl`库是Java中一个广泛使用的库,它允许开发者方便地读取和写入Microsoft Excel文件。本篇文章将深入探讨如何...
Sheet sheet = workbook.createSheet("数据表", 0); ``` 3. **设置单元格内容**:在工作表上创建并设置单元格的值,使用`Row.createCell()`和`Cell.setCellValue()`方法。 ```java Row row = sheet.createRow(0...
标题中的“jxl导出excel”指的是使用JExcelApi(简称jxl)库来生成和导出Microsoft Excel格式的文件。JExcelApi是一个开源Java库,允许开发者在Java应用程序中读取、写入和修改Excel文件。这个工具类在处理大量数据...
JXL库提供了方便的API,使得开发者可以轻松地处理Excel数据,包括读取单元格内容、修改工作表、添加公式,以及本文重点讨论的——插入和输出图片。 **一、JXL库介绍** JXL是一个开源的Java库,专门用于处理Excel...
JExcelAPI是一个开源项目,允许程序开发者读写Microsoft Excel文件,它支持从Java数据结构直接导出到Excel格式,同时也可读取Excel数据并转换为Java对象。 **描述解析:** 描述中提到的"采用类似EL表达式的方式...
Java使用JXL库生成Excel文件是一项常见的任务,特别是在数据处理、报表生成或导出时。JXL是一个开源的Java库,允许我们读取、写入和修改Excel文件。以下将详细讲解如何使用JXL库来生成Excel文件。 首先,我们需要在...
jxl库支持多种Excel操作,包括创建新的工作簿、添加工作表、设置单元格格式、插入公式以及读取Excel数据。这个库的使用极大地简化了在Java中处理Excel文件的工作流程。 在描述中提到的"txt转为excel Demo",这是一...
《jxl导出Excel的深度解析与应用》 在信息化高度发展的今天,Excel作为数据处理和分析的重要工具,被广泛应用于各个领域。Java作为一种强大的编程语言,如何与Excel进行交互,成为了许多开发者关注的焦点。jxl库...
四、导出Excel数据 1. **创建工作簿** 使用`Workbook.createWorkbook(File)`方法创建一个新的工作簿: ```java WritableWorkbook workbook = Workbook.createWorkbook(new File("output.xls")); ``` 2. **创建...
在Java编程环境中,处理Excel文件是一项常见的任务,特别是在数据导入导出、报表生成等领域。`jxl`库是一个广泛使用的开源库,它允许开发者用Java读取、写入和修改Excel文件。在这个特定的场景中,我们将探讨如何...
java JXL导出Excel源码及jfreechart 生成折线图,饼图 java JXL导出Excel源码及jfreechart 生成折线图,饼图 java JXL导出Excel源码及jfreechart 生成折线图,饼图
在Java编程环境中,JXL库是一个非常流行...总之,使用JXL库在Java中导出Excel文件是一项常见的任务,尤其在数据分析和报表生成场景下。通过熟悉JXL的API,你可以轻松地定制化Excel文件的格式和内容,满足各种业务需求。
在IT行业中,处理和操作Excel数据是一项常见的任务,特别是在数据导入导出、分析和报告生成等领域。JXL是一个Java库,专门用于读取、写入和修改Excel文件,它为Java开发者提供了一种方便的方式来处理Excel数据,而...
在Java编程环境中,处理Excel数据是一项常见的任务,特别是在数据分析、报表生成或数据导入导出时。JXL库是一个广泛使用的开源库,它允许开发者轻松地读取和写入Excel文件。本文将详细介绍如何使用JXL库来读取Excel...
在本示例中,我们将探讨如何使用JXL导出Excel以及JXL的API文档。 1. **JXL的基本用法** - **创建工作簿(Workbook)**: 使用`Workbook.createWorkbook()`方法创建一个新的Excel工作簿对象。 - **创建工作表...
### jxl导出Excel数据的详细介绍与实例 #### 一、引言 在Java开发过程中,经常需要将数据导出到Excel文件中。jxl是一个非常实用的Java库,用于读取和写入Microsoft Excel文件。本文将详细介绍如何使用jxl来导出数据...