POI中過濾掉帶消除線的文字 (Excel 2003 版)

直接上代碼:

 

HSSFRichTextString richTextString = cell.getRichStringCellValue();
String realString = richTextString.getString();

boolean isCellStrikeOut = false;
HSSFCellStyle cellStyle = cell.getCellStyle();
if (cellStyle != null) {
    HSSFFont font = workbook.getFontAt(cellStyle.getFontIndex());
    if (font.getStrikeout()) {
        isCellStrikeOut = true;
    }
}

if (richTextString.numFormattingRuns() == 0) {
    if (isCellStrikeOut) {
        return "";
    }

    return realString;
} else if (!isCellStrikeOut) {
    StringBuilder sb = new StringBuilder(realString);
    int lastIndex = realString.length();
    for (int i = richTextString.numFormattingRuns() - 1; i >= 0 ; i --) {
        short fontIndex = richTextString.getFontOfFormattingRun(i);
        HSSFFont font = workbook.getFontAt(fontIndex);
        if (font.getStrikeout()) {
            sb.delete(richTextString.getIndexOfFormattingRun(i), lastIndex);
        }

        lastIndex = richTextString.getIndexOfFormattingRun(i);
    }

    return sb.toString();
} else {
    StringBuilder sb = new StringBuilder();
    int lastIndex = realString.length();
    for (int i = richTextString.numFormattingRuns() - 1; i >= 0 ; i --) {
        short fontIndex = richTextString.getFontOfFormattingRun(i);
        HSSFFont font = workbook.getFontAt(fontIndex);
        if (!font.getStrikeout()) {
            sb.insert(0, realString.substring(richTextString.getIndexOfFormattingRun(i), lastIndex));
        }

        lastIndex = richTextString.getIndexOfFormattingRun(i);
    }

    return sb.toString();
}

發佈了46 篇原創文章 · 獲贊 9 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章