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

  1. Inspect the cell at the reported contents and re-enter it as a standard number, date, text, or boolean cell
  2. Set the step's field type so it matches the actual cell type
  3. Switch the spreadsheet engine (e.g. from JXL to POI) in the step's Spreadsheet type settings, which supports more cell types
  4. 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

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


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)