Apache POI for Java:在单元格值中查找删除线文本

时间:2016-12-14 20:24:44

标签: java excel apache fonts apache-poi

最终,我尝试做的是打开.xlsx文件并删除所有格式化(样式化?)的文本实例,其中删除线。这看起来非常简单:使用CellType字符串检查单元格中的格式化运行次数,检查运行之间每个字符的字体,依此类推。

我创建了一个带有测试用例的.xlsx,例如:

  • 这个是一个测试
  • 这是一个测试
  • 这是 a test
  • 这是一个测试


  • 前三个测试在单元格值级别进行格式化运行。最后一个测试在单元格值级别运行了格式,但是当针对单元格的CellStyle.getFont()进行检查时,XSSFFont.getStrikeout()为 true 。当针对前三个测试的CellStyle.getFont()进行检查时,XSSFFont.getStrikeout()为 false (仅在XSSFRichTextString中存在删除线)

    这里是什么我到目前为止

    public static void main(String[] args){
        XSSFWorkbook workbook = new XSSFWorkbook("test.xlsx");
        XSSFSheet sheet = workbook.getSheet("Sheet1");
        Iterator<Row> rowIter = sheet.rowIterator();
        while(rowIter.hasNext()) {
            XSSFRow row = (XSSFRow) rowIter.next();
            Iterator<Cell> cellIter = row.cellIterator();
            while(cellIter.hasNext()) {
                XSSFCell cell = (XSSFCell) cellIter.next();
                XSSFCellStyle style = cell.getCellStyle();
                XSSFFont font = style.getFont();
                if(font.getStrikeout()){
                    System.out.println("CellStyle/font has strikeout, but...");
                }
                XSSFRichTextString richStr = (XSSFRichTextString) cell.getRichStringCellValue();
                System.out.println("This ends up being 0, meaning there's no strikeout applied to the RichTextString " + richStr.numFormattingRuns());
            }
        }
        workbook.close();
    }
    



    我在一个不同的工作簿(我试图消除三角形文本)中尝试了这个,它具有像前三个测试一样的单元格内容(三角形分散在不同的子串中) - 事实证明它们都有CellStyle.getFont() .getStrikeout(),而我希望它们 false 所以这会引起我的齿轮中的谚语。

    请帮助,我不喜欢被Excel殴打:(

    0 个答案:

    没有答案