実現したいこと
Excelファイルの読み書きをJavaで行いたいのですが、コンパイルが通りません。環境の何かが原因のようなのですが、調べてもよくわかりませんでした。
発生している問題・エラーメッセージ
PS C:\Users\OWNER> & 'C:\Program Files\RedHat\java-1.8.0-openjdk-1.8.0.362-1\bin\java.exe' '-cp' 'C:\Users\OWNER\AppData\Local\Temp\vscodesws_ae67f\jdt_ws\jdt.ls-java-project\bin' 'ExcelC' Error: A JNI error has occurred, please check your installation and try again Exception in thread "main" java.lang.NoClassDefFoundError: InvalidFormatException at java.lang.Class.getDeclaredMethods0(Native Method) at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) at java.lang.Class.privateGetMethodRecursive(Class.java:3048) at java.lang.Class.getMethod0(Class.java:3018) at java.lang.Class.getMethod(Class.java:1784) at sun.launcher.LauncherHelper.validateMainClass(LauncherHelper.java:650) at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:632) Caused by: java.lang.ClassNotFoundException: InvalidFormatException at java.net.URLClassLoader.findClass(URLClassLoader.java:387) at java.lang.ClassLoader.loadClass(ClassLoader.java:418) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352) at java.lang.ClassLoader.loadClass(ClassLoader.java:351) ... 7 more
該当のソースコード
import java.io.File; import java.io.IOException; import java.text.DateFormat; import java.util.Date; 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.DateUtil; 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.ss.usermodel.WorkbookFactory; /** * Excelのcellの値を取得する * */ public class ExcelC { public static final String SAMPLE_XLSX_FILE_PATH = "C:\Users\OWNER\Project\User.xlsx"; public static void main(String[] args) throws IOException, InvalidFormatException { // Creating a Workbook from an Excel file (.xls or .xlsx) Workbook workbook = WorkbookFactory.create(new File(SAMPLE_XLSX_FILE_PATH)); Sheet sheet = workbook.getSheetAt(0); Row head = sheet.getRow(1); ExcelC aaa = new ExcelC(); DataFormatter dataFormatter = new DataFormatter(); //cellrow int bb = 3; //cellY座標 for(int y = 2 ; y < 12 ; y++) { Row row = sheet.getRow(y); System.out.print("Row" + bb + "\r\n"); bb ++; //cellX座標 for (int i = 0 ; i < 11 ; i++){ Cell headc = head.getCell(i); Cell cell = row.getCell(i); String cellValue = dataFormatter.formatCellValue(headc); System.out.print(cellValue + ": "); aaa.printCellValue(cell); System.out.print("\r\n"); } System.out.print("\r\n"); } // Closing the workbook workbook.close(); } private static void printCellValue(Cell cell) { DateFormat fd = DateFormat.getDateInstance(DateFormat.FULL); switch (cell.getCellTypeEnum()) { case BOOLEAN: System.out.print(cell.getBooleanCellValue()); break; case STRING: System.out.print(cell.getRichStringCellValue().getString()); break; case NUMERIC: if (DateUtil.isCellDateFormatted(cell)) { Date kkk = cell.getDateCellValue(); System.out.print(fd.format(kkk)); } else { System.out.print(cell.getNumericCellValue()); } break; case FORMULA: System.out.print(cell.getCellFormula()); break; case BLANK: System.out.print(""); break; default: System.out.print(""); } System.out.print("\t"); } }
試したこと
調べてみたところどうもPower Shellのバージョンの問題だということなのですが、最新版をインストールしてそこからコマンドを打っても同じ結果が出ます。
これ以上自分で考えても答えが出そうにないので質問させていただきます。
以上よろしくお願いいたします。