【发布时间】:2014-09-26 22:56:56
【问题描述】:
我正在尝试解析 .xls 文档。因此我需要查看一个特定的字母是否是粗体/斜体/等。
据我所知,有 3 种方法可以通过 apache.POI 获得我想要的东西:
- HSSFFont font = workbook.getFontAt((short)i); (This one iterates
through the whole document)
- HSSFRichTextString s = (HSSFRichTextString)cell.getRichStringCellValue(); This one looks at
a given index, which should be best for me and
- http://poi.apache.org/apidocs/org/apache/poi/xssf/usermodel/XSSFCellStyle.html this one won't work for me, because i dont want the style of a given Cell, i want the formatting of a given single letter.
这是我迄今为止尝试过的(还考虑了 stackoverflow 上的几篇关于此的帖子):
if(this.formatFlag) {
boolean boldFlag = false;
boolean italicFlag = false;
HSSFRichTextString s = (HSSFRichTextString)cell.getRichStringCellValue();
for(int i = 0; i < s.length(); i++) {
int x = s.getFontAtIndex(i);
System.out.println("FormatCode: " + x + "-" + s.getString().charAt(i));
}
当让这个运行在 .xls 文档上时,我往往会在实际上有粗体文本的地方得到大量的“0”,这告诉我它不起作用。当只有普通文本时,我有时也会得到 15/16。所以我似乎没有正确使用这个功能。有什么想法吗?
另外:我在哪里可以找到格式 ID 的确切列表?谢谢!
【问题讨论】:
-
您是否检查了适用于单元格的单元格样式上的字体?这是默认使用的,除非其他格式覆盖它
-
我按了 STRING + A 并将整个表格设置为相同的字体、相同的大小、相同的对齐方式等。除了某些字母或单元格为粗体外,所有内容的格式都相同。这个 (System.out.println(workbook.getFontAt(cell.getCellStyle().getFontIndex()).getBoldweight());) 给了我完美的单元格值,不管它是否粗体。但是我怎样才能得到与单元格的每个字母对应的值呢? ...
-
迭代 RichTextString 中的运行。如果它们有样式,则获取它们,如果不使用单元格的单元格样式?
-
我实际上不知道该怎么做,因为 API 文档并没有真正的帮助。非常感谢您的提示,我现在可以使用它,并将在此处发布我的工作代码以防其他人需要它。 :)
-
对文档的改进建议总是很感激!如果您能想到一个好的解释方法,请为该项目打开一个错误并详细说明改进
标签: java apache-poi