Ошибка «Недействительный файл OOXML» при попытке объединить 25 файлов на одном листе в одну книгу с 25 листами - PullRequest
0 голосов
/ 10 июля 2019

У меня проблемы с Apache POI при попытке объединить несколько файлов Excel в один файл Excel.Моя программа в настоящее время состоит из двух классов Java.Моя основная проблема заключается в том, что я верю в FileList, всякий раз, когда я создаю массив файлов, я считаю, что он не должен поддерживать формат OOXML, поэтому я вижу ошибку в ExcelCombiner.java.Я надеялся, что кто-то может помочь с альтернативами моему подходу, которые не приведут к ошибке.

// FileList.java


import java.io.File;
import java.util.ArrayList;

public class FileList {
    private File[] files;
    private String folderPath = "/Users/andrew/Desktop/MIMIC_DATABASE";
    private File folder;

    public FileList() {
        folder = new File(folderPath);
        files = folder.listFiles();
    }

    //Getters
    public File[] getFiles() {
        return files;
    }

    public File getFolder() {
        return folder;
    }

    //Tester
    public static void testClass() {
        FileList fileList = new FileList();

        int i = 0;

        for (File file : fileList.getFiles()) {
            System.out.println(file.getName());
            i++;
        }
    }

    /*
    public static void main(String[] args) {
        testClass();
    }
    */
}

Другой класс:

//ExcelCombiner.java

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.DataFormatter;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class ExcelCombiner {
    private FileList fileList = new FileList();
    private Workbook workbook = new XSSFWorkbook();

    public void createWorkbook() throws IOException, InvalidFormatException {
        FileOutputStream out = new FileOutputStream(new File("MIMIC_DATABASE.xlsx"));
        createSheets();
        workbook.write(out);
        out.close();
        workbook.close();
    }

    public void createSheets() throws InvalidFormatException, IOException {
        for (File file : fileList.getFiles()) {
            System.out.println(file.getName());
            Workbook fileBook = new XSSFWorkbook(file);

            String sheetName = fileBook.getSheetName(0);
            //New Sheet in Workbook that we're copying info into
            Sheet newSheet = workbook.createSheet(sheetName);
            //Old Sheet, fileBook should just be an excel file with one sheet
            Sheet oldSheet = fileBook.getSheetAt(0);

            for (int i = 0; i < oldSheet.getLastRowNum(); i++) {
                Row row = oldSheet.getRow(i);
                Row newRow = newSheet.createRow(i);
                for (int j = 0; j < row.getLastCellNum(); i++) {
                    Cell cell = row.getCell(j);
                    Cell newCell = newRow.createCell(j);

                    //Make sure to convert all old cells into String/Text
                    //Then copy them over to newCell
                    DataFormatter dataFormatter = new DataFormatter();
                    String cellValue = dataFormatter.formatCellValue(cell);
                    newCell.setCellValue(cellValue);
                }
            }
        }
    }

    public static void main(String[] args) throws IOException, InvalidFormatException {
        ExcelCombiner excelCombiner = new ExcelCombiner();
        excelCombiner.createWorkbook();
    }
}
...