Spire.Doc提供了Table.applyVerticalMerge()方法来垂直合并word文档里面的表格单元格,Table.applyHorizontalMerge()方法来水平合并表格单元格。默认情况下,如果要合并的单元格包含相同的值,那么合并后的单元格会有重复的值。


程序环境

本次测试时,在程序中引入Spire.Doc for Java。可通过以下方法引用Spire.Doc.jar文件:

方法1:将Spire.Doc for Java下载到本地,解压,安装。安装完成后,找到安装路径下BIN文件夹中的Spire.Doc.jar。然后在Visual Studio中打开“解决方案资源管理器”,鼠标右键点击“引用”,“添加引用”,将本地路径BIN文件夹下的jar文件添加引用至程序。

方法2:使用Maven进行安装,你可以通过在项目的pom.xml文件中添加以下代码,在你的应用程序中轻松导入该JAR文件。

 1 <repositories>
2 <repository>
3 <id>com.e-iceblue</id>
4 <url>https://repo.e-iceblue.cn/repository/maven-public/</url>
5 </repository>
6 </repositories>
7 <dependencies>
8 <dependency>
9 <groupId>e-iceblue</groupId>
10 <artifactId>spire.doc</artifactId>
11 <version>10.9.0</version>
12 </dependency>
13 </dependencies>

方法3:通过NuGet安装。可通过以下2种方法安装:

(1)可以在Visual Studio中打开“解决方案资源管理器”,鼠标右键点击“引用”,“管理NuGet包”,然后搜索“FreeSpire.Doc”,点击“安装”。等待程序安装完成。

(2)将以下内容复制到PM控制台安装。

Install-Package FreeSpire.Doc -Version 10.9.0

删除合并单元格时的重复值

  1. 创建一个Document实例,使用Document.loadFromFile()方法加载示例文档。
  2. 使用Document.getSections()方法获得节集合,然后使用SectionCollection.get()方法获得特定的节。
  3. 使用Section.getTables()方法获得表格集合,然后使用TableCollection.get()方法获得想要的表。
  4. 调用mergeCell(Table table,boolean isHorizontalMerge,int index,int start,int end)方法来垂直或水平地合并表格单元格。这个方法将确定要合并的单元格是否有相同的值,并在合并的单元格中只保留一个值。
  5. 使用Document.saveToFile()方法保存文件。

代码示例

 1 import com.spire.doc.*;
2 import com.spire.doc.interfaces.ITable;
3
4 public class MergeCells {
5 public static void main(String[] args) throws Exception {
6
7 //Create an object of Document class and load the sample document.
8 Document document = new Document();
9 document.loadFromFile("Sample.docx");
10
11 //Get the first section
12 Section section = document.getSections().get(0);
13
14 //Get the first table
15 Table table = section.getTables().get(0);
16
17 //Invoike mergeCell()method to merge cells vertically
18 mergeCell(table, false, 0, 1, 3);
19
20 //Invoike mergeCell()method to merge cell horizontally
21 mergeCell(table, true, 0, 3, 4);
22
23 //Save the document to file
24 document.saveToFile("MergeTable.docx",FileFormat.Docx_2013);
25 }
26
27 //Customize a mergeCell() method to remove the duplicate values while merging cells
28 public static void mergeCell(Table table, boolean isHorizontalMerge, int index, int start, int end) {
29
30 if (isHorizontalMerge) {
31 //Get a cell from table
32 TableCell firstCell = table.get(index, start);
33 //Invoke getCellText() method to get the cell’s text
34 String firstCellText = getCellText(firstCell);
35 for (int i = start + 1; i <= end; i++) {
36 TableCell cell1 = table.get(index, i);
37 //Check if the text is the same as the first cell
38 if (firstCellText.equals(getCellText(cell1))) {
39 //If yes, clear all the paragraphs in the cell
40 cell1.getParagraphs().clear();
41 }
42 }
43 //Merge cells horizontally
44 table.applyHorizontalMerge(index, start, end);
45
46 }
47 else {
48 TableCell firstCell = table.get(start, index);
49 String firstCellText = getCellText(firstCell);
50 for (int i = start + 1; i <= end; i++) {
51 TableCell cell1 = table.get(i, index);
52 if (firstCellText.equals(getCellText(cell1))) {
53 cell1.getParagraphs().clear();
54 }
55 }
56 //Merge cells vertically
57 table.applyVerticalMerge(index, start, end);
58 }
59 }
60 public static String getCellText(TableCell cell) {
61
62 StringBuilder text = new StringBuilder();
63 //Traverse all the paragraphs of a cell
64 for (int i = 0; i < cell.getParagraphs().getCount(); i++) {
65 //Get every paragraph’s text and append it to StringBuilder
66 text.append(cell.getParagraphs().get(i).getText().trim());
67 }
68 return text.toString();
69 }
70 }

效果图

 
注:测试代码中的文件路径为程序Debug路径,文件路径可自定义为其他路径。
 
—THE END—

Java删除word合并单元格时的重复值的更多相关文章

  1. 20190407 Word合并单元格

    很长一段时间没处理word合并单元格,又忘记了采取忽略错误的方式测试出相应单元格的行列坐标这种方式.真是浪费时间.以后再也不想为此在深夜熬命. 今晚算是和它杠上了,很想弄清楚合并单元格之后行列坐标重新 ...

  2. java使用freemarker模板导出word(带有合并单元格)文档

    来自:https://blog.csdn.net/qq_33195578/article/details/73790283 前言:最近要做一个导出word功能,其实网上有很多的例子,但是我需要的是合并 ...

  3. java导出标题多行且合并单元格的EXCEL

    场景:项目中遇到有需要导出Excel的需求,并且是多行标题且有合并单元格的,参考网上的文章,加上自己的理解,封装成了可自由扩展的导出工具 先上效果,再贴代码: 调用工具类进行导出: public st ...

  4. C# 获取Excel中的合并单元格

    C# 获取Excel中的合并单元格 我们在制作表格时,有时经常需要合并及取消合并一些单元格.在取消合并单元格时需要逐个查找及取消,比较麻烦.这里分享一个简单的方法来识别Excel中的合并单元格,识别这 ...

  5. NPOI操作EXCEL(五)——含合并单元格复杂表头的EXCEL解析

    我们在第三篇文章中谈到了那些非常反人类的excel模板,博主为了养家糊口,也玩命做出了相应的解析方法... 我们先来看看第一类复杂表头: ...... 博主称这类excel模板为略复杂表头模板(蓝色部 ...

  6. NPOI扩展--判断指定单元格是否为合并单元格和输出该单元格的行列跨度(维度)

    因工作需要用到跨合并单元格获取数据,所以写了个NPOI扩展类. 主要方法如下: 1.判断指定行/列索引(单元格)是否为合并单元格. 2.获取指定列索引的实际含有数据的单元格. 3.返回指定行/列索引的 ...

  7. poi 合并单元格、设置边框

    HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb.createSheet(); //创建一个样式 HSSFCellStyle sty ...

  8. apache poi合并单元格设置边框

    HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb.createSheet(); //创建一个样式 HSSFCellStyle sty ...

  9. python-利用xlrd模块中读取有合并单元格的excel数据

    前言 对于excel中有合并单元格的情况,合并的单元格只能取到第一个单元格的值,合并的单元格后面的单元格内容的值为空,针对这个情况,写了下面一段代码实现, 对单元格进行判断,如果是传入的索引是合并单元 ...

随机推荐

  1. ajax02_封装自己的jQuery库和ajax请求

    封装自己的ajax类库 首先封装自己的 jQuery库 启发:css的元素选择器思想 简单的代码实现 function jQuery(selector){ if(typeof selector == ...

  2. 日志审计与分析实验三(rsyslog服务器端和客户端配置)(Linux日志收集)

    Linux日志收集 一.实验目的: 1.掌握rsyslog配置方法 2.配置rsyslog服务收集其他Linux服务器日志: C/S架构:客户端将其日志上传到服务器端,通过对服务器端日志的查询,来实现 ...

  3. treap(小根堆)模板

    总结教训 对于treap使用小根堆性质,一定要特判左右子树是否存在,因为空节点的优先级为0,是最高的,不特判会出错我就这么错了,so 一定要特判!一定要特判!一定要特判!重要的事情说三遍 本文代码根据 ...

  4. BI报表与数据开发

    先贴个不好看的图让内容好看一点,也顺便说一下数据处理的流程:收集数据,数据清洗与数据加工,数据展示 报表制作一般就是前面的开发兄弟们完成然后把数据交到报表的兄弟们,然后在根据领导要求制作报表.大概就是 ...

  5. Linux环境监控工具汇总

    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. Linux 操作系统有诸多自带和第三方的监控工具,以下从不同维度来整理常用的一些监控工具. CPU top(经典的Linu ...

  6. axios post请求变为options请求的解决方法

    全局配置 axios.defaults.headers['Content-Type']='application/x-www-form-urlencoded' 注意:使用全局配置会导致所有请求头的'C ...

  7. MyBatis 01 概述

    官网 http://www.mybatis.org/mybatis-3/zh/index.html GitHub https://github.com/mybatis/mybatis-3 简介 MyB ...

  8. php里的$this的 含义

    $this 的含义是表示    实例化后的 具体对象! 我们一般是先声明一个类,然后用这个类去实例化对象! 但是,当我们在声明这个类的时候,想在类本身内部使用本类的属性或者方法.应该怎么表示呢? 例如 ...

  9. React报错之React hook 'useState' cannot be called in a class component

    正文从这开始~ 总览 当我们尝试在类组件中使用useState 钩子时,会产生"React hook 'useState' cannot be called in a class compo ...

  10. BZOJ4212 神牛的养成计划 (字典树,bitset)

    题面 Description Hzwer成功培育出神牛细胞,可最终培育出的生物体却让他大失所望- 后来,他从某同校女神 牛处知道,原来他培育的细胞发生了基因突变,原先决定神牛特征的基因序列都被破坏了, ...