У меня проблемы с 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();
}
}