我正在尝试解析.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的确切列表?谢谢!
答案 0 :(得分:1)
感谢Gagravarr的提示,这是一个完美无缺的解决方案:
HSSFRichTextString s = (HSSFRichTextString) cell.getRichStringCellValue();
int wbBold = workbook.getFontAt(cell.getCellStyle().getFontIndex()).getBoldweight();
boolean wbItalic = workbook.getFontAt(cell.getCellStyle().getFontIndex()).getItalic();
if(wbBold == Font.BOLDWEIGHT_BOLD) {
data = "<b>" + s.getString() + "</b>";
}
else if(wbItalic) {
data = "<i>" + s.getString() + "</i>";
}
else {
for(int i = 0; i < s.length(); i++) {
HSSFFont font = workbook.getFontAt(s.getFontAtIndex(i));
if(font.getItalic() && !italicFlag) {
data += "<i>" + s.getString().charAt(i);
italicFlag = true;
}
else if (!font.getItalic() && italicFlag) {
data += "</i>" + s.getString().charAt(i);
italicFlag = false;
}
else if((font.getBoldweight() == Font.BOLDWEIGHT_BOLD) && !boldFlag) {
data += "<b>" + s.getString().charAt(i);
boldFlag = true;
}
else if ((font.getBoldweight() != Font.BOLDWEIGHT_BOLD) && boldFlag) {
data += "<b/>" + s.getString().charAt(i);
boldFlag = false;
}
else {
data += s.getString().charAt(i);
}
}
if(boldFlag) {
data += "</b>";
}
if(italicFlag) {
data += "</i>";
}
}
我希望这有助于某人。
答案 1 :(得分:0)
getFontAtIndex只返回字体的索引。
使用相应工作簿中的getFontAt(short idx)
并使用其粗体。