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("未知错误文件");
}
}
}
}