你是对的,该toString()
方法只会String
返回HSSFRichTextString
.
这是一种从 中提取所有其他重要数据HSSFRichTextString
以与字符串值一起存储的方法。
与我对这个问题的回答非常相似,从 中提取富文本格式信息HSSFRichTextString
,并将该数据存储在您将创建的类中,FormattingRun
.
public class FormattingRun {
private int beginIdx;
private int length;
private short fontIdx;
public FormattingRun(int beginIdx, int length, short fontIdx) {
this.beginIdx = beginIdx;
this.length = length;
this.fontIdx = fontIdx;
}
public int getBegin() { return beginIdx; }
public int getLength() { return length; }
public short getFontIndex { return fontIdx; }
}
然后,调用 Apache POI 方法来提取该数据。
现在,实际提取数据:
List<FormattingRun> formattingRuns = new ArrayList<FormattingRun>();
int numFormattingRuns = richTextString.numFormattingRuns();
for (int fmtIdx = 0; fmtIdx < numFormattingRuns; fmtIdx)
{
int begin = richTextString.getIndexOfFormattingRun(fmtIdx);
short fontIndex = richTextString.getFontOfFormattingRun(fmtIdx);
// Walk the string to determine the length of the formatting run.
int length = 0;
for (int j = begin; j < richTextString.length(); j++)
{
short currFontIndex = richTextString.getFontAtIndex(j);
if (currFontIndex == fontIndex)
length++;
else
break;
}
formattingRuns.add(new FormattingRun(begin, length, fontIndex));
}
HSSFRichTextString
要将这些数据存储在数据库中,首先要认识到 a和之间存在一对多的关系FormattingRun
。因此,在您计划存储富文本字符串数据的任何 Oracle 表中,您都需要创建与另一个存储格式化运行数据的新表的外键关系。像这样的东西:
Table: rich_text_string
rts_id NUMBER
contents VARCHAR2(4000)
rts_id
作为主键,并且:
Table: rts_formatting_runs
rts_id NUMBER
run_id NUMBER
run_pos NUMBER
run_len NUMBER
font_index NUMBER
(rts_id, run_id)
作为主键,并返回rts_id
表rich_text_string
。
使用您最喜欢的 Java 到数据库框架(JDBC、Hibernate 等),将String
值存储到contents
in 中rich_text_string
,并将关联的FormattingRun
对象数据存储到rt_formatting_runs
.
请注意 - 字体索引仅在工作簿中有效。您还需要存储字体信息HSSFWorkbook
,以赋予font_index
含义。
它不存储为CLOB
,但可以说以这种方式存储数据更有意义。