Excle 读取写入简单数据处理

59 阅读1分钟
package test;

import com.alibaba.fastjson.JSON;
import com.wbi.util.Util;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import weaver.formmode.excel.POIUtil;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author js
 * @className: ExcleTest
 * @description:
 * @date 2024/1/25
 * @version:1.0
 */
public class ReadAndWriteExcle {
    public static void main(String[] args) throws IOException {
        //读取excle路径
        String readFilePath = "/Users/XXX/Downloads/0111/readFile.xlsx";
        //读取第几个Sheet页签
        int readtSheetAt = 0;
        //第几行开始读取
        int readStartRowNo = 0;
        //读取的内容
        List<Map<Integer, String>> readDataList = readWorkbook(readFilePath, readtSheetAt, readStartRowNo);
        //数据过滤,根据写入标题序号整理数据 TODO
        List<Map<Integer, String>> readDatafilterateList = readDatafilterate(readDataList);

        //写入文件路径
        String writeInFilePath = "/Users/XXX/Downloads/0111/writeInFile.xlsx";
        //写入文件标题
        List<String> writeInSheetTitleList = new ArrayList<String>();
        writeInSheetTitleList.add("流程ID");
        writeInSheetTitleList.add("凭证号");
        writeInSheetTitleList.add("流程标题");
        writeInSheetTitleList.add("申请日期");
        writeInSheetTitleList.add("公司代码");
        writeInSheetTitleList.add("凭证日期");
        writeInSheetTitleList.add("过账日期");
        //写入文件
        writeInWorkbook(writeInFilePath, writeInSheetTitleList, readDatafilterateList);
    }
    /**
     * @Description: 数据过滤
     * @Author: js
     * @param readDataList
     * @return List<Map<String>>
    */
    public static List<Map<Integer, String>> readDatafilterate(List<Map<Integer, String>> readDataList) {
        List<Map<Integer, String>> readDatafilterate = new ArrayList<Map<Integer, String>>();
        readDatafilterate = readDataList;
        /**
         * @Description:  TODO
         * @Author: js
         * @param readDataList
         * @return List<Map<String>>
        */
        return readDatafilterate;
    }

    public static List<Map<Integer, String>> readWorkbook(String readFilePath, int readtSheetAt, int readStartRowNo) {
        //读取Excel文档
        File excelFile = new File(readFilePath);
        List<Map<Integer, String>> list = new ArrayList<Map<Integer, String>>();
        try {
            Workbook workbook = WorkbookFactory.create(excelFile);
            Sheet sheet = workbook.getSheetAt(readtSheetAt);
            int lastRowNo = sheet.getLastRowNum();
            for (int i = readStartRowNo; i < lastRowNo; i++) {
                Map<Integer, String> map = new HashMap<>();
                short lastCellNum = sheet.getRow(i).getLastCellNum();
                for (int j = 0; j < lastCellNum; j++) {
                    String itemsVal = POIUtil.getValue(sheet, i, j);
                    map.put(j, itemsVal);
                }
                list.add(map);
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        System.out.println("readWorkbook >>> list >>>" + JSON.toJSONString(list));
        return list;
    }

    public static void writeInWorkbook(String writeInFilePath, List<String> writeInSheetTitleList, List<Map<Integer, String>> readDataList) {
        // 创建工作簿对象
        Workbook workbook1 = new XSSFWorkbook();
        // 创建工作表对象
        Sheet sheet1 = workbook1.createSheet("Sheet1");

        // 创建行对象并添加数据
        Row title = sheet1.createRow(0);
        for (int i = 0; i < writeInSheetTitleList.size(); i++) {
            Cell cell1 = title.createCell(i);
            cell1.setCellValue(Util.null2String(writeInSheetTitleList.get(i)));
        }

        //行项目
        for (int i = 0; i < readDataList.size(); i++) {
            Map<Integer, String> map = readDataList.get(i);
            // 创建行对象并添加数据
            Row items = sheet1.createRow(i + 1);
            for (int ii = 0; ii < writeInSheetTitleList.size(); ii++) {
                Cell cell1 = items.createCell(ii);
                String val = map.get(Util.getIntValue(ii));
                cell1.setCellValue(val);
            }
        }
        try (FileOutputStream outputStream = new FileOutputStream(writeInFilePath)) {
            workbook1.write(outputStream);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // 关闭工作簿对象
            try {
                workbook1.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}