Excel导出/导出工具类(POI)

在项目中多次操作poi来做导入导出操作,然后整理了两个工具类,一个导入,一个导出.方便之后的使用.

一.工具类代码:

package com.chcx.excel;

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

import java.io.InputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * Excel(POI)工具类
 */
public class ExcelTestUtil {
    /**
     * @param headList  Excel文件Head标题集合
     * @param fieldList Excel文件Field标题集合
     * @param dataList  Excel文件数据内容部分
     * @throws XSSFWorkbook
     */
    public static XSSFWorkbook createExcel(List<String> headList,
                                           List<String> fieldList, List<Map<String, Object>> dataList)
            throws Exception {
        // 创建新的Excel 工作簿
        XSSFWorkbook workbook = new XSSFWorkbook();

        // 在Excel工作簿中建一工作表,其名为缺省值
        // 如要新建一名为"效益指标"的工作表,其语句为:
        // HSSFSheet sheet = workbook.createSheet("效益指标");
        XSSFSheet sheet = workbook.createSheet();
        // 在索引0的位置创建行(最顶端的行)
        XSSFRow row = sheet.createRow(0);// 第一个sheet的第一行为标题
        // ===============================================================
        for (int i = 0; i < headList.size(); i++) {

            // 在索引0的位置创建单元格(左上端)
            XSSFCell cell = row.createCell(i);
            // 定义单元格为字符串类型
            cell.setCellType(XSSFCell.CELL_TYPE_STRING);
            // 在单元格中输入一些内容
            cell.setCellValue(headList.get(i));
        }
        // ===============================================================

        for (int n = 0; n < dataList.size(); n++) {
            // 在索引1的位置创建行(最顶端的行)
            XSSFRow row_value = sheet.createRow(n + 1);
            Map<String, Object> dataMap = dataList.get(n);
            // ===============================================================
            for (int i = 0; i < fieldList.size(); i++) {

                // 在索引0的位置创建单元格(左上端)
                XSSFCell cell = row_value.createCell(i);
                // 定义单元格为字符串类型
                cell.setCellType(XSSFCell.CELL_TYPE_STRING);
                // 在单元格中输入一些内容
                cell.setCellValue(objToString(dataMap.get(fieldList.get(i))));
            }
            // ===============================================================
        }
        return workbook;
    }

    private static String objToString(Object obj) {
        if (obj == null) {
            return "";
        } else {
            if (obj instanceof String) {
                return (String) obj;
            } else if (obj instanceof Date) {
                return null;// DateUtil.dateToString((Date)
                // obj,DateUtil.DATESTYLE_SHORT_EX);
            } else {
                return obj.toString();
            }
        }
    }

    /**
     * 读取 Excel文件内容
     *
     * @param inputstream 文件输入流
     * @return
     * @throws Exception
     */
    public static List<List<Object>> readExcelByInputStream(
            InputStream inputstream) throws Exception {
        // 结果集
        List<List<Object>> list = new ArrayList<List<Object>>();

        XSSFWorkbook workbook = new XSSFWorkbook(inputstream);

        // 遍历该表格中所有的工作表,i表示工作表的数量 getNumberOfSheets表示工作表的总数
        XSSFSheet sheet = workbook.getSheetAt(0);

        // 遍历该行所有的行,j表示行数 getPhysicalNumberOfRows行的总数

        // //System.out.println("excel行数: "+hssfsheet.getPhysicalNumberOfRows());
        for (int j = 0; j < sheet.getPhysicalNumberOfRows(); j++) {
            XSSFRow row = sheet.getRow(j);
            if (row != null) {
                int col = row.getPhysicalNumberOfCells();
                // 单行数据
                List<Object> arrayString = new ArrayList<Object>();
                for (int i = 0; i < col; i++) {
                    XSSFCell cell = row.getCell(i);
                    if (cell == null) {
                        arrayString.add("");
                    } else if (cell.getCellType() == 0) {
                        arrayString.add(new Double(cell.getNumericCellValue())
                                .toString());
                    } else {// 如果EXCEL表格中的数据类型为字符串型
                        arrayString.add(cell.getStringCellValue().trim());
                    }
                }
                list.add(arrayString);
            }
        }
        return list;
    }

}

二.测试代码:

1.测试导出

 public static void main(String[] args) {
        test1();
    }

    public static void test1() {
        List<String> headList = new ArrayList<>();
        headList.add("标题1");
        headList.add("标题2");
        headList.add("标题3");
        headList.add("标题4");
        List<String> fieldList = new ArrayList<>();
        fieldList.add("id");
        fieldList.add("name");
        fieldList.add("pas");
        fieldList.add("sex");
        ArrayList<Map<String, Object>> maps = new ArrayList<>();
        Map<String, Object> map = new HashMap<>();
        map.put("id", "id1");
        map.put("name", "name1");
        map.put("pas", "pa1111111111111111111111111111111111111111111111111s1");
        map.put("sex", "sex1");
        Map<String, Object> map2 = new HashMap<>();
        map2.put("id", "id2");
        map2.put("name", "name2");
        map2.put("pas", "pas2");
        map2.put("sex", "sex2");
        Map<String, Object> map3 = new HashMap<>();
        map3.put("id", "id3");
        map3.put("name", "name3");
        map3.put("pas", "pas3");
        map3.put("sex", "sex3");

        maps.add(map);
        maps.add(map3);
        maps.add(map2);
        try {
            XSSFWorkbook workbook = ExcelTestUtil.createExcel(headList, fieldList, maps);
            FileOutputStream outputStream = new FileOutputStream("F:\\del\\xxxxx.xlsx");
            workbook.write(outputStream);// 输出到流中
            outputStream.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

执行结果:

2.读取excel 获取list数据

 public static void main(String[] args) throws Exception {
//        test1();
        test2();
    }

    public static void test2() throws Exception {
        InputStream fileInputStream = new FileInputStream("F:\\del\\xxxxx.xlsx");
        List<List<Object>> lists = ExcelTestUtil.readExcelByInputStream(fileInputStream);
        lists.forEach(objects -> objects.forEach(System.out::println));
    }

debug 读取到的结果集

输出打印内容

猜你喜欢

转载自blog.csdn.net/hyc123123123123/article/details/89945832