java poi 打开 保存_Java-Apache POI-在DB中读取和存储RTF内容
我們在Java應用程序中有一個新要求,即用戶可以上傳excel文件.
excel文件中的一列將使用粗體,斜體,項目符號,彩色文本等格式.
我們需要讀取此excel文件并將這些值存儲在Oracle DB表中.
隨后,我們還需要提取這些數據,并保留格式并下載到excel工作表中.
我們計劃將Apache-poi用于相同的功能,但是現在停留在需要將HSSFRichTextString對象轉換為要存儲到Oracle表的格式的位置.
HSSFRichTextString的tostring()方法提供字符串,但是格式丟失.
有人可以建議我如何將這個HSSFRichTextString對象轉換為Oracle數據類型(最好是clob).
解決方法:
正確的是,toString()方法將僅返回HSSFRichTextString的未格式化String內容.
這是一種從HSSFRichTextString中提取所有其他重要數據以與字符串值一起存儲的方法.
與my answer to this question非常相似,從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方法提取該數據.
> numFormattingRuns()-返回在HSFFRichTextString中運行的格式化次數.
> getFontOfFormattingRun(int)-返回出現在字符串中指定位置的短字體索引
現在,實際提取數據:
List formattingRuns = new ArrayList();
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和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值存儲到rich_text_string中的內容中,并將關聯的FormattingRun對象數據存儲到rt_formatting_runs中.
請注意-字體索引僅在工作簿中有效.您還需要存儲HSSFWorkbook中的字體信息,以賦予font_index含義.
它沒有存儲為CLOB,但是可以說這種方式存儲的數據更有意義.
標簽:java,apache-poi
來源: https://codeday.me/bug/20191012/1902926.html
總結
以上是生活随笔為你收集整理的java poi 打开 保存_Java-Apache POI-在DB中读取和存储RTF内容的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 学习vim的linux游戏,PacVim
- 下一篇: SQLite中的高级SQL