pentaho/pentaho-kettle · error · KettleException
ExcelInput.Exception.UnsupportedType
ExcelInput.Exception.UnsupportedType
Error message
ExcelInput.Exception.UnsupportedType
What it means
ExcelInput throws this when a spreadsheet cell has a type the step cannot map to the requested Kettle value type. In checkType's switch over cell types, the default branch rejects any unrecognized CellType with a KettleException naming the cell's type description and contents. It guards the type-conversion contract between the Excel/ODS layer and Kettle ValueData.
Solutions
- Inspect the cell at the reported contents and re-enter it as a standard number, date, text, or boolean cell
- Set the step's field type so it matches the actual cell type
- Switch the spreadsheet engine (e.g. from JXL to POI) in the step's Spreadsheet type settings, which supports more cell types
- Enable 'ignore errors' on the step to skip bad cells if the data loss is acceptable
Defensive patterns
Strategy: validation
Validate before calling
// Before running, normalize the sheet: ensure cells are NUMBER/DATE/LABEL/BOOLEAN.
// e.g. in LibreOffice/Excel re-save, or in a pre-step check:
for (Cell cell : row) {
if (!(cell instanceof NumberCell || cell instanceof DateCell
|| cell instanceof LabelCell || cell instanceof BooleanCell)) {
throw new IllegalArgumentException("Unsupported cell type at row " + rowIdx);
}
} Try / catch
try {
step.processRow(smi, sdi);
} catch (KettleException e) {
if (e.getMessage().contains("UnsupportedType")) {
// log cell contents from message and skip/repair the row
} else { throw e; }
} Prevention
- Keep source sheets to plain numbers, text, dates and booleans
- Match the step's field type definitions to the actual sheet contents
- Use the POI engine when JXL rejects modern cell types
- Enable ignore-errors with cell-level error handling for dirty data
When it happens
Trigger: An Excel/ODS cell contains a cell type (e.g. an unsupported formula or unknown type) that hits the default case of the switch in checkType while fillRow is building the output row.
Common situations: Sheets saved by unusual producers with odd cell types; ODS/PDF or other spreadsheet types routed through a JXL-oriented pipeline; corrupted cells whose type cannot be classified.
Understand the failure class
Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.
Related errors
- Could not delete stale file " + buildFilename
- Error opening new file (logged), KettleException( e )
- Error writing field (posX,posY) (logged), KettleException(…
- ExcelInput.Exception.MissingRequiredFiles
- ExcelInput.Log.UnsafeFileException
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/06e49347080cc425.
Report an issue: GitHub.
Appendix: source
Thrown at plugins/excel/core/src/main/java/org/pentaho/di/trans/steps/excelinput/ExcelInput.java:360
.getContents(), v.getTypeDesc() ) );
}
break;
case EMPTY:
// OK
break;
case NUMBER:
if ( !( v.getType() == ValueMetaInterface.TYPE_STRING
|| v.getType() == ValueMetaInterface.TYPE_NONE || v.getType() == ValueMetaInterface.TYPE_INTEGER
|| v.getType() == ValueMetaInterface.TYPE_BIGNUMBER || v.getType() == ValueMetaInterface.TYPE_NUMBER ) ) {
throw new KettleException( BaseMessages.getString( PKG, "ExcelInput.Exception.InvalidTypeNumber", cell
.getContents(), v.getTypeDesc() ) );
}
break;
default:
throw new KettleException( BaseMessages.getString( PKG, "ExcelInput.Exception.UnsupportedType", cell
.getType().getDescription(), cell.getContents() ) );
}
}
public boolean processRow( StepMetaInterface smi, StepDataInterface sdi ) throws KettleException {
meta = (ExcelInputMeta) smi;
data = (ExcelInputData) sdi;
if ( first ) {
first = false;
data.outputRowMeta = new RowMeta(); // start from scratch!
meta.getFields( getTransMeta().getBowl(), data.outputRowMeta, getStepname(), null, null, this, repository,
metaStore );
if ( meta.isAcceptingFilenames() ) {
// Read the files from the specified input stream...
data.files.getFiles().clear();View on GitHub (pinned to f3058517a1)