日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java poi 打开 保存_Java-Apache POI-在DB中读取和存储RTF内容

發布時間:2025/3/12 java 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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内容的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。