{"record":{"id":"3fe530625dc4aa9f","repo":"pentaho/pentaho-kettle","slug":"excelinput-exception-requiredfilesnotaccessible","errorCode":"ExcelInput.Exception.RequiredFilesNotAccessible","errorMessage":"ExcelInput.Exception.RequiredFilesNotAccessible","messagePattern":"ExcelInput\\.Exception\\.RequiredFilesNotAccessible","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"plugins/excel/core/src/main/java/org/pentaho/di/trans/steps/excelinput/ExcelInput.java","lineNumber":497,"sourceCode":"        throw new KettleException( BaseMessages.getString(\n          PKG, \"ExcelInput.Exception.MissingRequiredFiles\", message ) );\n      }\n    }\n\n    List<FileObject> nonAccessibleFiles = data.files.getNonAccessibleFiles();\n    if ( !nonAccessibleFiles.isEmpty() ) {\n      String message = FileInputList.getRequiredFilesDescription( nonAccessibleFiles );\n      if ( log.isBasic() ) {\n        logBasic( BaseMessages.getString( PKG, \"ExcelInput.Log.RequiredFilesTitle\" ), BaseMessages.getString(\n          PKG, \"ExcelInput.Log.RequiredFilesMsgNotAccessible\", message ) );\n      }\n\n      if ( meta.isErrorIgnored() ) {\n        for ( FileObject fileObject : nonAccessibleFiles ) {\n          data.errorHandler.handleNonAccessibleFile( fileObject );\n        }\n      } else {\n        throw new KettleException( BaseMessages.getString(\n          PKG, \"ExcelInput.Exception.RequiredFilesNotAccessible\", message ) );\n      }\n    }\n  }\n\n  public Object[] getRowFromWorkbooks() {\n    // This procedure outputs a single Excel data row on the destination\n    // rowsets...\n\n    Object[] retval = null;\n\n    try {\n      // First, see if a file has been opened?\n      if ( data.workbook == null ) {\n        // Open a new openFile..\n        data.file = data.files.getFile( data.filenr );\n        data.filename = KettleVFS.getFilename( data.file );\n        // Add additional fields?","sourceCodeStart":479,"sourceCodeEnd":515,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/plugins/excel/core/src/main/java/org/pentaho/di/trans/steps/excelinput/ExcelInput.java#L479-L515","documentation":"handleMissingFiles also checks files that exist but cannot be opened (non-accessible). When error ignoring is off, the step throws a KettleException summarizing the inaccessible required files and aborts.","triggerScenarios":"data.files.getNonAccessibleFiles() is non-empty (permission or lock problems) and meta.isErrorIgnored() is false.","commonSituations":"Files locked by Excel or another process; OS permission denies read; file on an unmounted network share; running the transformation as a service user lacking file permissions.","solutions":["Check and fix OS read permissions on the listed files","Close the application holding the file lock (e.g. Excel) or copy the file elsewhere first","Verify the network drive/mount is available on the execution node","Enable 'Ignore errors' with a non-accessible-file error handler if access failures are tolerable"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":"FileObject f = KettleVFS.getInstance(bowl).getFileObject(path, transMeta);\nif (f.exists() && !f.isReadable()) throw new AccessDeniedException(path);","typeGuard":null,"tryCatchPattern":"try {\n  transformation.execute();\n} catch (KettleException e) {\n  if (e.getMessage().contains(\"RequiredFilesNotAccessible\")) {\n    // check locks/permissions then retry once\n  } else { throw e; }\n}","preventionTips":["Ensure the service account can read all input paths","Close Excel sessions holding locks on source files","Confirm network mounts are up before scheduled runs"],"tags":["file","permissions","kettle"],"backgroundTag":"permission-denied","analyzedSha":"f3058517a153da500bf4551f46d79b91bf8ec552","analyzedAt":"2026-09-13T14:04:16.340Z","contentChangedAt":"2026-09-13T14:04:16.340Z","schemaVersion":2},"datasetVersion":"2026-09-20T23:17:15.980Z"}