20190407 Word合并单元格
很长一段时间没处理word合并单元格,又忘记了采取忽略错误的方式测试出相应单元格的行列坐标这种方式。真是浪费时间。以后再也不想为此在深夜熬命。
今晚算是和它杠上了,很想弄清楚合并单元格之后行列坐标重新分配的机制。于是做了一点测试。插入一个11行10列的表格,然后合并其中的部分,利用代码插入新的坐标。
转载请说明出处。
Sub NewPos()
Dim tb As Table, cel As Cell
Dim doc As Document
Set doc = ThisDocument
Set tb = doc.Tables(1)
For i = 1 To 10
For j = 1 To 10
On Error Resume Next
Set cel = tb.Cell(i, j)
On Error GoTo 0
If Not cel Is Nothing Then
Debug.Print Len(cel.Range.Text); " "; i; " "; j
If Len(cel.Range.Text) > 2 Then
cel.Range.Text = Replace(cel.Range.Text, vbCr, "") & ";" & "(" & i & "," & j & ")"
Else
cel.Range.Text = "(" & i & "," & j & ")"
End If End If
Set cel = Nothing
Next j
Next i
Set doc = Nothing
Set cel = Nothing
Set tb = Nothing
End Sub

新坐标分配总结如下:
0、先行后列
1、行坐标的分配:从上向下逐一递增,如果遇到连续几个整行水平合并,则视为一行。如(9,1)实为原始的第9和第10行合并。
2、列坐标的分配:从左向右逐一递增分配,如果遇到垂直合并单元格则需要分为两种情况:
第一种情况,该行正好是垂直合并单元格所在的首行,则列号依然遵循从左至右逐一递增分配,如(2,3)到(2,4),(5,5)到(5,6)
第二种情况较为复杂,如果该行并非垂直合并单元格所在的首行,则列号会出现缺失。
(1)在一行中间出现这种情况:(3,3)到(3,5)缺失了(3,4);
(2)在一行的行末遇到这种情况:(7,4)成为第7行最后一个列坐标;
(3)如在一行的行首遇到这种情况:第二行缺失了(2,1)(2,2)第三行缺失了(3,1)

通过正则表达式则提取到以下结果
Public Sub RegGet()
Dim Regex As Object
Dim Mh As Object
Set Regex = CreateObject("VBScript.RegExp")
With Regex
.Global = True
.MultiLine = True
.Pattern = "(\(\d+\,\d\))\s\x07"
End With
txt = ThisDocument.Content.Text
Set Mh = Regex.Execute(txt)
n = 0
For Each m In Mh
n = n + 1
Debug.Print n; " > "; m.submatches(0)
Next
Set Regex = Nothing
End Sub 1 > (1,1)
2 > (1,2)
3 > (1,3)
4 > (1,4)
5 > (1,5)
6 > (2,3)
7 > (2,4)
8 > (2,5)
9 > (2,6)
10 > (2,7)
11 > (2,8)
12 > (3,2)
13 > (3,3)
14 > (3,5)
15 > (3,7)
16 > (3,8)
17 > (4,3)
18 > (4,5)
19 > (4,7)
20 > (5,1)
21 > (5,3)
22 > (5,5)
23 > (5,6)
24 > (5,7)
25 > (5,8)
26 > (6,1)
27 > (6,3)
28 > (6,6)
29 > (7,1)
30 > (7,2)
31 > (7,3)
32 > (7,4)
33 > (8,1)
34 > (8,2)
35 > (8,3)
36 > (8,4)
37 > (8,5)
38 > (8,6)
39 > (8,8)
40 > (8,9)
41 > (9,1)
42 > (10,1)
因此也可以采用正则的办法提取单元格的内容
Public Sub RegGet()
Dim Regex As Object
Dim Mh As Object
Set Regex = CreateObject("VBScript.RegExp")
With Regex
.Global = True
.MultiLine = False '设为单行模式,^元义符代表全文的开始,{n}通过重复括号内的子表达式n次的方式提取第n个单元格的内容
.Pattern = "^(.*?\s\x07){2}"
End With
txt = ThisDocument.Content.Text
Set Mh = Regex.Execute(txt)
n = 0
For Each m In Mh
n = n + 1
Debug.Print n; " >>>>>>>>>>> "; m.Value
Debug.Print "提取内容:"; m.submatches(0)
Next
Set Regex = Nothing
End Sub
所有的问题产生的根源都是对WORD 对象模型不熟悉
原来可以如此循环所有单元格 Sub RangeCells()
For Each cel In ThisDocument.Tables(1).Range.Cells
Debug.Print cel.Range.Text
Next cel
End Sub
20190407 Word合并单元格的更多相关文章
- Java删除word合并单元格时的重复值
Spire.Doc提供了Table.applyVerticalMerge()方法来垂直合并word文档里面的表格单元格,Table.applyHorizontalMerge()方法来水平合并表格单元格 ...
- java使用freemarker模板导出word(带有合并单元格)文档
来自:https://blog.csdn.net/qq_33195578/article/details/73790283 前言:最近要做一个导出word功能,其实网上有很多的例子,但是我需要的是合并 ...
- 使用POI创建word表格合并单元格兼容wps
poi创建word表格合并单元格代码如下: /** * @Description: 跨列合并 */ public void mergeCellsHorizontal(XWPFTable table, ...
- EXCEL合并单元格快捷键暨WORD+EXCEL自定义快捷键
最近在写测试用例时,用到合并单元格,只能点,没有快捷键,觉得很蛋疼,上网找了一下,没有直接设置其对应快捷键的方法,但有种曲线救国的方法: 一.右击功能区,选择‘自定义快速访问工具栏’ 二.可以在这 ...
- 关于.net Microsoft.Office.Interop.Word组建操作word的问题,如何控制word表格单元格内部段落的样式。
控制word表格单元格内部文字样式.我要将数据导出到word当中,对于word表格一个单元格中的一段文字,要设置不同的样式,比如第一行文字作为标题要居中,加粗,第二行为正常的正文. 代码如下 publ ...
- C# 获取Excel中的合并单元格
C# 获取Excel中的合并单元格 我们在制作表格时,有时经常需要合并及取消合并一些单元格.在取消合并单元格时需要逐个查找及取消,比较麻烦.这里分享一个简单的方法来识别Excel中的合并单元格,识别这 ...
- jquery操作表格 合并单元格
jquery操作table,合并单元格,合并相同的行 合并的方法 $("#tableid").mergeCell({ cols:[X,X] ///参数为要合并的列}) /** * ...
- NPOI操作EXCEL(五)——含合并单元格复杂表头的EXCEL解析
我们在第三篇文章中谈到了那些非常反人类的excel模板,博主为了养家糊口,也玩命做出了相应的解析方法... 我们先来看看第一类复杂表头: ...... 博主称这类excel模板为略复杂表头模板(蓝色部 ...
- poi获取合并单元格内的第一行第一列的值
当读取如图所示的excel时,显示为第1行 第1列 的内容是:合并单元格 其它在合并单元格区域内的单元格不显示 示例代码如下: import java.io.FileInputStream; impo ...
随机推荐
- CentOS7编译安装SVN(subversion1.9.7)
参考连接0:http://www.programering.com/a/MDMzYDMwATg.html参考连接1:http://www.zsythink.net/archives/13180.系统信 ...
- Java类型信息之RTTI
软件工程的一个核心问题就是软件的复用和扩展.面向对象思想通过封装,继承,派生等机制有效地解决了这个问题.但需求总是变幻莫测,不可琢磨,在面向对象这栋恢宏的大厦旁,还漂浮着一朵乌云,从而导致了RTTI的 ...
- ABP入门系列之3——创建实体/Code First创建数据表
一.首先来看看ABP体系结构 领域层就是业务层,是一个项目的核心,所有业务规则都应该在领域层实现.实体(Entity): 实体代表业务领域的数据和操作,在实践中,通过用来映射成数据库表.仓储(Repo ...
- tomcat部署项目
提示:指定jdk版本 在bin路径下的setclasspath.bat文件添加 set JAVA_HOME=C:\Program Files\Java\jdk1.8.0_201 set JRE_HO ...
- Mask rcn nanchor部分理解
Anchors Mask 生成锚框本质与SSD一样中心点个数等于特征层像素数框体生成围绕中心点Bbox的坐标是要归一化到0~1之间的,都是相对于输入图片的大小.基本生成方式:H乘np.sqrt(anc ...
- 火狐开发----Web开发者工具
作为开发Web相关人员,有必要了解这个开发工具,会提供给你不少的帮助,进入正题.经典的F12启动,这个大家都知道. 一 控制台可以很好的帮我们掌控错误,包括文件的加载.JS语法.CSS语法.安全问题. ...
- Gatling实战(三)
无论是性能测试还是自动化测试,有一个很重要的点就是变量(参数化),因为真实环境是很少同时产生并发很高而且所有参数都一模一样的请求的,就算有这样的接口,开发肯定用缓存来挡了,这种一般不会是瓶颈,真正瓶颈 ...
- Linux 我的常用命令记录
Linux下复制粘贴快捷键 1. 在终端下: 复制命令:Ctrl + Shift + C 组合键. 粘贴命令:Ctrl + Shift + V 组合键. 2. 在控制台下: 复制命令:Ctrl + ...
- MongoDB --- 02. 基本操作,增删改查,数据类型,比较符,高级用法,pymongo
一.基本操作 . mongod 启动服务端 2. mongo 启动客户端 3. show databses 查看本地磁盘的数据库 4. use 库名 切换到要使用的数据库 5. db 查看当前使用的数 ...
- 网站搭建 (第06天) Ckeditor编辑器
一.前言 富文本编辑器,Rich Text Editor, 简称 RTE, 是一种可内嵌于浏览器,所见即所得的文本编辑器,这是百度百科的对富文本编辑器的解释.我们可以借助富文本编辑器,编辑出来一个包含 ...