通用excel和csv导出方法

 maven依赖

 

<dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.14</version>
</dependency>

ExportUtil.java:


package com.parsec.customs.util;

import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.lang.reflect.Field;
import java.util.List;

/**
 * Created by wuhao on 13/06/2017.
 */
public class ExportUtil {


    /**
     * 导出成excel
     * 
     * @param titles 表头
     * @param list   数据
     * @param field  在类里的属性名   
     * @param clazz  具体类型
     * @param <T>
     * @return
     */
    public static  <T> XSSFWorkbook export(String[] titles, List list, String[] field, Class<T> clazz) {
        try {
            XSSFWorkbook wb = new XSSFWorkbook();
            XSSFSheet sheet = wb.createSheet();
            XSSFRow row = sheet.createRow(0);
            for (int i = 0; i < titles.length; i++) {
                row.createCell(i).setCellValue(titles[i]);
            }
            for (int i = 1; i <= list.size(); i++) {
                XSSFRow hssfRow = sheet.createRow(i);
//                clazz = (Class<T>) list.get(i - 1).getClass();
                for (int j = 0; j < field.length; j++) {
                    Field declaredField = clazz.getDeclaredField(field[j]);
                    declaredField.setAccessible(true);
                    if (declaredField.getType().toString().equals("int")) {
                        hssfRow.createCell(j).setCellValue(declaredField.getInt(list.get(i - 1)));
                    } else {
                        String str = "" + declaredField.get(list.get(i - 1));
                        hssfRow.createCell(j).setCellValue("null".equals(str) ? "" : str);
                    }
                }
            }
            return wb;
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 导出成csv
     * 
     * @see ExportUtil.export
     * 
     * @param titles
     * @param list
     * @param field
     * @param clazz
     * @param <T>
     * @return
     */
    public static  <T> String exportToCsv(String[] titles, List list, String[] field, Class<T> clazz) {
        try {
            StringBuffer csvStr = new StringBuffer();
            for (String title : titles) {
                csvStr.append(title + ",");
            }
            csvStr.append("\n");
            for (int i = 1; i <= list.size(); i++) {
                for (int j = 0; j < field.length; j++) {
                    Field declaredField = clazz.getDeclaredField(field[j]);
                    declaredField.setAccessible(true);
                    if (declaredField.getType().toString().equals("int")) {
                        csvStr.append(declaredField.getInt(list.get(i - 1))).append(",");
                    } else {
                        String str = "" + declaredField.get(list.get(i - 1));
                        csvStr.append("null".equals(str) ? "" : str).append(",");
                    }
                }
                csvStr.append("\n");
            }
            return csvStr.toString();
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
        return null;
    }

}

  

 How to use?

 List<LikeSendIdRecord> likeSendIdRecords = ...;
 XSSFWorkbook export = ExportUtil.export(new String[]{"总运单号", "申报日期", "集中数字", "相似占比"}, likeSendIdRecords, new String[]{"voyageNo", "dDate", "idkey", "rate"}, LikeSendIdRecord.class);  

 

 下载文件的代码参考  

 

 response.setHeader("Content-disposition", "attachment; filename*=utf-8\'zh_cn\'" + file + ".xlsx");
        response.setContentType("application/vnd.ms-excel;charset=UTF-8");

        try {
            export.write(response.getOutputStream());
            response.getOutputStream().flush();
        } catch (IOException e) {
            e.printStackTrace();
        } 


 

转载于:https://my.oschina.net/u/2423298/blog/997505

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值