zoukankan      html  css  js  c++  java
  • 导出excel文件工具类

    package com.rrz.common.utils.excel;

    import java.io.IOException;
    import java.io.OutputStream;
    import java.lang.reflect.InvocationTargetException;
    import java.lang.reflect.Method;
    import java.net.URLEncoder;
    import java.text.SimpleDateFormat;
    import java.util.Collection;
    import java.util.Date;
    import java.util.Iterator;

    import javax.servlet.http.HttpServletResponse;

    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.HSSFRow;
    import org.apache.poi.hssf.usermodel.HSSFSheet;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;

    public class ExportExcelUtils {
    public static <T> HSSFWorkbook export(HttpServletResponse response, String fileName, String[] excelHeader,
    Collection<T> dataList) throws NoSuchMethodException, SecurityException, IllegalAccessException,
    IllegalArgumentException, InvocationTargetException, IOException {
    response.setContentType("application/vnd.ms-excel;charset=UTF-8");
    response.setHeader("Content-disposition",
    "attachment;filename=" + URLEncoder.encode(fileName + ".xls", "UTF-8"));
    HSSFWorkbook wb = new HSSFWorkbook();
    HSSFCellStyle titleStyle = titleStyle(wb);
    HSSFSheet sheet = wb.createSheet(fileName);
    String[] titleArray = new String[excelHeader.length];
    String[] fieldArray = new String[excelHeader.length];
    for (int i = 0; i < excelHeader.length; i++) {
    String[] tempArray = excelHeader[i].split("#");
    titleArray[i] = tempArray[0];
    fieldArray[i] = tempArray[1];
    }

    HSSFRow row = sheet.createRow((int) 0);// 行数从0开始
    HSSFCell seqCell = row.createCell(0);// cell列 从0开始 第一列添加序号
    seqCell.setCellValue("序号");
    seqCell.setCellStyle(titleStyle);
    sheet.autoSizeColumn(0);// 自动设置宽度
    for (int i = 0; i < titleArray.length; i++) {
    HSSFCell titleCell = row.createCell(i + 1);
    titleCell.setCellValue(titleArray[i]);
    titleCell.setCellStyle(titleStyle);
    sheet.autoSizeColumn(i + 1);
    }

    HSSFCellStyle dataStyle = dataStyle(wb);

    Iterator<T> it = dataList.iterator();
    int index = 0;
    while (it.hasNext()) {
    index++;
    row = sheet.createRow(index);
    HSSFCell sequenceCellValue = row.createCell(0);
    sequenceCellValue.setCellValue(index);
    sequenceCellValue.setCellStyle(dataStyle);
    sheet.autoSizeColumn(0);

    T t = (T) it.next();
    for (int i = 0; i < excelHeader.length; i++) {
    HSSFCell dataCell = row.createCell(i + 1);
    dataCell.setCellStyle(dataStyle);
    sheet.autoSizeColumn(i + 1);
    String fieldName = fieldArray[i];
    boolean flag = false;
    if (fieldName.equals("roleFlag") || fieldName.equals("authStatus")) {
    flag = true;
    }
    String getMethodName = "get" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1);// 取得对应getXxx()方法
    Class<? extends Object> tCls = t.getClass();// 泛型为Object以及所有Object的子类
    Method getMethod = tCls.getMethod(getMethodName, new Class[] {});// 通过方法名得到对应的方法
    Object value = getMethod.invoke(t, new Object[] {});// 动态调用方,得到属性值
    if (value != null) {
    if (value instanceof Date) {
    value = dateToStrLong((Date) value);
    }
    if (flag) {
    if (value.toString().equals("1")) {
    dataCell.setCellValue("是");
    } else {
    dataCell.setCellValue("否");
    }
    } else {
    dataCell.setCellValue(value.toString());// 为当前列赋值
    }
    } else {
    if (flag) {
    dataCell.setCellValue("否");
    }
    }
    }
    }
    OutputStream outputStream = response.getOutputStream();
    wb.write(outputStream);
    outputStream.flush();
    outputStream.close();
    return wb;
    }

    private final static HSSFCellStyle titleStyle(HSSFWorkbook wb) {
    HSSFCellStyle titleStyle = wb.createCellStyle();
    titleStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);// 上边框 细边线
    titleStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);// 下边框 细边线
    titleStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);// 左边框 细边线
    titleStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);// 右边框 细边线
    // 设置单元格对齐方式
    titleStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 水平居中
    titleStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 垂直居中
    // 设置字体样式
    HSSFFont titleFont = wb.createFont();
    titleFont.setFontHeightInPoints((short) 15); // 字体高度
    titleFont.setFontName("黑体"); // 字体样式
    titleStyle.setFont(titleFont);
    return titleStyle;
    }

    private final static HSSFCellStyle dataStyle(HSSFWorkbook wb) {
    HSSFCellStyle dataStyle = wb.createCellStyle();
    dataStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
    dataStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
    dataStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
    dataStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
    // 设置居中样式
    dataStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 水平居中
    dataStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 垂直居中
    // 设置数据字体
    HSSFFont dataFont = wb.createFont();
    dataFont.setFontHeightInPoints((short) 12); // 字体高度
    dataFont.setFontName("宋体"); // 字体
    dataStyle.setFont(dataFont);
    return dataStyle;
    }

    public static String dateToStrLong(Date dateDate) {
    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    String dateString = formatter.format(dateDate);
    return dateString;
    }
    }

  • 相关阅读:
    查找第一个不重复的字符问题
    gops
    关于 Go 中 Map 类型和 Slice 类型的传递
    Go 程序的性能优化及 pprof 的使用
    Go语言标准库_输入/输出
    Linux 终端 Bash 常用快捷键介绍及经验
    蓄水池采样算法(Reservoir Sampling)
    Guice 依赖绑定
    基本动态规划之硬币问题
    程序打包成jar 获取不到工程目录下文件的问题
  • 原文地址:https://www.cnblogs.com/austinspark-jessylu/p/7103289.html
Copyright © 2011-2022 走看看