为了精准的获取目录的页码、内容、以及前置标题列,我才去的是逐段读取的方式,但由于word中每个表格的单元格都占用一个段落,因此如果真的逐段扫描速度会很慢。因此可以在读取之前把表格给干掉。
- 获取所有表格
//所有表格
Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
//获取表格总数
int tableCount = Dispatch.get(tables, "Count").getInt();
- 删除所有表格
在这里我做的是打开文档和读取大纲操作,不会对其进行保存·操作,所以结束后对文档内容本身是不会有影响。
for (int i = 0 ; i < tableCount ; i++) {
table = Dispatch.call(tables, "Item", new Variant(1)).toDispatch();
Dispatch.call(table, "Delete");
}
完整代码如下
- 在这里要解释一下为什么要从后往前读。
- 因为我这里需求是需要读取文档目录并有相应的目录结构(层次关系,比如说1 下面有1.1 和1.2 ,1.1下面有1.1.1),并转换成json字符串发送到移动端,移动端通过json字符串展示目录,并能通过页码索引到对应的位置。
- 所以这里我就没改动读取方向了,有问题可以多多交流,JACOB坑太多了,可以多交流交流。
public class ReadWordOrWPSBookMarks {
/**
* 读取word/wps文档的大纲
* @param filename 要打开的文档的目录(带文件名)
* @param strChoose 打开方式 Microsoft Word: 2 WPS: 3
*/
public s