- 浏览: 252596 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
qingtingchen:
请问下如果只有uid/emial 和密码的话要怎样进行认证
【总结】Spring LDAP整理 -
cylboke:
太给力了,搞了一下午,一直换jar版本,不起作用,用楼主的方法 ...
【学习】spring MVC之返回JSON数据(Spring3.0 MVC+Jackson+AJAX) -
hu3625067:
楼主写的很精辟,言简意赅,非常实用
【总结】Spring LDAP整理 -
hu3625067:
写的很精辟,很实用
【总结】Quartz整理 -
Mr小血:
找了好久,终于找到解决办法了,谢谢
formvalidator4.1.3 - 校验时不能自定义向后台传值的BUG问题
首先,下载POI JAR包 http://poi.apache.org/download.html
jar包就不赘述了
本文除了加POI的几个JAR包外,还需加上STRUTS2的JAR包。
jsp页面:
STRUTS2配置:(没有返回页 所以也就不用配置了)
action 方法:我用了将HASHMAP封装成List的方式导出数据,另一个常用的方式是将一个类封装成List的方式导出数据,方法思想大致相同,另一种方法 在导出基础类中 用反射形式实现。后面有写。
**重要**
下面就是 导出工具类了:我是整理了网上前辈们的资格,再改了点。
**注 **
若要用到exportExcel方法 需添加jar包:commons-codec-1.5.jar
具体调用方法:改下LIST生成方式就行了 其它的与ACTION里的export方法一样。BOOK是个实体类
book.java:getter setter方法略
**补充**
若想导出默认名用中文:
jar包就不赘述了
本文除了加POI的几个JAR包外,还需加上STRUTS2的JAR包。
jsp页面:
<form id="searchform" action="bizinfo/biz_orderList.action" method="post"> <input type="submit" value="导出"/> </form>
STRUTS2配置:(没有返回页 所以也就不用配置了)
<package name="default" namespace="/" extends="struts-default"> <action name="export" class="com.exporttest" method="export"></action> </package>
action 方法:我用了将HASHMAP封装成List的方式导出数据,另一个常用的方式是将一个类封装成List的方式导出数据,方法思想大致相同,另一种方法 在导出基础类中 用反射形式实现。后面有写。
public void export(){ try { // 测试图书 ExportExcel ex2 = new ExportExcel(); String[] headers2 = { "图书编号", "图书名称", "图书作者", "图书价格", "图书ISBN","图书出版社", "封面图片" }; List<HashMap> dataset2 = new ArrayList<HashMap>(); HashMap map = new HashMap(); map.put("no", 1); map.put("name", "java"); map.put("author", "anjing"); map.put("price", 20); map.put("isbn", "123123123123"); map.put("out", "company"); map.put("img", "123.123"); dataset2.add(map); String[] keys = {"no","name","author","price","isbn","out","img"}; response.setContentType("octets/stream"); String nowdate = DateUtils.getNowDateNormal().substring(0,8); response.addHeader("Content-Disposition","attachment;filename=orderlist"+nowdate+".xls"); OutputStream out = response.getOutputStream(); ExportExcel<HashMap> exportexcel = new ExportExcel<HashMap>(); exportexcel.exportExcelList( "导出",headers, dataset2 , out,keys); out.close(); } } catch (Exception e) { //e.printStackTrace(); } }
**重要**
下面就是 导出工具类了:我是整理了网上前辈们的资格,再改了点。
package com.cnnct.utils.excel; import java.io.IOException; import java.io.OutputStream; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.text.SimpleDateFormat; import java.util.Collection; import java.util.Date; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFCellStyle; import org.apache.poi.hssf.usermodel.HSSFClientAnchor; import org.apache.poi.hssf.usermodel.HSSFComment; import org.apache.poi.hssf.usermodel.HSSFFont; import org.apache.poi.hssf.usermodel.HSSFPatriarch; import org.apache.poi.hssf.usermodel.HSSFRichTextString; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.hssf.util.HSSFColor; import org.apache.poi.hssf.util.Region; public class ExportExcel<T> { /** * 通用的方法,可以将放置在JAVA集合中并且符号一定条件的数据以EXCEL 的形式输出到指定IO设备上 * Collection必须是HashMap形式*********** * * @param title 表格标题名 * * @param headers 表格属性列名数组 * * @param dataset 需要显示的数据集合,集合的泛形模式为HASHMAP * * @param out 与输出设备关联的流对象,可以将EXCEL文档导出到本地文件或者网络中 * * */ @SuppressWarnings({ "deprecation" }) public void exportExcelList(String title, String[] headers, List<HashMap> dataset, OutputStream out,String[] keys) { // 声明一个工作薄 HSSFWorkbook workbook = new HSSFWorkbook(); // 生成一个表格 HSSFSheet sheet = workbook.createSheet(title); // 设置表格默认列宽度为15个字节 sheet.setDefaultColumnWidth((short) 15); // 产生表格大标题行 HSSFRow row = sheet.createRow(0); row.setHeightInPoints(22); Region region = new Region(0,(short)0,0,(short)(headers.length -1)); sheet.addMergedRegion(region); HSSFCell cell0 = null; cell0 = row.createCell((short)0);// (第1列) 在第0位置上开始合并的就在该位置上填加内容 cell0.setCellStyle(this.createStyleTitle(workbook)); cell0.setCellValue(title); // 产生表格单元格标题行 row = sheet.createRow(1); for (short i = 0; i < headers.length; i++) { HSSFCell cell = row.createCell(i); cell.setCellStyle(this.createStyleHeader(workbook)); HSSFRichTextString text = new HSSFRichTextString(headers[i]); cell.setCellValue(text); } Iterator<HashMap> it = dataset.iterator(); int index = 1; while (it.hasNext()) { index++; row = sheet.createRow(index); HashMap t = (HashMap) it.next(); // 遍历集合数据,产生数据行 for(int i = 0;i<keys.length;i++){ HSSFCell cell = row.createCell(i); cell.setCellStyle(this.createStyle(workbook)); cell.setCellValue(t.get(keys[i]).toString()); } } try { workbook.write(out); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 这是一个通用的方法,利用了JAVA的反射机制,可以将放置在JAVA集合中并且符号一定条件的数据以EXCEL 的形式输出到指定IO设备上 * * @param title 表格标题名 * * @param headers 表格属性列名数组 * * @param dataset 需要显示的数据集合,集合中一定要放置符合javabean风格的类的对象。此方法支持的 * javabean属性的数据类型有基本数据类型及String,Date,byte[](图片数据) * * @param out 与输出设备关联的流对象,可以将EXCEL文档导出到本地文件或者网络中 * * @param pattern 如果有时间数据,设定输出格式。默认为"yyy-MM-dd" */ @SuppressWarnings({ "unchecked", "deprecation" }) public void exportExcel(String title, String[] headers, Collection<T> dataset, OutputStream out, String pattern) { // 声明一个工作薄 HSSFWorkbook workbook = new HSSFWorkbook(); // 生成一个表格 HSSFSheet sheet = workbook.createSheet(title); // 设置表格默认列宽度为15个字节 sheet.setDefaultColumnWidth((short) 15); // 声明一个画图的顶级管理器 HSSFPatriarch patriarch = sheet.createDrawingPatriarch(); // 定义注释的大小和位置,详见文档 HSSFComment comment = patriarch.createComment(new HSSFClientAnchor(0, 0, 0, 0, (short) 4, 2, (short) 6, 5)); // 设置注释内容 comment.setString(new HSSFRichTextString("可以在POI中添加注释!")); // 设置注释作者,当鼠标移动到单元格上是可以在状态栏中看到该内容. comment.setAuthor("leno"); // 产生表格大标题行 HSSFRow row = sheet.createRow(0); row.setHeightInPoints(22); Region region = new Region(0,(short)0,0,(short)(headers.length -1)); sheet.addMergedRegion(region); HSSFCell cell0 = null; cell0 = row.createCell((short)0);// (第1列) 在第0位置上开始合并的就在该位置上填加内容 cell0.setCellStyle(this.createStyleTitle(workbook)); cell0.setCellValue(title); // 产生表格单元格标题行 row = sheet.createRow(1); for (short i = 0; i < headers.length; i++) { HSSFCell cell = row.createCell(i); cell.setCellStyle(this.createStyleHeader(workbook)); HSSFRichTextString text = new HSSFRichTextString(headers[i]); cell.setCellValue(text); } // 遍历集合数据,产生数据行 Iterator<T> it = dataset.iterator(); int index = 0; while (it.hasNext()) { index++; row = sheet.createRow(index); T t = (T) it.next(); // 利用反射,根据javabean属性的先后顺序,动态调用getXxx()方法得到属性值 Field[] fields = t.getClass().getDeclaredFields(); for (short i = 0; i < fields.length; i++) { HSSFCell cell = row.createCell(i); cell.setCellStyle(this.createStyle(workbook)); Field field = fields[i]; String fieldName = field.getName(); String getMethodName = "get" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1); try { Class tCls = t.getClass(); Method getMethod = tCls.getMethod(getMethodName, new Class[] {}); Object value = getMethod.invoke(t, new Object[] {}); // 判断值的类型后进行强制类型转换 String textValue = null; // if (value instanceof Integer) { // int intValue = (Integer) value; // cell.setCellValue(intValue); // } else if (value instanceof Float) { // float fValue = (Float) value; // textValue = new HSSFRichTextString( // String.valueOf(fValue)); // cell.setCellValue(textValue); // } else if (value instanceof Double) { // double dValue = (Double) value; // textValue = new HSSFRichTextString( // String.valueOf(dValue)); // cell.setCellValue(textValue); // } else if (value instanceof Long) { // long longValue = (Long) value; // cell.setCellValue(longValue); // } if (value instanceof Boolean) { boolean bValue = (Boolean) value; textValue = "是"; if (!bValue) { textValue = "否"; } } else if (value instanceof Date) { Date date = (Date) value; SimpleDateFormat sdf = new SimpleDateFormat(pattern); textValue = sdf.format(date); } else if (value instanceof byte[]) { // 有图片时,设置行高为60px; row.setHeightInPoints(60); // 设置图片所在列宽度为80px,注意这里单位的一个换算 sheet.setColumnWidth(i, (short) (35.7 * 80)); // sheet.autoSizeColumn(i); byte[] bsValue = (byte[]) value; HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 1023, 255, (short) 6, index, (short) 6, index); anchor.setAnchorType(2); patriarch.createPicture(anchor, workbook.addPicture(bsValue, HSSFWorkbook.PICTURE_TYPE_JPEG)); } else { // 其它数据类型都当作字符串简单处理 textValue = value.toString(); } // 如果不是图片数据,就利用正则表达式判断textValue是否全部由数字组成 if (textValue != null) { Pattern p = Pattern.compile("^//d+(//.//d+)?{1}quot;"); Matcher matcher = p.matcher(textValue); if (matcher.matches()) { // 是数字当作double处理 cell.setCellValue(Double.parseDouble(textValue)); } else { HSSFRichTextString richString = new HSSFRichTextString( textValue); HSSFFont font3 = workbook.createFont(); font3.setColor(HSSFColor.BLUE.index); richString.applyFont(font3); cell.setCellValue(richString); } } } catch (SecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NoSuchMethodException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { // 清理资源 } } } try { workbook.write(out); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 大标题样式 * @param workbook * @return */ public HSSFCellStyle createStyleTitle(HSSFWorkbook workbook){ // 生成一个样式 HSSFCellStyle style = workbook.createCellStyle(); // 设置这些样式 style.setFillForegroundColor(HSSFColor.WHITE.index); style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); style.setBorderBottom(HSSFCellStyle.BORDER_THIN); style.setBorderLeft(HSSFCellStyle.BORDER_THIN); style.setBorderRight(HSSFCellStyle.BORDER_THIN); style.setBorderTop(HSSFCellStyle.BORDER_THIN); style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 生成一个字体 HSSFFont font = workbook.createFont(); font.setColor(HSSFColor.BLACK.index); font.setFontHeightInPoints((short) 12); font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); // 把字体应用到当前的样式 style.setFont(font); return style; } /** * 小标题样式 * @param workbook * @return */ public HSSFCellStyle createStyleHeader(HSSFWorkbook workbook){ // 生成一个样式 HSSFCellStyle style = workbook.createCellStyle(); // 设置这些样式 style.setFillForegroundColor(HSSFColor.LIGHT_YELLOW.index); style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); style.setBorderBottom(HSSFCellStyle.BORDER_THIN); style.setBorderLeft(HSSFCellStyle.BORDER_THIN); style.setBorderRight(HSSFCellStyle.BORDER_THIN); style.setBorderTop(HSSFCellStyle.BORDER_THIN); style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 生成一个字体 HSSFFont font = workbook.createFont(); font.setColor(HSSFColor.BLACK.index); font.setFontHeightInPoints((short) 10); font.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL); // 把字体应用到当前的样式 style.setFont(font); return style; } /** * 正文样式 * @param workbook * @return */ public HSSFCellStyle createStyle(HSSFWorkbook workbook){ // 生成并设置另一个样式 HSSFCellStyle style = workbook.createCellStyle(); style.setFillForegroundColor(HSSFColor.WHITE.index); style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); style.setBorderBottom(HSSFCellStyle.BORDER_THIN); style.setBorderLeft(HSSFCellStyle.BORDER_THIN); style.setBorderRight(HSSFCellStyle.BORDER_THIN); style.setBorderTop(HSSFCellStyle.BORDER_THIN); style.setAlignment(HSSFCellStyle.ALIGN_CENTER); style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 生成另一个字体 HSSFFont font = workbook.createFont(); font.setFontHeightInPoints((short) 10); font.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL); // 把字体应用到当前的样式 style.setFont(font); return style; } }
**注 **
若要用到exportExcel方法 需添加jar包:commons-codec-1.5.jar
具体调用方法:改下LIST生成方式就行了 其它的与ACTION里的export方法一样。BOOK是个实体类
// 测试图书 ExportExcel<Book> ex2 = new ExportExcel<Book>(); String[] headers2 = { "图书编号", "图书名称", "图书作者", "图书价格", "图书ISBN", "图书出版社", "封面图片" }; List<Book> dataset2 = new ArrayList<Book>(); try { BufferedInputStream bis = new BufferedInputStream( new FileInputStream("book.jpg")); byte[] buf = new byte[bis.available()]; while ((bis.read(buf)) != -1) { // } dataset2.add(new Book(1, "jsp", "leno", 300.33f, "1234567", "清华出版社", buf)); dataset2.add(new Book(2, "java编程思想", "brucl", 300.33f, "1234567", "阳光出版社", buf));
book.java:getter setter方法略
public class Book { private int bookId; private String name; private String author; private float price; private String isbn; private String pubName; private byte[] preface; }
**补充**
若想导出默认名用中文:
response.addHeader("Content-Disposition","attachment;filename="+"\""+ new String(("我是中文名.xls").getBytes("GB2312"),"iso8859-1")+ "\"");
评论
2 楼
JustHere
2014-01-13
2014-01-03
1 楼
weipeng1986
2013-06-26
不错。
解决exce乱码很不错
response.addHeader("Content-Disposition","attachment;filename="+"\""+ new String(("我是中文名.xls").getBytes("GB2312"),"iso8859-1")+ "\"");
解决exce乱码很不错
发表评论
-
【总结】JAVA编码日常会忽略的小错误
2016-10-15 15:54 0偏基础的文章,很多都是可能很多coder日常都会遇上的问题。 ... -
【总结】Java基础之String
2016-03-26 15:46 0总结关于String的问题和特点。 1、contains() ... -
【总结】java.util.Date vs. java.sql.Date
2016-03-19 21:06 1687本文总结了java.util.Date和java.sql.Da ... -
【总结】Java基础之Set:HashSet vs. LinkedHashSet vs. TreeSet
2016-02-28 17:24 1713总结平时常用的Collection子接口:Set接口以及其实现 ... -
【总结】Java基础之List:ArrayList vs. LinkedList vs. Vector
2016-02-27 17:41 872总结平时常用的Collection ... -
【总结】Java基础之Map:HashMap vs. LinkedHashMap vs. TreeMap vs. ConcurrentHashMap
2016-02-21 18:17 2339Map是Java最常用的集合类之一。它有很多实现类,我总结了几 ... -
ant
2014-12-29 15:23 0https://ant.apache.org/manual/t ... -
1111111
2014-11-25 22:31 01\ My main work will be focus o ... -
d09
2014-09-22 14:19 02014-09-01 Recently I usually r ... -
【学习】使用Nginx进行多站点配置(初级)
2013-11-13 17:26 1901Nginx ("engine x") 是一 ... -
【学习】Java实现FTP上传功能(FTPClient)
2013-08-21 17:11 2151做项目时遇到的需求如下:本地查询的结果,导出XLS,上传至FT ... -
【问题】java.lang.OutOfMemoryError: Java heap space 解决方法
2013-07-22 16:49 1010项目在做一个功能的时候,发现项目报java.lang.OutO ... -
Axis2+Spring开发时遇到Service注入为空的问题
2013-06-24 17:12 3539需求:在SSI项目中使用Axis2的WEBSERVICE技术。 ... -
SpringMVC与Mybatis整合环境搭建
2013-06-15 23:21 5805Spring与Mybatis整合环境搭建 本文用的jar包 ... -
一个机器同时运行两个TOMCAT
2013-04-19 13:25 1065第一个TOMCAT全部用默认, 改变另一个TOMCAT/CON ... -
网站接入之使用人人网帐号登陆(直接使用OAuth 2.0来授权)
2013-02-20 13:52 1677人人网API不是特别好。 下面是我自己的步骤,希望对需要的人 ... -
JAVA通过SOCKET接收发送数据
2013-01-24 10:24 1494JAVA用SOCKET通信发送数据。::: public ... -
利用JAVA-COOKIE做的购物车DEMO
2013-01-07 15:34 3224这几天写了下JAVA写的COOKIE的DEMO。可能代码有点长 ... -
Spring --- java定时器,Spring定时器和Quartz定时器{转}
2012-10-11 09:16 1513在现实生活中,会出现这样的例子,比如烧水,一般烧了20分钟后, ... -
dao 表优化
2011-09-21 10:32 877//列表ticket 底层hql语言 可以去掉一些字段 比如简 ...
相关推荐
ExcelImport.zip java-poi-excel 导入导出excel表格 由java读取流进行操作
Java利用poi导出excel表格.zipJava利用poi导出excel表格.zip
Java利用poi导出excel表格
java-poi-excel-导出20万条记录
该实例集成maven开发环境,里面讲解了POI导入和导出Excel表格的基本用法
java-poi导入excel文件内容到数据库,导出数据库内容到本地excel
struts2中利用poi导出excel的简单例子
java使用POI导出 Excel+图片工具类 ,里面含有poi jar包,只调用接口即可直接保存Excel。使用的时候需先把数据封装,具体包装需根据实际导出数据进行处理。文件demo中只提供包装格式。
使用apach poi 导出Excel,可直接在项目中使用使用apach poi 导出Excel,可直接在项目中使用使用apach poi 导出Excel,可直接在项目中使用
java_poi实现excel导入导出功能,有详细的注解
利用poi技术导出EXCEL表格,文件里还包含部分关键代码,使用方便
web网页导出excel表格,不必生成excel实体文件,减少垃圾文件的产出
利用struts2和poi把数据导出到excel
Java实现POI导出Excel 博文参考:http://blog.csdn.net/itmyhome1990/article/details/49818045
详解JAVA_POI导出EXCEL报表的操作(包括各种格式及样式的实现),最全面的JAVA_POI导出EXCEL报表操作。
批量导出到excel时,通常会报内存溢出的错误,这个是mysql的例子,导出20万条记录
利用POI实现Java导出Excel表格,为了实现以后通用,做成了一个利用Java的反射机制做成的万金油式工具类,只需要给工具类传入固定的几个参数(映射字段的map集合,数据集合,实体类的Claas等),就可以实现导出Excel,该...
Java Poi 导出excel(支持各种设置字体、颜色、垂直居中)
自己做的一个完整导出功能,struts2+poi导出excel 经过自己严格测试通过的。