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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/556502.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring循环依赖的三种方式

引言&#xff1a;循环依赖就是N个类中循环嵌套引用&#xff0c;如果在日常开发中我们用new 对象的方式发生这种循环依赖的话程序会在运行时一直循环调用&#xff0c;直至内存溢出报错。下面说一下Spring是如果解决循环依赖的。 第一种&#xff1a;构造器参数循环依赖 Spring容…

python字典统计排序1_python-如何按字典顺序对Counter.mostCommon(n)的...

这里的问题是Counter dict是无序的,并且most_common不在乎键.为此,您需要对字典中的项目进行排序,然后提取最常见的3个项目. counter Counter(abcdef) most_common sorted(counter.items(), keylambda pair: (-pair[1], pair[0])) 这将首先对-pair [1](计数)进行排序.由于出现…

Java最后_Java最后一次总结

前言&#xff1a;最开始我学习了java如何简单编写一小段代码&#xff0c;发现java代码和C语言还是有很多相似的地方&#xff0c;到类与对象之后等等的很多的内容&#xff0c;我觉得还是有很大区别的&#xff0c;java对于c语言来说&#xff0c;显得更为高级及方便&#xff0c;让…

Spring 是如何解决循环依赖的?

1.由同事抛的一个问题开始 最近项目组的一个同事遇到了一个问题&#xff0c;问我的意见&#xff0c;一下子引起的我的兴趣&#xff0c;因为这个问题我也是第一次遇到。平时自认为对spring循环依赖问题还是比较了解的&#xff0c;直到遇到这个和后面的几个问题后&#xff0c;重…

python3自动化软件发布系统_基于python3做C/S端自动化测试可能用到的工具(不断更新中。。。。)...

选择一个合适的框架(库) (1)如果你的c/s端工具界面控件可以被捕获&#xff0c;则可以使用pyautoit,和pywinauto这2个库&#xff0c;附上界面元素捕获小工具(链接&#xff1a;https://pan.baidu.com/s/1_5--ZWsV-oS7r2ORwX7M7g 提取码&#xff1a;o4z5 ) (2)如果界面控件不可以…

java按钮触发另一个页面_前端跨页面通信,你知道哪些方法?

戳蓝字「前端技术优选」关注我们哦&#xff01; 引言在浏览器中&#xff0c;我们可以同时打开多个Tab页&#xff0c;每个Tab页可以粗略理解为一个“独立”的运行环境&#xff0c;即使是全局对象也不会在多个Tab间共享。然而有些时候&#xff0c;我们希望能在这些“独立”的Tab页…

【Java用法】java 8两个List集合取交集、并集、差集、去重并集

在业务的开发过程中会经常用到两个List集合相互取值的情况&#xff0c;于是记录在此&#xff0c;方便后续使用哦~~~ public class ListTest {public static void main(String[] args) {ArrayList<String> listA CollectionUtil.toList("a", "b", &…

java中的列表栈链表_Java数据结构(栈,队列,双链表)

(1)栈package ChapterOne;public class Stack {//栈数组long stackArr[];//栈的大小int maxSize;//栈的顶部int top;//初始化一个大小为size的栈public Stack(int size){maxSize size;stackArr new long[size];top -1;}//出栈操作public long pop(){return stackArr[top--];…

jsonp react 获取返回值_Django+React全栈开发:文章列表

React现在我们有了一个属于文章的API&#xff0c;可以添加、修改、删除、查看文章&#xff0c;但是对于我们的网站来说&#xff0c;还需要一个用户界面才行。现在开始探索一下ReactJS吧。经常听到有前端三大框架Angular、React、Vue的说法&#xff0c;不过React官网对自己的介绍…

24个经典的MySQL索引问题,你都遇到过哪些?

1、什么是索引&#xff1f; 索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分)&#xff0c;它们包含着对数据表里所有记录的引用指针。 索引是一种数据结构。数据库索引&#xff0c;是数据库管理系统中一个排序的数据结构&#xff0c;以协助快速查询、更新数…

java 3 4_Java-3/4_树.md at master · yrcDream/Java-3 · GitHub

树二叉树二叉树具有唯一根节点二叉树每个节点最多有两个孩子&#xff0c;最多有一个父亲二叉树具有天然递归结构二叉树不一定是 “满” 的&#xff1a;一个节点也是二叉树、空节点也是二叉树二叉搜索树(BST)BST 的基本功能public class BST> {private Node root;private int…

python模块导入_python模块导入

不同的执行方式&#xff1a; 从IDE中执行&#xff0c;python程序由IDE设置环境决定。 从系统中执行&#xff0c;python程序由环境变量中的系统变量path决定&#xff0c;从上往下选择。 模块导入顺序&#xff1a; 系统包优先级最高 > 同目录 > sys.path&#xff0c;之所以…

再也不怕SVN冲突:轻松解决SVN冲突

什么时候容易出现冲突&#xff1f; 多个人同时修改了同个文件中的同一行代码 无法进行对比的二进制文件&#xff0c;比如图片等 如何解决冲突&#xff1f; 如上图&#xff0c;test_conflict.py文件发生了冲突&#xff0c;并且多出了几个文件&#xff0c;其中.mine是我本地修…

不删除旧版本java_Linux 卸载旧版jdk 并安装新版jdk(转)

1、查看现有版本java -version2、查看jdk的具体版本rpm –qa| grep jdkrpm –qa| grep gcj3、删除已安装jdk包rpm –e –nodeps jdk包4、再次检查jdk版本&#xff0c;确认是否卸载成功java –version显示结果为&#xff1a;/usr/bin/java:No such file or directory5、手动下载…

手机型号大全_2020值得入手的三款手机。每个优秀,选择哪一个?励志故事名言视频...

如今&#xff0c;手机等数码产品更新很快。各种新的技能&#xff0c;让用户真正体验到科技的力量&#xff0c;它可以被描述为“具有多种功能的一个装置。”然而&#xff0c;这么多车型&#xff0c;难免有些人不知道如何选择。当4G和5G手机**的对峙&#xff0c;很多朋友也问小中…

AspectJ

Aspectj与Spring AOP比较 XML配置方式 <aop:aspect>&#xff1a; 定义切面, 包括通知和切点. 是一般的bean//定义切面 public class SleepHelperAspect{public void beforeSleep(){System.out.println("睡觉前要脱衣服&#xff01;");}public void afterSleep…

aixs1 生成java代码_通过axis1.4 来生成java客户端代码

1.首先下载axis-1.4所有的jar包&#xff0c;2.我是直接打开cmd&#xff0c;进入到该jar包的目录下&#xff0c;3.直接运行命令(运行这个命令之前要确定java的环境变量都已配置好)&#xff1a;java -Djava.ext.dirs${lib的目录} org.apache.axis.wsdl.WSDL2Java -o${代码输出路径…

windows分屏_windows内到底藏了多少好东西?

恭喜!点开这篇文章&#xff0c;你将解锁 WIN10 系统内那些不为人知的高效的冷知识&#xff01;相信所有的职场人都会搜索过这样的问题&#xff1a;有哪些高效的办公神器&#xff1f;在之前的文章中&#xff0c;我分享过很多高效神器&#xff0c;如果你感兴趣的话&#xff0c;点…

@Aspect中@Pointcut 12种用法

本文主要内容&#xff1a;掌握Pointcut的12种用法。 Aop相关阅读 阅读本文之前&#xff0c;需要先掌握下面3篇文章内容&#xff0c;不然会比较吃力。 Spring系列第15篇&#xff1a;代理详解&#xff08;java动态代理&CGLIB代理)Spring系列第30篇&#xff1a;jdk动态代理…

学java要背的单词_学习JAVA必背的8类常用单词

Java常用的词还是挺多的&#xff0c;初学者有空多看看&#xff0c;对快速入门Java编程还是有益的。本文沈阳达内IT培训为大家介绍学习JAVA必背的8类常用单词。1、保留关键字(2个)const ——常量&#xff0c;常数&#xff1a;用于修改字段或局部变量的声明。goto——转到&#x…