我们在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内容相关推荐

  1. java poi 段落行间距_java - Apache poi XWPF Paragraph行间距 - 堆栈内存溢出

    我正在尝试使用Java / Coldfusion中的Apache Poi构建一个word文档. 到目前为止,它让我做了很多我想要的格式,除了段落的行间距. 有谁知道如何将段落设置为单行间隔? 它不断构 ...

  2. java object取数据_java使用ObjectInputStream从文件中读取对象

    import java.io.EOFException; import java.io.FileInputStream; import java.io.FileNotFoundException; i ...

  3. java oracle 结果集_java如何显示从oracle中读取的全部结果集?

    java如何显示从oracle中读取的全部结果集?如题,并不是在程序中预先设置好字段然后读取字段,而是把结果集全部显示出来,就相当于做了一个类似sqlplus的界面,我把代码写成这样,程序虽不出... ...

  4. java找不到.xls_java – Apache Poi 3.13找不到打开XLSX文件的类

    我正在使用apache POI用 Java读取和写入Excels的文件,但是我无法在源代码中找到WorkbookFactory或XSSFWorkbook来读取xlsx文件. pom.xml: 3.13 ...

  5. java自动生成项目编号_java - Apache POI,在同一文档中创建项目符号点和编号列表 - 堆栈内存溢出...

    我试图用apache poi创建一个既包含圆点又包含编号列表的文档. 我想得到这样的结果. 名单: 清单1项目0 清单1项目1 清单1项目2 列表后的段落. 清单2: 清单2项目0 清单2项目1 清单 ...

  6. java poi word 表格_java 使用POI 读写word 表格

    导读热词 下面是编程之家 jb51.cc 通过网络收集整理的代码片段. 编程之家小编现在分享给大家,也给大家做个参考. import java.io.FileInputStream; import j ...

  7. java实现Excel文件解析---apache POI以及把汉字转化为拼音

    java实现Excel文件解析----apache  POI以及把汉字转化为拼音 1.POI简介 Apache POI是Apache软件基金会的开放源码函式库,POI提供给Java程序对Microso ...

  8. java swing 打开文件_java swing实现打开Excel文件并进行处理

    这里选择Excel文件是业务需要,话不多说 1.引入对Excel处理的相关依赖 org.apache.poi poi 3.16 org.apache.poi poi-ooxml 3.16 2.进行sw ...

  9. apache poi使用例_4.Apache POI使用详解

    转载自:http://www.cnblogs.com/lukelook/p/8660798.html 一.POI结构与常用类 1.POI介绍 Apache POI是Apache软件基金会的开源项目,P ...

最新文章

  1. 自建分布式存储新选择,性能是Ceph的1.84倍
  2. C语言的补码表示和unsigned及signed的转换
  3. python红包游戏_脑力2048红包版
  4. 字典的增删改查/元组的创建
  5. [css] 使用css实现蒙版的效果
  6. SQL Server数据库--过滤数据
  7. oracle 序列开始为2,【图片】【求助】为啥Oracle的sequence 第一次插入表从2开始。。【java吧】_百度贴吧...
  8. elk怎么读的_大数据采集和抽取怎么做?这篇文章终于说明白了!
  9. 计算机考研复试之数据库
  10. 深入原理64式:40 概率论公式总结
  11. Linux系统平均负载的含义
  12. Fiddler高级用法—FiddlerScript抓取app网页json数据并保存
  13. total-vm anon-rss file-rss shmem-rss含义
  14. UG NX 12 草图创建过程
  15. 第三代电子计算机的核心部件为,计算机基础试题
  16. 安卓开发ESC/POS打印机打印
  17. git不用每次输入用户名和密码
  18. 【AI人工智能】AI会对你的行业产生什么影响?
  19. Unity新手入门与进阶学习书籍与教程推荐
  20. 帕斯卡公式+Lucas定理______DP?( hdu 3944 )

热门文章

  1. new file会创建文件吗_Rust 文件系统处理之文件读写 Rust 实践指南
  2. ai逻辑回归_人工智能中的逻辑是什么?
  3. expm1_Java Math类静态double expm1(double d)及其示例
  4. 面试官 | 线程间是如何通信的?
  5. idea连接sqlserver及数据库操作
  6. STM32——直流电机PI调速
  7. C++总结篇(1)命名空间及引用
  8. ztree 指定节点清空_节点操作
  9. 哈工大C语言公开课练兵编程(二)
  10. 电脑长截图软件_电脑屏幕长截图+WORD文档里没有插入PDF文件选项时怎么办? 简单一招轻松完成...