java使用poi导出Excel的方法

本文实例为大家分享了java使用poi导出Excel的具体代码,供大家参考,具体内容如下

package hyss.util.common;

import java.io.IOException;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
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.ss.util.CellRangeAddress;

/**
 * Excel导出工具类
 * @author ts
 */

public class ExportExcelUtil {
 //显示的导出表的标题
 private String title;
 //导出表的列名
 private String[] rowName ;

 private List<Object[]> dataList = new ArrayList<Object[]>();

// HttpServletResponse response;

 //构造方法,传入要导出的数据
 public ExportExcelUtil(String title,String[] rowName,List<Object[]> dataList){
  this.dataList = dataList;
  this.rowName = rowName;
  this.title = title;
 }

 /*
  * 导出数据
  * */
 public void export() throws Exception{
  try{
   HSSFWorkbook workbook = new HSSFWorkbook();      // 创建工作簿对象
   HSSFSheet sheet = workbook.createSheet(title);      // 创建工作表

   // 产生表格标题行
   HSSFRow rowm = sheet.createRow(0);
   HSSFCell cellTiltle = rowm.createCell(0);
   rowm.setHeightInPoints(25);           //设置标题行默认行高

   //sheet样式定义【getColumnTopStyle()/getStyle()均为自定义方法 - 在下面 - 可扩展】
   HSSFCellStyle columnTitleStyle = this.getTitleTopStyle(workbook);//获取标题行样式
   HSSFCellStyle columnTopStyle = this.getColumnTopStyle(workbook); //获取列头样式对象
   HSSFCellStyle style = this.getStyle(workbook);     //单元格样式对象

   sheet.addMergedRegion(new CellRangeAddress(0, 1, 0, (rowName.length-1)));
   cellTiltle.setCellStyle(columnTitleStyle);
   cellTiltle.setCellValue(title);

   // 定义所需列数
   int columnNum = rowName.length;
   HSSFRow rowRowName = sheet.createRow(2);    // 在索引2的位置创建行(最顶端的行开始的第二行)
   rowRowName.setHeightInPoints(25);       //将列头设置默认行高
   // 将列头设置到sheet的单元格中
   for(int n=0;n<columnNum;n++){
    HSSFCell cellRowName = rowRowName.createCell(n);    //创建列头对应个数的单元格
    cellRowName.setCellType(HSSFCell.CELL_TYPE_STRING);    //设置列头单元格的数据类型
    HSSFRichTextString text = new HSSFRichTextString(rowName[n]);
    cellRowName.setCellValue(text);         //设置列头单元格的值
    cellRowName.setCellStyle(columnTopStyle);      //设置列头单元格样式
   }

   //将查询出的数据设置到sheet对应的单元格中
   for(int i=0;i<dataList.size();i++){

    Object[] obj = dataList.get(i);//遍历每个对象
    HSSFRow row = sheet.createRow(i+3);//创建所需的行数
    row.setHeightInPoints(20); //将创建出的行设置默认行高
    for(int j=0; j<obj.length; j++){
     HSSFCell cell = null; //设置单元格的数据类型
     if(j == 0){
      cell = row.createCell(j,HSSFCell.CELL_TYPE_NUMERIC);
      cell.setCellValue(i+1);
     }else{
      cell = row.createCell(j,HSSFCell.CELL_TYPE_STRING);
      if(!"".equals(obj[j]) && obj[j] != null){
       cell.setCellValue(obj[j].toString());      //设置单元格的值
      }
     }
     cell.setCellStyle(style);         //设置单元格样式
    }
   }
   //让列宽随着导出的列长自动适应
   for (int colNum = 0; colNum < columnNum; colNum++) {
    int columnWidth = sheet.getColumnWidth(colNum) / 256;
    for (int rowNum = 0; rowNum < sheet.getLastRowNum(); rowNum++) {
     HSSFRow currentRow;
     //当前行未被使用过
     if (sheet.getRow(rowNum) == null) {
      currentRow = sheet.createRow(rowNum);
     } else {
      currentRow = sheet.getRow(rowNum);
     }
     if (currentRow.getCell(colNum) != null) {
      HSSFCell currentCell = currentRow.getCell(colNum);
      if (currentCell.getCellType() == HSSFCell.CELL_TYPE_STRING) {
       int length = currentCell.getStringCellValue().getBytes().length;
       if (columnWidth < length) {
        columnWidth = length;
       }
      }
     }
    }
    if(colNum == 0){
     sheet.setColumnWidth(colNum, (columnWidth-2) * 256);

    }else{
     sheet.setColumnWidth(colNum, (columnWidth+4) * 256);
    }
   }

   if(workbook !=null){
    try
    {
     String fileName = title + DateTime.getSystemDateTime("yyyy-MM-dd") + ".xls";
             //因 response已经封装成工具类所以下面这段代码注释掉
//     response =ServletActionContext.getResponse();
//     response.setContentType("APPLICATION/OCTET-STREAM");
//     response.setHeader("Content-Disposition", headStr);
//     OutputStream out = response.getOutputStream();

     //解决中文乱码
     Struts2Util.getResponse().setCharacterEncoding("UTF-8");
     //解决中文乱码
     Struts2Util.getResponse().setHeader("Content-Disposition", "attachment;filename*=UTF-8''" + URLEncoder.encode(fileName,"UTF-8"));
     //文件下载
     Struts2Util.getResponse().setContentType("APPLICATION/OCTET-STREAM");
     OutputStream out = Struts2Util.getResponse().getOutputStream();
     workbook.write(out);
    }
    catch (IOException e)
    {
     e.printStackTrace();
    }
   }

  }catch(Exception e){
   e.printStackTrace();
  }

 }

 /*
  * 设置标题样式
  */
  public HSSFCellStyle getTitleTopStyle(HSSFWorkbook workbook) {

   // 设置字体
   HSSFFont font = workbook.createFont();
   //设置字体大小
   font.setFontHeightInPoints((short)24);
   //字体加粗
   font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
   //设置字体名字
   font.setFontName("宋体");
   //设置样式;
   HSSFCellStyle style = workbook.createCellStyle();
   //设置底边框;
   style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
   //设置底边框颜色;
   style.setBottomBorderColor(HSSFColor.BLACK.index);
   //设置左边框;
   style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
   //设置左边框颜色;
   style.setLeftBorderColor(HSSFColor.BLACK.index);
   //设置右边框;
   style.setBorderRight(HSSFCellStyle.BORDER_THIN);
   //设置右边框颜色;
   style.setRightBorderColor(HSSFColor.BLACK.index);
   //设置顶边框;
   style.setBorderTop(HSSFCellStyle.BORDER_THIN);
   //设置顶边框颜色;
   style.setTopBorderColor(HSSFColor.BLACK.index);
   //在样式用应用设置的字体;
   style.setFont(font);
   //设置自动换行;
   style.setWrapText(false);
   //设置水平对齐的样式为居中对齐;
   style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
   //设置垂直对齐的样式为居中对齐;
   style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);

   return style;

  }

 /*
  * 列头单元格样式
  */
  public HSSFCellStyle getColumnTopStyle(HSSFWorkbook workbook) {

   // 设置字体
   HSSFFont font = workbook.createFont();
   //设置字体大小
   font.setFontHeightInPoints((short)11);
   //字体加粗
   font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
   //设置字体名字
   font.setFontName("宋体");
   //设置样式;
   HSSFCellStyle style = workbook.createCellStyle();
   //设置底边框;
   style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
   //设置底边框颜色;
   style.setBottomBorderColor(HSSFColor.BLACK.index);
   //设置左边框;
   style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
   //设置左边框颜色;
   style.setLeftBorderColor(HSSFColor.BLACK.index);
   //设置右边框;
   style.setBorderRight(HSSFCellStyle.BORDER_THIN);
   //设置右边框颜色;
   style.setRightBorderColor(HSSFColor.BLACK.index);
   //设置顶边框;
   style.setBorderTop(HSSFCellStyle.BORDER_THIN);
   //设置顶边框颜色;
   style.setTopBorderColor(HSSFColor.BLACK.index);
   //在样式用应用设置的字体;
   style.setFont(font);
   //设置自动换行;
   style.setWrapText(false);
   //设置水平对齐的样式为居中对齐;
   style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
   //设置垂直对齐的样式为居中对齐;
   style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);

   return style;

  }

  /*
  * 列数据信息单元格样式
  */
  public HSSFCellStyle getStyle(HSSFWorkbook workbook) {
   // 设置字体
   HSSFFont font = workbook.createFont();
   //设置字体大小
   //font.setFontHeightInPoints((short)10);
   //字体加粗
   //font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
   //设置字体名字
   font.setFontName("宋体");
   //设置样式;
   HSSFCellStyle style = workbook.createCellStyle();
   //设置底边框;
   style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
   //设置底边框颜色;
   style.setBottomBorderColor(HSSFColor.BLACK.index);
   //设置左边框;
   style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
   //设置左边框颜色;
   style.setLeftBorderColor(HSSFColor.BLACK.index);
   //设置右边框;
   style.setBorderRight(HSSFCellStyle.BORDER_THIN);
   //设置右边框颜色;
   style.setRightBorderColor(HSSFColor.BLACK.index);
   //设置顶边框;
   style.setBorderTop(HSSFCellStyle.BORDER_THIN);
   //设置顶边框颜色;
   style.setTopBorderColor(HSSFColor.BLACK.index);
   //在样式用应用设置的字体;
   style.setFont(font);
   //设置自动换行;
   style.setWrapText(false);
   //设置水平对齐的样式为居中对齐;
//   style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
   //设置垂直对齐的样式为居中对齐;
//   style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);

   return style;

  }

}

实现方法

/*
* 实现方法
*/
public void exportExcel() throws Exception{
  String title = "测试";
  String[] rowsName = new String[]{"序号","列头1","列头2","列头3","列头4","列头5"};
  List<Object[]> dataList = new ArrayList<Object[]>();
  Object[] objs = null;
  for (int i = 0; i < 10; i++) {
   objs = new Object[rowsName.length];
   objs[0] = i;
   objs[1] = "测试1";
   objs[2] = "测试2";
   objs[3] = "测试3";
   objs[4] = "测试4";
   objs[5] = "测试5";
   dataList.add(objs);
  }
  ExportExcelUtil ex = new ExportExcelUtil(title, rowsName, dataList);
  ex.export();

 }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Java利用POI实现导入导出Excel表格示例代码

    介绍 Jakarta POI 是一套用于访问微软格式文档的Java API.Jakarta POI有很多组件组成,其中有用于操作Excel格式文件的HSSF和用于操作Word的HWPF,在各种组件中目前只有用于操作Excel的HSSF相对成熟.官方主页http://poi.apache.org/index.html,API文档http://poi.apache.org/apidocs/index.html 实现 已经在代码中加入了完整的注释. import java.io.FileInputSt

  • asp.net使用npoi读取excel模板并导出下载详解

    为什么要使用NPOI导出Excel? 一.解决传统操作Excel遇到的问题: 如果是.NET,需要在服务器端装Office,且及时更新它,以防漏洞,还需要设定权限允许.NET访问COM+,如果在导出过程中出问题可能导致服务器宕机.Excel会把只包含数字的列进行类型转换,本来是文本型的,Excel会将其转成数值型的,比如编号000123会变成123.导出时,如果字段内容以"-"或"="开头,Excel会把它当成公式进行,会报错.Excel会根据Excel文件前8行分

  • POI通过模板导出EXCEL文件的实例

    一般的EXCEL导出使用POI先创建一个HSSFWorkbook,然后通过不断创建HSSFRow,HSSFCell后设置单元格内容便可以完成导出. 这次在项目中需要用到模板,导出的内容包括(1.模板中的内容.样式.2.自己需要新增的内容.样式.),还需要设置单元格的样式,在网上搜了一些blog,完成后记录一下. 分析这次需求,最关键的就是如何获取到填充了模板的新HSSFWorkbook,如果获取到它,我们可以熟练的往里面添加内容. File fi = new File("F:/usr/user.

  • Springboot使用POI实现导出Excel文件示例

    前面讲述了使用POI导出Word文件和读取Excel文件,这两个例子都相对简单,接下来要讲述的使用POI导出Excel文件要复杂得多,内容也会比较长. 创建表头信息 表头信息用于自动生成表头结构及排序 public class ExcelHeader implements Comparable<ExcelHeader>{ /** * excel的标题名称 */ private String title; /** * 每一个标题的顺序 */ private int order; /** * 说对

  • jsp利用POI生成Excel并在页面中导出的示例

    java中导出Excel有两个组件可以使用,一个是jxl,一个是POI,我这里用的是POI.导出是可以在服务器上生成文件,然后下载,也可以利用输出流直接在网页 中弹出对话框提示用户保存或下载.生成文件的方式会导致服务器中存在着垃圾文件,实现方式不太优雅,所以这里我采用的是后面直接通过输出流的方式. 1.修改WEB服务器的CONF/web.xml,添加 Xml代码 <mime-mapping> <extension>xls</extension> <mime-typ

  • Java poi导出Excel下载到客户端

    Java poi 导出Excel并下载到客户端,具体内容如下 Maven配置,包含了其他文件格式的依赖,就全贴出来了 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-excelant</artifactId> <version>3.12</version> </dependency> <dependency> <gr

  • 基于apache poi根据模板导出excel的实现方法

    需要预先新建编辑好一个excel文件,设置好样式. 编辑好输出的数据,根据excel坐标一一对应. 支持列表数据输出,列表中列合并. 代码如下: package com.icourt.util; import org.apache.commons.collections4.CollectionUtils; import org.apache.poi.openxml4j.exceptions.InvalidFormatException; import org.apache.poi.ss.user

  • POI通用导出Excel(.xls,.xlsx)的方法

    POI操作EXCEL对象 HSSF:操作Excel 97(.xls)格式 XSSF:操作Excel 2007 OOXML (.xlsx)格式,操作EXCEL内存占用高于HSSF SXSSF:从POI3.8 beta3开始支持,基于XSSF,低内存占用. 使用POI的HSSF对象,生成Excel 97(.xls)格式,生成的EXCEL不经过压缩直接导出. 线上问题:负载服务器转发请求到应用服务器阻塞,以及内存溢出 . 如果系统存在大数据量报表导出,则考虑使用POI的SXSSF进行EXCEL操作.

  • POI导出Excel报错No such file or directory的解决方法

    场景重现 Apache POI Linux Tomcat 如上所示,当时在linux+tomcat的环境下,使用apache的poi导出excel的时候就会报"No such file or directory"的错误. 错误信息 java.lang.RuntimeException: java.io.IOException: No such file or directory at org.apache.poi.xssf.streaming.SXSSFWorkbook.createA

  • 详解poi+springmvc+springjdbc导入导出excel实例

    工作中常遇到导入导出excel的需求,本獂有一简答实例与大家分享. 废话不多说, 1.所需jar包: 2.前端代码: ieport.jsp: <%@page import="java.util.Date"%> <%@ page language="java" contentType="text/html; charset=utf-" pageEncoding="utf-"%> <!DOCTYPE

随机推荐