gpt4 book ai didi

java - Apache POI getFontAt (XLS)

转载 作者:行者123 更新时间:2023-12-01 12:40:46 24 4
gpt4 key购买 nike

我正在尝试解析 .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 的准确列表?谢谢!

最佳答案

感谢 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>";
}
}

我希望这对某人有帮助。

关于java - Apache POI getFontAt (XLS),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25119178/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com