[转载]JAVA获取word表格中数据的方案
上一个项目的开发中需要实现从word中读取表格数据的功能,在JAVA社区搜索了很多资料,终于找到了两个相对最佳的方案,因为也得到了不少网友们的帮助,所以不敢独自享用,在此做一个分享。
两个方案分别是:一,用POI的TableIterator获取表格中的数据;二,用PageOffice来获取。
为什么说是两个相对最佳的方案呢?因为两个方案都各有优缺点,POI的优点很明显,就是免费,这正是PageOffice的缺点,PageOffice是一个国产的商业Office组件;POI的缺点有点多,接口复杂调用起来比较麻烦,尤其是不好读取word指定位置处的内容。由于获取表格数据的代码是在服务器端执行的,所以要求很高的代码质量,要考虑到代码执行效率问题、用户请求并发问题、大文档执行慢阻塞页面的问题等等,POI的架构属于仿VBA接口的模型,比VBA代码还要复杂,在调用方便上未做任何优化,光看代码都觉得头疼。所以在实际使用的过程中会遇到这些问题需要自己解决,相对来说这正是PageOffice的优点,使用PageOffice的话,就不会遇到这些问题,因为PageOffice的获取word中表格数据的工作是在客户端执行的,确实也符合了分布式计算思想,减轻服务器端压力,还有个强悍的功能,PageOffice可以从word表格中用很简单一句代码把图片提取出来!!!
PageOffice虽是收费的,但是事半功倍,而且还能实现许多POI无法实现的功能。如果确实预算紧张,还是需要用POI,再难用也要捏着鼻子用了……,闲话少撤,看代码实现。
PageOffice获取word表格中数据的核心代码:
WordDocument doc = new WordDocument(request,response);
DataRegion dataReg = doc.openDataRegion("PO_table");
Table table = dataReg.openTable(1);
String cellValue = table.openCellRC(1,2).getValue(); //获取书签“PO_table”中表格里第1行第2列单元格的值
doc.close();
以上代码是从例子代码里拷贝出来的,可以从PageOffice的官网下载中心下载“PageOffice for JAVA ”,把PageOffice开发包里的Samples4运行起来,看示例(二、16、获取Word文件中表格的数据)里面的具体代码和实现效果。
需要说明一点,PageOffice中提到了一个数据区域(DataRegion)的概念,其实所谓的数据区域本质上就是书签,但是这个书签必须以“PO_” 开头。把表格放到数据区域中貌似不方便,但是好处很大,如果word文件中有多个表格的话,可以用数据区域去指定PageOffice获取word中哪个表格的数据,定位非常方便,比方说PO_Table的书签里有一个表格,那么不管这个表格在整个word文件中是第几个表(word中的表格没有名称只有Index,从文件头到末尾依次编号的)用doc.openDataRegion("PO_table").openTable(1);总是可以获取到这个表格的数据,非常方便,用POI就不行了,表格、图片位置移动,代码必须重写。
就写这么多吧,做个共享,希望对大家都有帮助。
[转载]JAVA获取word表格中数据的方案的更多相关文章
- [原创]JAVA获取word表格中数据的方案
上一个项目的开发中需要实现从word中读取表格数据的功能,在JAVA社区搜索了很多资料,终于找到了两个相对最佳的方案,因为也得到了不少网友们的帮助,所以不敢独自享用,在此做一个分享. 两个方案分别是: ...
- [转载]java向word模板中填充数据(总结)
使用过PageOffice动态生成word文档的人都知道,PageOffice可以给word文档的指定位置进行填充,这里我们所说的指定位置在PageOffice的专业术语里面有两个概念,一个叫做数据区 ...
- Java 读取Word表格中的文本和图片
本文通过Java程序来展示如何读取Word表格,包括读取表格中的文本和图片.下面是具体实现的步骤和方法. 1. 程序环境准备 代码编译工具:IntelliJ IDEA Jdk版本:1.8.0 测试文档 ...
- [转载]java获取word里面的文本
需求场景 开发的web办公系统如果需要处理大量的Word文档(比如有成千上万个文档),用户一定提出查找包含某些关键字的文档的需求,这就要求能够读取 word 中的文字内容,而忽略其中的文字样式.表格. ...
- [转载]java获取word文档的条目化内容
在开发Web办公系统或文档系统时,PageOffice组件是众所周知的在线处理微软word/ppt/excel文档的强大工具,它对WORD文档的各种处理在API层面进行了封装,屏蔽了Office VB ...
- 如何使用免费控件将Word表格中的数据导入到Excel中
我通常使用MS Excel来存储和处理大量数据,但有时候经常会碰到一个问题—我需要的数据存储在word表格中,而不是在Excel中,这样处理起来非常麻烦,尤其是在数据比较庞大的时候, 这时我迫切地需要 ...
- C#调用NPOI组件读取excel表格数据转为datatable写入word表格中并向word中插入图片/文字/书签 获得书签列表
调用word的com组件将400条数据导入word表格中耗时10分钟简直不能忍受,使用NPOI组件耗时4秒钟.但是NPOI中替换书签内容的功能不知道是不支持还是没找到. 辅助类 Excel表格数据与D ...
- Java 操作Word表格——创建嵌套表格、添加/复制表格行或列、设置表格是否禁止跨页断行
本文将对如何在Java程序中操作Word表格作进一步介绍.操作要点包括 如何在Word中创建嵌套表格. 对已有表格添加行或者列 复制已有表格中的指定行或者列 对跨页的表格可设置是否禁止跨页断行 创建表 ...
- Java 操作Word表格
本文将对如何在Java程序中操作Word表格作进一步介绍.操作要点包括 如何在Word中创建嵌套表格. 对已有表格添加行或者列 复制已有表格中的指定行或者列 对跨页的表格可设置是否禁止跨页断行 创建表 ...
随机推荐
- 简述 Python3 文件处理
1.文件处理 找到文件 --> 打开文件 --> 操作:读.写 --> 保存 --> 关闭 1.1.1 写文件 (只要牵扯到文件操作,都是字符串:写文件的时候需要把写的数字转换 ...
- Java基础—枚举
定义 枚举(enum)类型是Java 5新增的特性,它是一种新的类型,允许用常量来表示特定的数据片断,而且全部都以类型安全的形式来表示. 为什么要用枚举 在java语言中还没有引入枚举类型之前,表示枚 ...
- sga之library cache 内部原理
一.概述 library cache(库缓存)是shared pool中的一块内存区域,它的主要作用是缓存刚刚执行过的sql语句和pl/sql(包括存储过程.包.函数.触发器)所对应的解析计划.解析树 ...
- 剑指offer(第2版)刷题 Python版汇总
剑指offer面试题内容 第2章 面试需要的基础知识 面试题1:赋值运算符函数 面试题2:实现Singleton模式 解答 面试题3:数组中重复的数字 解答 面试题4:二维数组中的查找 解答 面试题 ...
- 基于WinIO 3.0实现驱动级键盘模拟输入
基于WinIO 3.0实现驱动级键盘模拟输入 一个业务场景需要使用驱动级的键盘模拟,折腾了2天,总结一下,为后人节省时间. 限制条件: 1.需要真实PC机,虚拟机不行 2.仅支持PS/2 键盘(指外接 ...
- tomcat web工程 jar包冲突解决方法
目前在部署工程时,遇到了一个问题,报错信息如下: See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet ...
- spring的线程安全
Spring作为一个IOC/DI容器,帮助我们管理了许许多多的“bean”.但其实,Spring并没有保证这些对象的线程安全,需要由开发者自己编写解决线程安全问题的代码.Spring对每个bean提供 ...
- 跳出弹窗页面禁止滚动(PC端和手机端)
pc端如何实现 1.当弹窗显示时,为body元素添加属性:overflow:hidden, 当关闭弹窗时移除该属性即可2.在弹窗的div上设置 @scroll.stop.prevent 3.前端页面弹 ...
- No module named bz2
yum install bzip* python2.6 import bz2 python2.7 import bz2 error 解决:sudo cp /usr/lib64/python2.6/li ...
- JavaWeb HTTP
1. Http协议 1.1. 什么是Http协议 Http的全称为HyperText Transfer Protocol,译为超文本传输协议,是一种详细规定了浏览器和万维网服务器之间互相通信的规则,通 ...