(Java) Excel工具類


 

 

package com.business.platform.service.common;

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @description: Exl工具類
 * @author: zyu
 * @time: 2020-07-18 14:38
 */
public class ExLUtils {

    /**
     * 讀取Excel文件內容
     * @return
     */
    public static List<Map<String, Object>> readExcel() {
        /* Excel文件地址 */
        String filePath = "F:\\商戶發展情況日報表.xlsx";
        String strField = "no,proxy_name_2,increase_day,increase_month,increase_year,total_num,no_trade_num";
        String[] fieldArr = strField.split(",");

        List<Map<String, Object>> retList = new ArrayList<>();
        try {
            /**
             * HSSFworkbook,XSSFworkbook,SXSSFworkbook區別總結
             *
             * HSSFWorkbook:是操作Excel2003以前(包括2003)的版本,擴展名是.xls;     【導出的行數至多為65535行,超出65536條后系統就會報錯】
             * XSSFWorkbook:是操作Excel2007后的版本,擴展名是.xlsx;                 【其對應的是excel2007(1048576行,16384列)擴展名為“.xlsx”,最多可以導出104萬行】
             * SXSSFWorkbook:是操作Excel2007后的版本,擴展名是.xlsx;                【不會內存溢出】
             */
            /* 創建Excel工作本的引用 */
            Workbook workbook = new XSSFWorkbook(new FileInputStream(filePath));

            /* 讀取第一張工作表 Sheet1 */
            Sheet sheet = workbook.getSheet("Sheet1");

            System.out.println(sheet.getLastRowNum());

            for (int i = 0; i <= sheet.getLastRowNum(); i++) {

                /* 獲取每一行 */
                Row row = sheet.getRow(i);
                Map<String, Object> itemMap = new HashMap<>();

                for (int cellNum = 0; cellNum < fieldArr.length; cellNum++) {
                    String key = fieldArr[cellNum];
                    String item = row.getCell(cellNum).toString();
                    itemMap.put(key, item);
                }
                retList.add(itemMap);
            }

            System.out.println(retList);
        } catch (Exception e) {
            System.out.println(e);
        }

        return retList;
    }


    /**
     * 寫出數據到Excel工作簿
     *
     * @param workbook    工作簿
     * @param headerCount 表頭高度
     * @param offsetRow   偏移行
     * @param dataList    數據
     * @param mapper      映射關系
     * @return 下次開始行
     *
     * <p>我該如何使用?</p>
     * @see ExportUtils#textExport
     */
    public static int writeExcel(Workbook workbook, int headerCount, int offsetRow, List<Map<String, Object>> dataList, Map<Integer, String> mapper) {
        for (int i = 0; i < mapper.size(); i++) {
            String value = mapper.get(i);
            if (value == null) {
                throw new RuntimeException("映射關系有錯誤");
            }
        }

        Sheet sheet = workbook.getSheet("Sheet1");
        for (Map<String, Object> data : dataList) {
            Row row = sheet.createRow(headerCount + offsetRow++);

            for (int i = 0; i < mapper.size(); i++) {
                String columnName = mapper.get(i);
                if (columnName.isEmpty()) {
                    continue;
                }

                Cell cell = row.createCell(i);

                if ("$AUTO".equals(columnName)) {
                    cell.setCellValue(offsetRow);
                    continue;
                }

                Object value = data.get(columnName);
                if (value == null) {
                    cell.setCellValue("");
                    continue;
                }
                if (value instanceof String) {
                    cell.setCellValue((String) value);
                } else if (value instanceof Integer) {
                    cell.setCellValue((Integer) value);
                } else if (value instanceof Double) {
                    cell.setCellValue((Double) value);
                } else {
                    cell.setCellValue(value.toString());
                }
            }
        }

        return offsetRow;
    }

    /**
     * 測試寫入
     */
    public static void textExport() {
        try {
            String inputFilePath = "F:\\inputExcel.xlsx";
            String outputFilePath = "F:\\outputExcel.xlsx";

            /* 關系映射表 */
            Map<Integer, String> mapper = new HashMap<>();
            mapper.put(0, "$AUTO"); // 序號定義
            mapper.put(1, "proxy_name_2");
            mapper.put(2, "increase_day");
            mapper.put(3, "increase_month");
            mapper.put(4, "increase_year");
            mapper.put(5, "total_num");
            mapper.put(6, "no_trade_num");

            /* 查詢數據 */
            List<Map<String, Object>> dataList = new ArrayList<>();

            FileInputStream inputStream = new FileInputStream(inputFilePath);
            FileOutputStream outputStream = new FileOutputStream(outputFilePath);
            Workbook workbook = WorkbookFactory.create(inputStream);

            int headerCount = 2;   // 設置表頭高度
            int offsetRow = 0;     // 初始偏移量0
            // 寫行數據
           writeExcel(workbook, headerCount, offsetRow, dataList, mapper);

            workbook.write(outputStream);
            inputStream.close();
            outputStream.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

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

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM