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