メソッドtoString()がフォーマットされていない.StringHSSFRichTextString
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このデータをデータベースに保存するには、まずとの間に 1 対多の関係があることを認識します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-to-database フレームワーク (JDBC、Hibernate など) を使用して、String値をcontentsに保存しrich_text_string、関連するFormattingRunオブジェクト データを に保存しrt_formatting_runsます。
注意してください - フォント インデックスはワークブック内でのみ有効です。意味HSSFWorkbookを与えるために、フォント情報も保存する必要があります。font_index
として保存されていませんCLOBが、データは間違いなくこの方法で保存された方が意味があります。