package com.cmii.ag.zhyz.demo.payload.village.util;

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

import java.io.*;

/**
 * 合并excel的sheet工具类
 */
public class MergeExcelUtil {


    /**
     * formexcel中有多个sheet需要合并时调用此方法遍历合并
     * @param formExcelPath 需要合并的sheet的excel的地址
     * @param mainExcelPath 合并到的主excel
     */
    public static void manySheetMergeExcel(String formExcelPath,String mainExcelPath){

        try(FileInputStream mainFile = new FileInputStream(new File(mainExcelPath));
            FileInputStream excelFile = new FileInputStream(new File(formExcelPath));
            FileOutputStream outputStream = new FileOutputStream(mainExcelPath);) {

            XSSFWorkbook workbook = new XSSFWorkbook(excelFile);
            XSSFWorkbook mainWork = new XSSFWorkbook(mainFile);
            int numberOfSheets = workbook.getNumberOfSheets();
            for (int i = 0 ; i< numberOfSheets ; i++){
                XSSFSheet sheetAt = workbook.getSheetAt(i);
                mainWork.createSheet(sheetAt.getSheetName());
                XSSFSheet mainSheet = mainWork.getSheet(sheetAt.getSheetName());
                System.out.println("当前是第"+i+"张sheet");
                CopySheetUtil.copySheet(mainWork,sheetAt,mainSheet);
            }
            mainWork.write(outputStream);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }


    /**
     * 文件夹下多个excel需要合并到一个excel时调用此方法
     * excel中只需要第一个sheet复制
     * @param filePath 文件夹地址
     * @param mainExcelPath 目标excel地址
     */
    public static void oneSheetMergeExcel(String filePath,String mainExcelPath){
        try(FileInputStream mainFile = new FileInputStream(new File(mainExcelPath));
            FileOutputStream outputStream = new FileOutputStream(mainExcelPath);) {

            XSSFWorkbook mainWork = new XSSFWorkbook(mainFile);

            recursiveFiles(filePath,mainWork);
            mainWork.write(outputStream);
        }catch(Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 循环读取文件夹里的excel文件合并到目标excel
     * @param path 需要循环的文件夹地址
     * @param mainWork 需要复制进去的目标excel的工作簿
     */
    public static void recursiveFiles(String path,XSSFWorkbook mainWork) throws IOException {
        // 创建 File对象
        File file = new File(path);
        // 取 文件/文件夹
        File files[] = file.listFiles();
        // 对象为空 直接返回
        if(files == null){
            return;
        }
        // 目录下文件
        if(files.length == 0){
            System.out.println(path + "该文件夹下没有文件");
        }
        // 存在文件 遍历 判断
        for (File f : files) {
            // 判断是否为 文件夹
            if(f.isDirectory()){
                System.out.print("文件夹: ");
                System.out.println(f.getAbsolutePath());
                // 为 文件夹继续遍历
                recursiveFiles(f.getAbsolutePath(),mainWork);
                // 判断是否为 文件
            } else if(f.isFile()){
                FileInputStream excelFile = new FileInputStream(f);
                XSSFWorkbook workbook = new XSSFWorkbook(excelFile);
                XSSFSheet sheetAt = workbook.getSheetAt(0);
                String name = f.getName();
                int i = name.indexOf(".");
                name = name.substring(0,i);
                System.out.println("sheet名字:"+name);
                mainWork.createSheet(name);
                XSSFSheet mainSheet = mainWork.getSheet(name);
                CopySheetUtil.copySheet(mainWork,sheetAt,mainSheet);

            } else {
                System.out.print("未知错误文件");
            }
        }
    }
}