最终选择用POI成功导出excel。总之很有用。

http://www.cnblogs.com/xwdreamer/archive/2011/07/20/2296975.html

http://poi.apache.org/download.html

Student.java

package org.leno.export.util;import java.util.Date;public class Student {private long id;private String name;private int age;private boolean sex;private Date birthday;public Student() {super();// TODO Auto-generated constructor stub
    }public Student(long id, String name, int age, boolean sex, Date birthday) {super();this.id = id;this.name = name;this.age = age;this.sex = sex;this.birthday = birthday;}public long getId() {return id;}public void setId(long id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public boolean getSex() {return sex;}public void setSex(boolean sex) {this.sex = sex;}public Date getBirthday() {return birthday;}public void setBirthday(Date birthday) {this.birthday = birthday;}}

View Code

ExportExcel.java

package myExcel;import java.awt.List;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
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.*;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.regex.Matcher;
import java.util.regex.Pattern;import javax.mail.Header;
import javax.swing.JOptionPane;
import javax.swing.plaf.synth.Region;import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.formula.functions.T;import classman.class_operation;
import util.stringUtil;public class myExcelExcel<T> {public void exportExcel(Collection<T> dataset, OutputStream out) {exportExcel("testPOI", null, dataset, out, "yyyy-MM-dd");}public void exportExcel(String[] headers, Collection<T> dataset,OutputStream out) {exportExcel("testPOI", headers, dataset, out, "yyyy-MM-dd");}public void exportExcel(String[] headers, Collection<T> dataset,OutputStream out, String pattern) {exportExcel("testPOI", headers, dataset, out, pattern);}public void exportExcel(String title, String[] headers,Collection<T> dataset, OutputStream out, String pattern) {HSSFWorkbook workbook = new HSSFWorkbook();HSSFSheet sheet = workbook.createSheet(title);sheet.setDefaultColumnWidth((short) 15);HSSFCellStyle style = workbook.createCellStyle();style.setFillForegroundColor(HSSFColor.SKY_BLUE.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.VIOLET.index);font.setFontHeightInPoints((short) 12);font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);style.setFont(font);HSSFCellStyle style2 = workbook.createCellStyle();style2.setFillForegroundColor(HSSFColor.LIGHT_YELLOW.index);style2.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);style2.setBorderBottom(HSSFCellStyle.BORDER_THIN);style2.setBorderLeft(HSSFCellStyle.BORDER_THIN);style2.setBorderRight(HSSFCellStyle.BORDER_THIN);style2.setBorderTop(HSSFCellStyle.BORDER_THIN);style2.setAlignment(HSSFCellStyle.ALIGN_CENTER);style2.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 生成另一个字体HSSFFont font2 = workbook.createFont();font2.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);style2.setFont(font2);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);for (short i = 0; i < headers.length; i++) {HSSFCell cell = row.createCell(i);cell.setCellStyle(style);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(style2);Field field = fields[i];String fileName = field.getName();String getMethodName = "get"+ fileName.substring(0, 1).toUpperCase()+ fileName.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 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[]) {} else {textValue=value.toString();}System.out.println(textValue);if (textValue != null) {Pattern p = Pattern.compile("^//d+(//.//d+)?$");Matcher matcher = p.matcher(textValue);if (matcher.matches()) {cell.setCellValue(Double.parseDouble(textValue));} else {HSSFRichTextString richTextString = new HSSFRichTextString(textValue);HSSFFont font3 = workbook.createFont();font3.setColor(HSSFColor.BLUE.index);richTextString.applyFont(font3);cell.setCellValue(richTextString);}}} catch (SecurityException e) {// TODO: handle exception
                    e.printStackTrace();} catch (NoSuchMethodException e) {// TODO: handle exception
                    e.printStackTrace();} catch (IllegalArgumentException e) {// TODO: handle exception
                    e.printStackTrace();} catch (IllegalAccessException e) {// TODO: handle exception
                    e.printStackTrace();} catch (InvocationTargetException e) {// TODO: handle exception
                    e.printStackTrace();} finally {// 清理资源
                }}}try {workbook.write(out);} catch (IOException e) {// TODO: handle exception
            e.printStackTrace();}}public void testMain() {String[] headers = { "学号", "姓名", "年龄", "性别", "出生日期" };myExcelExcel<Student> ex=new myExcelExcel<Student>();java.util.List<Student> dataset = new ArrayList<Student>();dataset.add(new Student(100001, "aa", 20, true, new java.util.Date()));dataset.add(new Student(2002, "bbb", 24, false, new java.util.Date()));dataset.add(new Student(3003, "ccc", 22, true, new java.util.Date()));try {OutputStream out = new FileOutputStream("c://a.xls");ex.exportExcel(headers, dataset,out);out.close();JOptionPane.showMessageDialog(null, "export OK!");System.out.println("export OK");} catch (FileNotFoundException e) {e.printStackTrace();// TODO: handle exception
        }catch (IOException e) {e.printStackTrace();// TODO: handle exception
        }}
}

View Code

这样写完已经可以导出了。

明天弄一个导出到浏览器客户端电脑上的功能。

写了个Servlet,果然在客户端用浏览器可以导出了。

Servlet

package brda;import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class ExportSvlt extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//File file = new File(getServletContext().getRealPath(""));response.setContentType("octets/stream");response.addHeader("Content-Disposition","attachment;filename=test.xls");String[] headers = { "学号", "姓名", "年龄", "性别", "出生日期" };brdaExcel<Student> ex=new brdaExcel<Student>();java.util.List<Student> dataset = new ArrayList<Student>();dataset.add(new Student(100001, "aa", 20, true, new java.util.Date()));dataset.add(new Student(2002, "bbb", 24, false, new java.util.Date()));dataset.add(new Student(3003, "ccc", 22, true, new java.util.Date()));OutputStream out = response.getOutputStream();ex.exportExcel(headers, dataset, out);out.close();System.out.println("excel Export success!");}public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException {doGet(request, response);}}

View Code

HTML

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body><form action="ExportSvlt" method="post"><input type="submit" value="ExportExcel"></form>
</body>
</html>

View Code

java Export Excel POI 转相关推荐

  1. java导出Excel(POI模式 Ajax下载 Post传参) bootstrap table getVisibleColumns获取显示的列

    工具类 (正式使用) package com.qyj.utils;import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson. ...

  2. java excel api 下载文件_Java-Excel Java操作Excel POI(Jakarta POI API) - 下载 - 搜珍网

    Java操作Excel/Jakarta POI API/data/Jakarta POI API.doc Java操作Excel/Jakarta POI API/jar/poi-3.0.2-FINAL ...

  3. Java操作excel(POI、EasyExcel)

    Apache POI和EasyExcel学习 easyExcel easyExcel 官网地址:https://www.yuque.com/easyexcel/doc/easyexcel EasyEx ...

  4. java处理Excel(POI包)

    Jakarta POI 是一套用于访问微软格式文档的Java API. Jakarta POI有很多组件组成,其中有用于操作Excel格式文件的HSSF和用于早在Word的HWPF,在各种组件中目前只 ...

  5. Java 操作Excel POI

    对指定的单元格进行填充具体的值: public static boolean setValuebySheetRowColumn(Sheet OneSheet, int row, int column, ...

  6. JAVA导出Excel通用工具类——第一篇:详细介绍POI 导出excel的多种复杂情况,包括动态设置筛选、动态合并横向(纵向)单元格等多种复杂情况——保姆级别,真的不能再详细了,代码拿来即用)

    JAVA导出Excel通用工具--第一篇:详细介绍POI 导出excel的多种复杂情况,包括动态设置筛选.动态合并横向(纵向)单元格等多种复杂情况--保姆级别,真的不能再详细了,封装通用工具类,代码拿 ...

  7. Java POI 导出EXCEL经典实现 Java导出Excel弹出下载框

    原文转载:http://blog.csdn.net/evangel_z/article/details/7332535 目录(?)[+] 在web开发中,有一个经典的功能,就是数据的导入导出.特别是数 ...

  8. java导出excel组件alibaba easyexcel和apache poi性能对比

    java导出excel组件alibaba easyexcel和apache poi性能对比 背景: 开发中出现web页面导出记录到excel导致服务oom奔溃,代码中使用apache poi组件导出, ...

  9. java excel读取操作,Java 操作 Excel (读取Excel2003 2007,Poi兑现)

    Java 操作 Excel (读取Excel2003 2007,Poi实现) 一. Apache POI 简介( http://poi.apache.org/) 使用Java程序读写Microsoft ...

最新文章

  1. 在Linux server上建立NAS文件服务器
  2. 攻破MySQL性能瓶颈必知的调优技巧
  3. 找到二叉树中的最大搜索二叉子树
  4. linux mysql无符号整型_Mysql基础
  5. EOS (3)系统特点
  6. 如何将gitub的项目在eclipse中运行
  7. python flask上传文件_Python-Flask-文件上传
  8. javascript --- 几个其他的跨域技术(图像Ping、JSONP、Comet)
  9. 在python中输入圆的半_python根据圆的参数方程求圆上任意一点的坐标
  10. UI培训之零基础如何自学UI设计?
  11. Linux CentOS 7 JDK7 Tomcat7 的配置
  12. java nmap集成_nmap为了开发方便 可以做简单的修改
  13. java栈和队列的区别是什么意思_java中栈和队列的区别是什么?
  14. 树莓派25/100 - 显示自定义字符
  15. LOJ#10064. 「一本通 3.1 例 1」黑暗城堡
  16. 关于字符集的测试报告(转)
  17. 电磁感应,让你制作独一无二的作品
  18. 萌新的linux之旅 find
  19. 设置goland里的行间距
  20. 配置一台微型计算机配件,电脑基本配件(硬件)

热门文章

  1. 如何从网页上下载Flash?
  2. 检测含有中文字符串的实际长度
  3. jQuery异步上传文件
  4. 终于要揭开神秘面纱?Magic Leap将要展示产品
  5. requests.exceptions.SSLError: hostname '127.0.0.1' doesn't match None
  6. Android如何使用so文件和Android studio中导入so
  7. Python黑帽编程 3.1 ARP欺骗
  8. Nginx对某个文件夹或整个站点进行登录认证的方法
  9. 注释的编写方式:写明白来龙去脉提高代码产出率
  10. Tether销毁5亿USDT;BCH将于11月15日硬分叉,SV-Pool已向普通矿工开放