Example usage for org.apache.poi.xssf.usermodel XSSFRichTextString toString

List of usage examples for org.apache.poi.xssf.usermodel XSSFRichTextString toString

Introduction

In this page you can find the example usage for org.apache.poi.xssf.usermodel XSSFRichTextString toString.

Prototype

public String toString() 

Source Link

Document

Returns the plain string representation.

Usage

From source file:com.adanac.excel.reader.sax.ExcelXSSFSheetXMLHandler.java

License:Apache License

@Override
public void endElement(String uri, String localName, String name) throws SAXException {
    String thisStr = null;/*ww w.ja  va 2  s.  c  o m*/

    // v => contents of a cell
    if (isTextTag(name)) {
        vIsOpen = false;

        // Process the value contents as required, now we have it all
        switch (nextDataType) {
        case BOOLEAN:
            char first = value.charAt(0);
            thisStr = first == '0' ? "FALSE" : "TRUE";
            break;

        case ERROR:
            thisStr = "ERROR:" + value.toString();
            break;

        case FORMULA:
            if (formulasNotResults) {
                thisStr = formula.toString();
            } else {
                String fv = value.toString();

                if (this.formatString != null) {
                    try {
                        // Try to use the value as a formattable number
                        double d = Double.parseDouble(fv);
                        thisStr = formatter.formatRawCellContents(d, this.formatIndex, this.formatString);
                    } catch (NumberFormatException e) {
                        // Formula is a String result not a Numeric one
                        thisStr = fv;
                    }
                } else {
                    // No formating applied, just do raw value in all cases
                    thisStr = fv;
                }
            }
            break;

        case INLINE_STRING:
            // TODO: Can these ever have formatting on them?
            XSSFRichTextString rtsi = new XSSFRichTextString(value.toString());
            thisStr = rtsi.toString();
            break;

        case SST_STRING:
            String sstIndex = value.toString();
            try {
                int idx = Integer.parseInt(sstIndex);
                XSSFRichTextString rtss = new XSSFRichTextString(sharedStringsTable.getEntryAt(idx));
                thisStr = rtss.toString();
            } catch (NumberFormatException ex) {
                logger.log(POILogger.ERROR, "Failed to parse SST index '" + sstIndex, ex);
            }
            break;

        case NUMBER:
            String n = value.toString();
            if (this.formatString != null && n.length() > 0)
                thisStr = formatter.formatRawCellContents(Double.parseDouble(n), this.formatIndex,
                        this.formatString);
            else
                thisStr = n;
            break;

        default:
            thisStr = "(TODO: Unexpected type: " + nextDataType + ")";
            break;
        }

        // Do we have a comment for this cell? 
        //checkForEmptyCellComments(EmptyCellCommentsCheckType.CELL);
        XSSFComment comment = commentsTable != null ? commentsTable.findCellComment(cellRef) : null;

        // Output ??
        output.cell(rowNum, cellRef, thisStr, comment);
    } else if ("f".equals(name)) {
        fIsOpen = false;
    } else if ("is".equals(name)) {
        isIsOpen = false;
    } else if ("row".equals(name)) {
        // Handle any "missing" cells which had comments attached
        checkForEmptyCellComments(EmptyCellCommentsCheckType.END_OF_ROW);

        // Finish up the row
        output.endRow(rowNum);

        // some sheets do not have rowNum set in the XML, Excel can read
        // them so we should try to read them as well
        nextRowNum = rowNum + 1;
    } else if ("sheetData".equals(name)) {
        // Handle any "missing" cells which had comments attached
        checkForEmptyCellComments(EmptyCellCommentsCheckType.END_OF_SHEET_DATA);
    } else if ("oddHeader".equals(name) || "evenHeader".equals(name) || "firstHeader".equals(name)) {
        hfIsOpen = false;
        output.headerFooter(headerFooter.toString(), true, name);
    } else if ("oddFooter".equals(name) || "evenFooter".equals(name) || "firstFooter".equals(name)) {
        hfIsOpen = false;
        output.headerFooter(headerFooter.toString(), false, name);
    }
}

From source file:com.myjeeva.poi.CustomXSSFSheetXMLHandler.java

License:Apache License

/**
 * Mtodo alterado de forma a produzir, alm dos valores formatados para apresentao ao usurio final, os valores
 * originais sem qualquer tipo de formatao e nos tipos STRING ou NUMERICOS
 * Obs: Nmeros podem ser, na verdade, datas, ficando a cargo do cliente da classe definir como considera-lo.
 *//*from   w w  w  . ja va  2 s  . c om*/
public void endElement(String uri, String localName, String name) throws SAXException {
    String thisStr = null;

    // v => contents of a cell
    if (isTextTag(name)) {
        vIsOpen = false;

        // Process the value contents as required, now we have it all
        switch (nextDataType) {
        case BOOLEAN:
            char first = value.charAt(0);
            thisStr = first == '0' ? "FALSE" : "TRUE";
            break;

        case ERROR:
            thisStr = "ERROR:" + value.toString();
            break;

        case FORMULA:
            if (formulasNotResults) {
                thisStr = formula.toString();
            } else {
                String fv = value.toString();

                if (this.formatString != null) {
                    try {
                        // Try to use the value as a formattable number
                        double d = Double.parseDouble(fv);
                        thisStr = formatter.formatRawCellContents(d, this.formatIndex, this.formatString);
                    } catch (NumberFormatException e) {
                        // Formula is a String result not a Numeric one
                        thisStr = fv;
                    }
                } else {
                    // No formating applied, just do raw value in all cases
                    thisStr = fv;
                }
            }
            break;

        case INLINE_STRING:
            // TODO: Can these ever have formatting on them?
            XSSFRichTextString rtsi = new XSSFRichTextString(value.toString());
            thisStr = rtsi.toString();
            break;

        case SST_STRING:
            String sstIndex = value.toString();
            try {
                int idx = Integer.parseInt(sstIndex);
                XSSFRichTextString rtss = new XSSFRichTextString(sharedStringsTable.getEntryAt(idx));
                thisStr = rtss.toString();
            } catch (NumberFormatException ex) {
                System.err.println("Failed to parse SST index '" + sstIndex + "': " + ex.toString());
            }
            break;

        case NUMBER:
            String n = value.toString();
            if (this.formatString != null)
                thisStr = formatter.formatRawCellContents(Double.parseDouble(n), this.formatIndex,
                        this.formatString);
            else
                thisStr = n;
            break;

        default:
            thisStr = "(TODO: Unexpected type: " + nextDataType + ")";
            break;
        }

        // Modificada para armazenar tambm as informaes: valor original e tipo do contedo, e formato de apresentacao do excel
        output.cell(cellRef, thisStr, value.toString(), this.formatString, nextDataType);
    } else if ("f".equals(name)) {
        fIsOpen = false;
    } else if ("is".equals(name)) {
        isIsOpen = false;
    } else if ("row".equals(name)) {
        output.endRow();
    } else if ("oddHeader".equals(name) || "evenHeader".equals(name) || "firstHeader".equals(name)) {
        hfIsOpen = false;
        output.headerFooter(headerFooter.toString(), true, name);
    } else if ("oddFooter".equals(name) || "evenFooter".equals(name) || "firstFooter".equals(name)) {
        hfIsOpen = false;
        output.headerFooter(headerFooter.toString(), false, name);
    }
}

From source file:com.teradata.demo.utils.excel.XSSFSheetXMLHandler.java

License:Apache License

public void endElement(String uri, String localName, String name) throws SAXException {
    String thisStr = null;/*w ww .  j  a  v  a2 s .  c o  m*/

    // v => contents of a cell
    if (isTextTag(name)) {
        vIsOpen = false;

        // Process the value contents as required, now we have it all
        switch (nextDataType) {
        case BOOLEAN:
            char first = value.charAt(0);
            thisStr = first == '0' ? "FALSE" : "TRUE";
            break;

        case ERROR:
            thisStr = "ERROR:" + value.toString();
            break;

        case FORMULA:
            if (formulasNotResults) {
                thisStr = formula.toString();
            } else {
                String fv = value.toString();

                if (this.formatString != null) {
                    try {
                        // Try to use the value as a formattable number
                        double d = Double.parseDouble(fv);
                        thisStr = formatter.formatRawCellContents(d, this.formatIndex, this.formatString);
                    } catch (NumberFormatException e) {
                        // Formula is a String result not a Numeric one
                        thisStr = fv;
                    }
                } else {
                    // No formating applied, just do raw value in all cases
                    thisStr = fv;
                }
            }
            break;

        case INLINE_STRING:
            // TODO: Can these ever have formatting on them?
            XSSFRichTextString rtsi = new XSSFRichTextString(value.toString());
            thisStr = rtsi.toString();
            break;

        case SST_STRING:
            String sstIndex = value.toString();
            try {
                int idx = Integer.parseInt(sstIndex);
                XSSFRichTextString rtss = new XSSFRichTextString(sharedStringsTable.getEntryAt(idx));
                thisStr = rtss.toString();
            } catch (NumberFormatException ex) {
                System.err.println("Failed to parse SST index '" + sstIndex + "': " + ex.toString());
            }
            break;

        case NUMBER:
            String n = value.toString();
            if (this.formatString != null) {
                if (this.formatString.equals("m/d/yy"))
                    this.formatString = "yyyy-MM-dd";
                thisStr = formatter.formatRawCellContents(Double.parseDouble(n), this.formatIndex,
                        this.formatString);
            } else
                thisStr = n;
            break;

        default:
            thisStr = "(TODO: Unexpected type: " + nextDataType + ")";
            break;
        }

        // Output
        output.cell(cellRef, thisStr);
    } else if ("f".equals(name)) {
        fIsOpen = false;
    } else if ("is".equals(name)) {
        isIsOpen = false;
    } else if ("row".equals(name)) {
        output.endRow();
    } else if ("oddHeader".equals(name) || "evenHeader".equals(name) || "firstHeader".equals(name)) {
        hfIsOpen = false;
        output.headerFooter(headerFooter.toString(), true, name);
    } else if ("oddFooter".equals(name) || "evenFooter".equals(name) || "firstFooter".equals(name)) {
        hfIsOpen = false;
        output.headerFooter(headerFooter.toString(), false, name);
    }
}

From source file:net.geoprism.data.etl.excel.XSSFSheetXMLHandler.java

License:Open Source License

public void endElement(String uri, String localName, String name) throws SAXException {
    String thisStr = null;/* w  w w .  j a  va 2 s  .  c o m*/
    String thisData = null;

    // v => contents of a cell
    if (isTextTag(name)) {
        vIsOpen = false;

        // Process the value contents as required, now we have it all
        switch (nextDataType) {
        case BOOLEAN:
            char first = value.charAt(0);
            thisStr = first == '0' ? "FALSE" : "TRUE";
            thisData = new String(thisStr);
            break;

        case ERROR:
            thisStr = "ERROR:" + value.toString();
            thisData = new String(thisStr);
            break;

        case FORMULA:
            if (formulasNotResults) {
                thisStr = formula.toString();
                thisData = new String(thisStr);
            } else {
                String fv = value.toString();

                if (this.formatString != null) {
                    try {
                        // Try to use the value as a formattable number
                        double d = Double.parseDouble(fv);
                        thisStr = this.cellFormatter.formatRawCellContents(d, this.formatIndex,
                                this.formatString);
                        thisData = this.contentFormatter.formatRawCellContents(d, this.formatIndex,
                                this.formatString);
                    } catch (NumberFormatException e) {
                        // Formula is a String result not a Numeric one
                        thisStr = fv;
                        thisData = new String(thisStr);
                    }
                } else {
                    // No formating applied, just do raw value in all cases
                    thisStr = fv;
                    thisData = new String(thisStr);
                }
            }
            break;

        case INLINE_STRING:
            // TODO: Can these ever have formatting on them?
            XSSFRichTextString rtsi = new XSSFRichTextString(value.toString());
            thisStr = rtsi.toString();
            thisData = new String(thisStr);
            break;

        case TEXT:
            String sstIndex = value.toString();
            try {
                int idx = Integer.parseInt(sstIndex);
                XSSFRichTextString rtss = new XSSFRichTextString(sharedStringsTable.getEntryAt(idx));
                thisStr = rtss.toString();
                thisData = new String(thisStr);
            } catch (NumberFormatException ex) {
                System.err.println("Failed to parse SST index '" + sstIndex + "': " + ex.toString());
            }
            break;

        case NUMBER:
            String n = value.toString();
            if (this.formatString != null) {
                thisStr = cellFormatter.formatRawCellContents(Double.parseDouble(n), this.formatIndex,
                        this.formatString);
                thisData = this.contentFormatter.formatRawCellContents(Double.parseDouble(n), this.formatIndex,
                        this.formatString);
            } else {
                thisStr = n;
                thisData = new String(thisStr);
            }
            break;

        default:
            thisStr = "(TODO: Unexpected type: " + nextDataType + ")";
            thisData = new String(thisStr);
            break;
        }

        if (DateUtil.isADateFormat(this.formatIndex, this.formatString)) {
            output.cell(cellRef, thisData, thisStr, ColumnType.DATE);
        } else {
            output.cell(cellRef, thisData, thisStr, nextDataType);
        }
    } else if ("f".equals(name)) {
        fIsOpen = false;
    } else if ("is".equals(name)) {
        isIsOpen = false;
    } else if ("row".equals(name)) {
        output.endRow();
    } else if ("oddHeader".equals(name) || "evenHeader".equals(name) || "firstHeader".equals(name)) {
        hfIsOpen = false;
        output.headerFooter(headerFooter.toString(), true, name);
    } else if ("oddFooter".equals(name) || "evenFooter".equals(name) || "firstFooter".equals(name)) {
        hfIsOpen = false;
        output.headerFooter(headerFooter.toString(), false, name);
    }
}

From source file:org.apache.metamodel.excel.XlsxSheetToRowsHandler.java

License:Apache License

private String createValue() {
    if (_value.length() == 0) {
        return null;
    }/* w  ww.j  a  v  a2  s .co m*/

    switch (_dataType) {

    case BOOL:
        char first = _value.charAt(0);
        return first == '0' ? "false" : "true";
    case ERROR:
        logger.warn("Error-cell occurred: {}", _value);
        return _value.toString();
    case FORMULA:
        return _value.toString();
    case INLINESTR:
        XSSFRichTextString rtsi = new XSSFRichTextString(_value.toString());
        return rtsi.toString();
    case SSTINDEX:
        String sstIndex = _value.toString();
        int idx = Integer.parseInt(sstIndex);
        XSSFRichTextString rtss = new XSSFRichTextString(_sharedStringTable.getEntryAt(idx));
        return rtss.toString();
    case NUMBER:
        final String numberString = _value.toString();
        if (_formatString != null) {
            DataFormatter formatter = getDataFormatter();
            if (HSSFDateUtil.isADateFormat(_formatIndex, _formatString)) {
                Date date = DateUtil.getJavaDate(Double.parseDouble(numberString));
                return DateUtils.createDateFormat().format(date);
            }
            return formatter.formatRawCellContents(Double.parseDouble(numberString), _formatIndex,
                    _formatString);
        } else {
            if (numberString.endsWith(".0")) {
                // xlsx only stores doubles, so integers get ".0" appended
                // to them
                return numberString.substring(0, numberString.length() - 2);
            }
            return numberString;
        }
    default:
        logger.error("Unsupported data type: {}", _dataType);
        return "";
    }
}

From source file:org.dhatim.fastexcel.reader.RowSpliterator.java

License:Apache License

private Row next() throws XMLStreamException {
    if (!"row".equals(r.getLocalName())) {
        throw new NoSuchElementException();
    }/*  ww w  . j  ava  2  s  .  co  m*/
    int rowIndex = r.getIntAttribute("r");
    ArrayList<Cell> cells = new ArrayList<>(rowCapacity);
    int physicalCellCount = 0;

    while (r.goTo(() -> r.isStartElement("c") || r.isEndElement("row"))) {
        if ("row".equals(r.getLocalName())) {
            break;
        }
        String cellRef = r.getAttribute("r");
        CellAddress addr = new CellAddress(cellRef);
        String type = r.getOptionalAttribute("t").orElse("n");

        Object value;
        CellType cellType;
        String formula;
        String rawValue;
        if ("inlineStr".equals(type)) {
            Object v = null;
            String f = null;
            String rv = null;
            while (r.goTo(() -> r.isStartElement("is") || r.isEndElement("c") || r.isStartElement("f"))) {
                if ("is".equals(r.getLocalName())) {
                    rv = r.getValueUntilEndElement("is");
                    XSSFRichTextString rtss = new XSSFRichTextString(rv);
                    v = rtss.toString();
                } else if ("f".equals(r.getLocalName())) {
                    f = r.getValueUntilEndElement("f");
                } else {
                    break;
                }
            }
            value = v;
            formula = f;
            cellType = f == null ? CellType.STRING : CellType.FORMULA;
            rawValue = rv;
        } else if ("s".equals(type)) {
            r.goTo("v");
            int index = Integer.parseInt(r.getValueUntilEndElement("v"));
            CTRst ctrst = workbook.getSharedStringsTable().getEntryAt(index);
            XSSFRichTextString rtss = new XSSFRichTextString(ctrst);
            value = rtss.toString();
            cellType = CellType.STRING;
            formula = null;
            rawValue = ctrst.xmlText();
        } else {
            Function<String, ?> parser;
            CellType definedType;
            switch (type) {
            case "b":
                definedType = CellType.BOOLEAN;
                parser = RowSpliterator::parseBoolean;
                break;
            case "e":
                definedType = CellType.ERROR;
                parser = Function.identity();
                break;
            case "n":
                definedType = CellType.NUMBER;
                parser = RowSpliterator::parseNumber;
                break;
            case "str":
                definedType = CellType.FORMULA;
                parser = Function.identity();
                break;
            default:
                throw new IllegalStateException("Unknown cell type : " + type);
            }

            Object v = null;
            String f = null;
            String rv = null;
            while (r.goTo(() -> r.isStartElement("v") || r.isEndElement("c") || r.isStartElement("f"))) {
                if ("v".equals(r.getLocalName())) {
                    rv = r.getValueUntilEndElement("v");
                    v = "".equals(rv) ? null : parser.apply(rv);
                } else if ("f".equals(r.getLocalName())) {
                    String ref = r.getAttribute("ref");
                    String t = r.getAttribute("t");
                    f = r.getValueUntilEndElement("f");
                    if ("array".equals(t) && ref != null) {
                        CellRangeAddress range = CellRangeAddress.valueOf(ref);
                        sharedFormula.put(range, f);
                    }
                } else {
                    break;
                }
            }

            if (f == null) {
                f = getSharedFormula(addr).orElse(null);
            }

            if (f == null && definedType == CellType.NUMBER && v == null) {
                cellType = CellType.EMPTY;
                formula = null;
                value = null;
                rawValue = rv;
            } else {
                cellType = f == null ? definedType : CellType.FORMULA;
                formula = f;
                value = v;
                rawValue = rv;
            }

        }

        if (addr.getColumn() >= cells.size()) {
            setSize(cells, addr.getColumn() + 1);
        }

        Cell cell = new Cell(workbook, cellType, value, addr, formula, rawValue);
        cells.set(addr.getColumn(), cell);
        physicalCellCount++;
    }
    rowCapacity = Math.max(rowCapacity, cells.size());
    return new Row(rowIndex, physicalCellCount, cells.toArray(new Cell[cells.size()]));
}

From source file:org.tiefaces.components.websheet.utility.ChartUtility.java

License:MIT License

/**
 * init chart data./* w  ww  .  ja v  a  2s .com*/
 * 
 * @param chartId
 *            chartId.
 * @param chart
 *            chart.
 * @param wb
 *            wb.
 * @return chartdata.
 */
public static ChartData initChartDataFromXSSFChart(final String chartId, final XSSFChart chart,
        final XSSFWorkbook wb) {

    ThemesTable themeTable = wb.getStylesSource().getTheme();

    ChartData chartData = new ChartData();
    XSSFRichTextString chartTitle = chart.getTitle();
    if (chartTitle != null) {
        chartData.setTitle(chartTitle.toString());
    }
    CTChart ctChart = chart.getCTChart();
    ChartType chartType = ChartUtility.getChartType(ctChart);
    if (chartType == null) {
        throw new IllegalChartException("Unknown chart type");
    }

    chartData.setBgColor(ColorUtility.getBgColor(ctChart.getPlotArea(), themeTable));

    chartData.setId(chartId);
    chartData.setType(chartType);

    List<CTCatAx> ctCatAxList = ctChart.getPlotArea().getCatAxList();
    if ((ctCatAxList != null) && (!ctCatAxList.isEmpty())) {
        chartData.setCatAx(new ChartAxis(ctCatAxList.get(0)));
    }
    List<CTValAx> ctValAxList = ctChart.getPlotArea().getValAxList();
    if ((ctValAxList != null) && (!ctValAxList.isEmpty())) {
        chartData.setValAx(new ChartAxis(ctValAxList.get(0)));
    }

    ChartObject ctObj = chartType.createChartObject();

    if (ctObj == null) {
        throw new IllegalChartException("Cannot create chart object.");
    }

    setUpChartData(chartData, ctChart, themeTable, ctObj);

    return chartData;
}

From source file:service.XSSFSheetHandler.java

public void endElement(String uri, String localName, String name) throws SAXException {

    String thisStr = null;//from  w ww  .ja v  a2  s  .  co  m

    // v => contents of a cell
    if ("v".equals(name)) {
        // Process the value contents as required.
        // Do now, as characters() may be called more than once
        switch (nextDataType) {

        case BOOL:
            char first = value.charAt(0);
            thisStr = first == '0' ? "FALSE" : "TRUE";
            break;

        case ERROR:
            thisStr = "ERROR:" + value.toString() + '"';
            break;

        case FORMULA:
            // A formula could result in a string value,
            // so always add double-quote characters.
            thisStr = value.toString();
            break;

        case INLINESTR:
            // TODO: have seen an example of this, so it's untested.
            XSSFRichTextString rtsi = new XSSFRichTextString(value.toString());
            thisStr = rtsi.toString();
            break;

        case SSTINDEX:
            String sstIndex = value.toString();
            try {
                int idx = Integer.parseInt(sstIndex);
                XSSFRichTextString rtss = new XSSFRichTextString(sharedStringsTable.getEntryAt(idx));
                thisStr = rtss.toString();
            } catch (NumberFormatException ex) {
                output.println("Failed to parse SST index '" + sstIndex + "': " + ex.toString());
            }
            break;

        case NUMBER:
            String n = value.toString();
            if (this.formatString != null)
                thisStr = formatter.formatRawCellContents(Double.parseDouble(n), this.formatIndex,
                        this.formatString);
            else
                thisStr = n;
            break;

        default:
            thisStr = "(TODO: Unexpected type: " + nextDataType + ")";
            break;
        }

        // Output after we've seen the string contents
        // Emit commas for any fields that were missing on this row
        if (lastColumnNumber == -1) {
            lastColumnNumber = 0;
        }
        /*   for (int i = lastColumnNumber; i < thisColumn; ++i)
            output.print(',');*/

        // Might be the empty string.
        handlerInterface.processEachRecord(thisColumn, countrows, thisStr);
        /*if(thisColumn == 1 || thisColumn ==0 || thisColumn==2)
                strValues[thisColumn] = thisStr;*/
        // Update column
        if (thisColumn > -1)
            lastColumnNumber = thisColumn;

    } else if ("row".equals(name)) {

        // Print out any missing commas if needed
        if (minColumns > 0) {
            // Columns are 0 based
            if (lastColumnNumber == -1) {
                lastColumnNumber = 0;
            }
            /*  for (int i = lastColumnNumber; i < (this.minColumnCount); i++) {
                output.print(',');
            }*/
        }

        handlerInterface.rowCompleted();
        // We're onto a new row
        /* if(strValues[1].equals("Y"))
         {                   
          output.println("found : "+strValues[0]+"       "+strValues[2]);
          count++;
          }*/
        countrows++;
        lastColumnNumber = -1;

    }

}

From source file:utilities.SmapSheetXMLHandler.java

License:Apache License

@Override
public void endElement(String uri, String localName, String qName) throws SAXException {

    if (uri != null && !uri.equals(NS_SPREADSHEETML)) {
        return;//from   w  ww .j av  a2 s  .co m
    }

    String thisStr = null;

    // v => contents of a cell
    if (isTextTag(localName)) {
        vIsOpen = false;

        // Process the value contents as required, now we have it all
        switch (nextDataType) {
        case BOOLEAN:
            char first = value.charAt(0);
            thisStr = first == '0' ? "FALSE" : "TRUE";
            break;

        case ERROR:
            thisStr = "ERROR:" + value;
            break;

        case FORMULA:
            if (formulasNotResults) {
                thisStr = formula.toString();
            } else {
                String fv = value.toString();

                if (this.formatString != null) {
                    try {
                        // Try to use the value as a formattable number
                        double d = Double.parseDouble(fv);
                        thisStr = formatter.formatRawCellContents(d, this.formatIndex, this.formatString);
                    } catch (NumberFormatException e) {
                        // Formula is a String result not a Numeric one
                        thisStr = fv;
                    }
                } else {
                    // No formatting applied, just do raw value in all cases
                    thisStr = fv;
                }
            }
            break;

        case INLINE_STRING:
            // TODO: Can these ever have formatting on them?
            XSSFRichTextString rtsi = new XSSFRichTextString(value.toString());
            thisStr = rtsi.toString();
            break;

        case SST_STRING:
            String sstIndex = value.toString();
            try {
                int idx = Integer.parseInt(sstIndex);
                RichTextString rtss = sharedStringsTable.getItemAt(idx);
                thisStr = rtss.toString();
            } catch (NumberFormatException ex) {
                logger.log(POILogger.ERROR, "Failed to parse SST index '" + sstIndex, ex);
            }
            break;

        case NUMBER:
            String n = value.toString();
            if (this.formatString != null && n.length() > 0) {
                // smap Check for date
                boolean isDate = false;
                double d = Double.parseDouble(n);
                if (DateUtil.isValidExcelDate(d)) {
                    ExcelNumberFormat nf = ExcelNumberFormat.from(style);
                    if (nf != null) {
                        isDate = DateUtil.isADateFormat(nf);
                    }
                }
                if (isDate) {
                    try {
                        Date dv = DateUtil.getJavaDate(d);
                        thisStr = sdf.format(dv);
                    } catch (Exception e) {

                    }
                } else {
                    thisStr = formatter.formatRawCellContents(Double.parseDouble(n), this.formatIndex,
                            this.formatString);
                }
            } else
                thisStr = n;
            break;

        default:
            thisStr = "(TODO: Unexpected type: " + nextDataType + ")";
            break;
        }

        // Do we have a comment for this cell?
        checkForEmptyCellComments(EmptyCellCommentsCheckType.CELL);
        XSSFComment comment = comments != null ? comments.findCellComment(new CellAddress(cellRef)) : null;

        // Output

        output.cell(cellRef, thisStr, comment, nextDataType, formatString);
    } else if ("f".equals(localName)) {
        fIsOpen = false;
    } else if ("is".equals(localName)) {
        isIsOpen = false;
    } else if ("row".equals(localName)) {
        // Handle any "missing" cells which had comments attached
        checkForEmptyCellComments(EmptyCellCommentsCheckType.END_OF_ROW);

        // Finish up the row
        output.endRow(rowNum);

        // some sheets do not have rowNum set in the XML, Excel can read them so we should try to read them as well
        nextRowNum = rowNum + 1;
    } else if ("sheetData".equals(localName)) {
        // Handle any "missing" cells which had comments attached
        checkForEmptyCellComments(EmptyCellCommentsCheckType.END_OF_SHEET_DATA);

        // indicate that this sheet is now done
        output.endSheet();
    } else if ("oddHeader".equals(localName) || "evenHeader".equals(localName)
            || "firstHeader".equals(localName)) {
        hfIsOpen = false;
        output.headerFooter(headerFooter.toString(), true, localName);
    } else if ("oddFooter".equals(localName) || "evenFooter".equals(localName)
            || "firstFooter".equals(localName)) {
        hfIsOpen = false;
        output.headerFooter(headerFooter.toString(), false, localName);
    }
}