メソッド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
このデータをデータベースに保存するには、まずとの間に 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
が、データは間違いなくこの方法で保存された方が意味があります。