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内容相关推荐
- java poi 段落行间距_java - Apache poi XWPF Paragraph行间距 - 堆栈内存溢出
我正在尝试使用Java / Coldfusion中的Apache Poi构建一个word文档. 到目前为止,它让我做了很多我想要的格式,除了段落的行间距. 有谁知道如何将段落设置为单行间隔? 它不断构 ...
- java object取数据_java使用ObjectInputStream从文件中读取对象
import java.io.EOFException; import java.io.FileInputStream; import java.io.FileNotFoundException; i ...
- java oracle 结果集_java如何显示从oracle中读取的全部结果集?
java如何显示从oracle中读取的全部结果集?如题,并不是在程序中预先设置好字段然后读取字段,而是把结果集全部显示出来,就相当于做了一个类似sqlplus的界面,我把代码写成这样,程序虽不出... ...
- java找不到.xls_java – Apache Poi 3.13找不到打开XLSX文件的类
我正在使用apache POI用 Java读取和写入Excels的文件,但是我无法在源代码中找到WorkbookFactory或XSSFWorkbook来读取xlsx文件. pom.xml: 3.13 ...
- java自动生成项目编号_java - Apache POI,在同一文档中创建项目符号点和编号列表 - 堆栈内存溢出...
我试图用apache poi创建一个既包含圆点又包含编号列表的文档. 我想得到这样的结果. 名单: 清单1项目0 清单1项目1 清单1项目2 列表后的段落. 清单2: 清单2项目0 清单2项目1 清单 ...
- java poi word 表格_java 使用POI 读写word 表格
导读热词 下面是编程之家 jb51.cc 通过网络收集整理的代码片段. 编程之家小编现在分享给大家,也给大家做个参考. import java.io.FileInputStream; import j ...
- java实现Excel文件解析---apache POI以及把汉字转化为拼音
java实现Excel文件解析----apache POI以及把汉字转化为拼音 1.POI简介 Apache POI是Apache软件基金会的开放源码函式库,POI提供给Java程序对Microso ...
- java swing 打开文件_java swing实现打开Excel文件并进行处理
这里选择Excel文件是业务需要,话不多说 1.引入对Excel处理的相关依赖 org.apache.poi poi 3.16 org.apache.poi poi-ooxml 3.16 2.进行sw ...
- apache poi使用例_4.Apache POI使用详解
转载自:http://www.cnblogs.com/lukelook/p/8660798.html 一.POI结构与常用类 1.POI介绍 Apache POI是Apache软件基金会的开源项目,P ...
最新文章
- 自建分布式存储新选择,性能是Ceph的1.84倍
- C语言的补码表示和unsigned及signed的转换
- python红包游戏_脑力2048红包版
- 字典的增删改查/元组的创建
- [css] 使用css实现蒙版的效果
- SQL Server数据库--过滤数据
- oracle 序列开始为2,【图片】【求助】为啥Oracle的sequence 第一次插入表从2开始。。【java吧】_百度贴吧...
- elk怎么读的_大数据采集和抽取怎么做?这篇文章终于说明白了!
- 计算机考研复试之数据库
- 深入原理64式:40 概率论公式总结
- Linux系统平均负载的含义
- Fiddler高级用法—FiddlerScript抓取app网页json数据并保存
- total-vm anon-rss file-rss shmem-rss含义
- UG NX 12 草图创建过程
- 第三代电子计算机的核心部件为,计算机基础试题
- 安卓开发ESC/POS打印机打印
- git不用每次输入用户名和密码
- 【AI人工智能】AI会对你的行业产生什么影响?
- Unity新手入门与进阶学习书籍与教程推荐
- 帕斯卡公式+Lucas定理______DP?( hdu 3944 )
热门文章
- new file会创建文件吗_Rust 文件系统处理之文件读写 Rust 实践指南
- ai逻辑回归_人工智能中的逻辑是什么?
- expm1_Java Math类静态double expm1(double d)及其示例
- 面试官 | 线程间是如何通信的?
- idea连接sqlserver及数据库操作
- STM32——直流电机PI调速
- C++总结篇(1)命名空间及引用
- ztree 指定节点清空_节点操作
- 哈工大C语言公开课练兵编程(二)
- 电脑长截图软件_电脑屏幕长截图+WORD文档里没有插入PDF文件选项时怎么办? 简单一招轻松完成...