使用的是poi3.13

http://mvnrepository.com/artifact/org.apache.poi/poi/3.13

  1. import java.io.IOException;
  2. import java.io.OutputStream;
  3. import java.lang.reflect.Field;
  4. import java.lang.reflect.InvocationTargetException;
  5. import java.lang.reflect.Method;
  6. import java.util.Iterator;
  7. import java.util.List;
  8. import java.util.logging.Level;
  9. import java.util.logging.Logger;
  10. import org.apache.poi.hssf.usermodel.HSSFCell;
  11. import org.apache.poi.hssf.usermodel.HSSFCellStyle;
  12. import org.apache.poi.hssf.usermodel.HSSFFont;
  13. import org.apache.poi.hssf.usermodel.HSSFRichTextString;
  14. import org.apache.poi.hssf.usermodel.HSSFRow;
  15. import org.apache.poi.hssf.usermodel.HSSFSheet;
  16. import org.apache.poi.hssf.usermodel.HSSFWorkbook;
  17. import org.apache.poi.hssf.util.HSSFColor;
  18.  
  19. /**
  20. * @author yan
  21. * @param <T>
  22. * @date 2016-12-6 20:38:24
  23. * @version V1.0
  24. * @desc
  25. */
  26. public class ExcelUtil<T> {
  27.  
  28. public HSSFWorkbook exportExcel(String title, String[] headers, List<T> dataset) {
  29.  
  30. // 声明一个工作薄
  31. HSSFWorkbook workbook = new HSSFWorkbook();
  32. // 生成一个表格
  33. HSSFSheet sheet = workbook.createSheet(title);
  34. // 设置表格默认列宽度为15个字节
  35. sheet.setDefaultColumnWidth((short) 15);
  36.  
  37. // 生成一个样式
  38. HSSFCellStyle style = workbook.createCellStyle();
  39. // 设置这些样式
  40. style.setFillForegroundColor(HSSFColor.SKY_BLUE.index);
  41. style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
  42. style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
  43. style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
  44. style.setBorderRight(HSSFCellStyle.BORDER_THIN);
  45. style.setBorderTop(HSSFCellStyle.BORDER_THIN);
  46. style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
  47.  
  48. // 生成一个字体
  49. HSSFFont font = workbook.createFont();
  50. font.setColor(HSSFColor.VIOLET.index);
  51. font.setFontHeightInPoints((short) 12);
  52. font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
  53.  
  54. // 把字体应用到当前的样式
  55. style.setFont(font);
  56. // 生成并设置另一个样式
  57. HSSFCellStyle style2 = workbook.createCellStyle();
  58. style2.setFillForegroundColor(HSSFColor.LIGHT_YELLOW.index);
  59. style2.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
  60. style2.setBorderBottom(HSSFCellStyle.BORDER_THIN);
  61. style2.setBorderLeft(HSSFCellStyle.BORDER_THIN);
  62. style2.setBorderRight(HSSFCellStyle.BORDER_THIN);
  63. style2.setBorderTop(HSSFCellStyle.BORDER_THIN);
  64. style2.setAlignment(HSSFCellStyle.ALIGN_CENTER);
  65. style2.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
  66. // 生成另一个字体
  67. HSSFFont font2 = workbook.createFont();
  68. font2.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);
  69. // 把字体应用到当前的样式
  70. style2.setFont(font2);
  71.  
  72. // 产生表格标题行
  73. HSSFRow row = sheet.createRow(0);
  74. for (short i = 0; i < headers.length; i++) {
  75. HSSFCell cell = row.createCell(i);
  76. cell.setCellStyle(style);
  77. HSSFRichTextString text = new HSSFRichTextString(headers[i]);
  78. cell.setCellValue(text);
  79. }
  80.  
  81. // 遍历集合数据,产生数据行
  82. Iterator<T> it = dataset.iterator();
  83. int index = 0;
  84.  
  85. try {
  86.  
  87. while (it.hasNext()) {
  88. index++;
  89. row = sheet.createRow(index);
  90. T t = (T) it.next();
  91.  
  92. // 利用反射,根据javabean属性的先后顺序,动态调用getXxx()方法得到属性值
  93. Field[] fields = t.getClass().getDeclaredFields();
  94. for (short i = 0; i < fields.length; i++) {
  95. HSSFCell cell = row.createCell(i);
  96. cell.setCellStyle(style2);
  97. Field field = fields[i];
  98. String fieldName = field.getName();
  99. String getMethodName = "get"
  100. + fieldName.substring(0, 1).toUpperCase()
  101. + fieldName.substring(1);
  102.  
  103. Class tCls = t.getClass();
  104.  
  105. Method getMethod = tCls.getMethod(getMethodName, new Class[]{});
  106.  
  107. Object value = getMethod.invoke(t, new Object[]{});
  108.  
  109. //全部当做字符串来处理
  110. String textValue = value.toString();
  111.  
  112. if (textValue != null) {
  113. HSSFRichTextString richString = new HSSFRichTextString(textValue);
  114. HSSFFont font3 = workbook.createFont();
  115. font3.setColor(HSSFColor.BLUE.index);
  116. richString.applyFont(font3);
  117. cell.setCellValue(richString);
  118. }
  119. }
  120. }
  121.  
  122. } catch (NoSuchMethodException ex) {
  123. Logger.getLogger(NewServlet.class.getName()).log(Level.SEVERE, null, ex);
  124. } catch (SecurityException ex) {
  125. Logger.getLogger(NewServlet.class.getName()).log(Level.SEVERE, null, ex);
  126. } catch (IllegalAccessException ex) {
  127. Logger.getLogger(NewServlet.class.getName()).log(Level.SEVERE, null, ex);
  128. } catch (IllegalArgumentException ex) {
  129. Logger.getLogger(NewServlet.class.getName()).log(Level.SEVERE, null, ex);
  130. } catch (InvocationTargetException ex) {
  131. Logger.getLogger(NewServlet.class.getName()).log(Level.SEVERE, null, ex);
  132. }
  133.  
  134. return workbook;
  135. }
  136. }
  1. import java.io.IOException;
  2. import java.io.OutputStream;
  3. import java.io.UnsupportedEncodingException;
  4. import java.net.URLEncoder;
  5. import java.util.ArrayList;
  6. import java.util.List;
  7. import javax.servlet.ServletException;
  8. import javax.servlet.http.HttpServlet;
  9. import javax.servlet.http.HttpServletRequest;
  10. import javax.servlet.http.HttpServletResponse;
  11. import org.apache.commons.codec.binary.Base64;
  12. import org.apache.poi.hssf.usermodel.HSSFWorkbook;
  13.  
  14. /**
  15. *
  16. * @author yan
  17. */
  18. public class NewServlet extends HttpServlet {
  19.  
  20. protected void processRequest(HttpServletRequest request, HttpServletResponse response)
  21. throws ServletException, IOException {
  22.  
  23. response.setHeader("Connection", "close");
  24. response.setHeader("Content-Type", "application/vnd.ms-excel;charset=UTF-8");
  25. String filename = System.currentTimeMillis() + "学生信息.xls";
  26. filename = encodeFileName(request, filename);
  27. response.setHeader("Content-Disposition", "attachment;filename=" + filename);
  28.  
  29. OutputStream out = null;
  30.  
  31. try {
  32. String[] headers = { "姓名", "年龄"};
  33. List<Student> dataset = new ArrayList<Student>();
  34. dataset.add(new Student("张三张三张三张三张三张三", "20"));
  35. dataset.add(new Student("李四", "24"));
  36. dataset.add(new Student("王五王五王五王五王五王五王五王五", "2211111111111123213"));
  37.  
  38. ExcelUtil<Student> eu = new ExcelUtil<Student>();
  39. HSSFWorkbook workbook = eu.exportExcel("发票领用",headers,dataset);
  40.  
  41. out = response.getOutputStream();
  42. workbook.write(out);
  43. } finally {
  44. if(out!=null){
  45. out.close();
  46. }
  47. }
  48. }
  49.  
  50. public String encodeFileName(HttpServletRequest request, String fileName) throws UnsupportedEncodingException {
  51. String agent = request.getHeader("USER-AGENT");
  52.  
  53. if (null != agent && -1 != agent.indexOf("MSIE")) {
  54. return URLEncoder.encode(fileName, "UTF-8");
  55. } else if (null != agent && -1 != agent.indexOf("Mozilla")) {
  56. return "=?UTF-8?B?"+ (new String(Base64.encodeBase64(fileName.getBytes("UTF-8")))) + "?=";
  57. } else {
  58. return fileName;
  59. }
  60. }
  61.  
  62. @Override
  63. protected void doGet(HttpServletRequest request, HttpServletResponse response)
  64. throws ServletException, IOException {
  65. processRequest(request, response);
  66. }
  67.  
  68. @Override
  69. protected void doPost(HttpServletRequest request, HttpServletResponse response)
  70. throws ServletException, IOException {
  71. processRequest(request, response);
  72. }
  73. }

Servlet 中使用POI生成Excel的更多相关文章

  1. 使用POI生成Excel报表

    先把报表模板截图贴上来 下面是POI编写的报表生成类ExcelReport.java package com.jadyer.report; import java.io.FileNotFoundExc ...

  2. POI生成EXCEL文件

    POI生成EXCEL文件 一.背景 根据指定格式的JSON文件生成对应的excel文件,需求如下 支持多sheet 支持单元格合并 支持插入图片 支持单元格样式可定制 需要 标题(title),表头( ...

  3. java使用poi生成excel

    使用poi生成excel通常包含一下几个步骤 创建一个工作簿 创建一个sheet 创建一个Row对象 创建一个cell对象(1个row+1个cell构成一个单元格) 设置单元格内容 设置单元格样式. ...

  4. POI生成EXCEL,公式不自动执行的有关问题

    POI生成EXCEL,公式不自动执行的问题 场景:POI读取Excel模板. 当使用POI操作Excel时,发现由POI生成的公式能够在打开Excel是被执行, 而事先手工写入Excel模板文件的公式 ...

  5. poi生成excel整理(设置边框/字体/颜色/加粗/居中/)

    转: poi生成excel整理(设置边框/字体/颜色/加粗/居中/) 2016年12月02日 11:05:23 吃奶的牛 阅读数:34324   HSSFWorkbook wb = new HSSFW ...

  6. java利用poi生成excel文件后下载本地

    1.该功能需要poi的jar包,链接: http://pan.baidu.com/s/1migAtNq 密码: 38fx. 2.首先新建一个实体类,用以存放单个数据 public class Test ...

  7. java中使用poi导出excel表格数据并且可以手动修改导出路径

    在我们开发项目中,很多时候会提出这样的需求:将前端的某某数据以excel表格导出,今天就给大家写一个简单的模板. 这里我们选择使用poi导出excel: 第一步:导入需要的jar包到 lib 文件夹下

  8. JavaWeb开发中采用FreeMarker生成Excel表格

            最近做了一个需求,要求导出一个采购合同的Excel表格,这个表格样式比较多.由于是合同,这个Excel表格里面有好多格式要求,比如结尾处签字那部分就有格式要求.这里介绍种采用FreeM ...

  9. Java 利用poi生成excel表格

    所需jar包,如下所示 写一个excel工具类 ExcelUtils .java import java.lang.reflect.Field; import java.util.Iterator; ...

随机推荐

  1. android 74 下载文本

    页面: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tool ...

  2. careercup-数组和字符串1.7

    1.7 编写一个算法,若M*N矩阵中某个元素为0,则将其所在的行与列清零. 类似于leetcode中的 Set Matrix Zeroes C++实现代码: #include<iostream& ...

  3. mysql wait_timeout和interactive_timeout总结

      (1)interactive_timeout:参数含义:服务器关闭交互式连接前等待活动的秒数.交互式客户端定义为在mysql_real_connect()中使用CLIENT_INTERACTIVE ...

  4. Eclipse Key Shortcuts for Greater Developers Productivity--reference

    Posted by Ajitesh Kumar / In Java / June 6, 2014 http://vitalflux.com/eclipse-key-shortcuts-greater- ...

  5. CentOS7安装Puppet+GitLab+Bind

    添加Puppet官方源 rpm -Uvh https://yum.puppetlabs.com/puppetlabs-release-el-7.noarch.rpm 安装Puppet yum -y i ...

  6. 在用VS2010连接oracle数据库时ORA-12504错误

    在用VS2010连接oracle数据库时,可能会出现: ORA-12504: TNS: 监听程序在 CONNECT_DATA 中未获得 SERVICE_NAME 只需在web.config文件Data ...

  7. C# winform线程的使用 制作提醒休息小程序(长时间计算机工作者必备)

    最近发现日常的工作中,经常因为敲代码而忘记了休息,晚上眼睛特别的累. 并且经常长时间看着显示器,对眼睛一定是不好的,所以今天开发了一个小程序,用于提醒休息. 下面先看看运行效果: 1.程序启动后,后台 ...

  8. phpQuery轻松采集网页内容

    原文地址:phpQuery轻松采集网页内容作者:陌上花开 phpQuery是一个基于PHP的服务端开源项目,它可以让PHP开发人员轻松处理DOM文档内容,比如获取某新闻网站的头条信息.更有意思的是,它 ...

  9. DedeCMS文章标题前增加所属栏目名称链接

    问题描述:在调用文章标题的时候,我想实现这样的形式:“[国内新闻]站长无忧真的是一个不错的站”,其中“国内新闻”是标题的所属栏目,并且加链接:    解决方法: [field:typelink /]这 ...

  10. Promise的用简要使用方式

    Promise用法 在项目中用到异步请求ajax,想到用promise来解决,之前用过但是已经很久了,还是忘了一些,重新熟悉了一下整理一份简要文档. Promise,就是一个对象,用来传递异步操作的消 ...