2021年9月29日 星期三

[Excel VBA]判断Word文档表格合并单元格数 环球观察

时间:2023-05-20 17:08:05来源 : 哔哩哔哩

一、目的

在用Excel VBA读取Word文档内表格时遇到一个问题:怎么判断表格内是否有合并单元格?哪些单元格是合并单元格?

网上搜到的相关结果不多,而且代码感觉也有些繁琐。因此就自己打断点,一点一点地分析了一下Word文档表格对象的属性,最后写了判断合并单元格的代码,并给出注释和必要的解释,供大家参考。

二、VBA代码

1. 获取Word文档所有表格对象的集合(Tables Collection)


(资料图片仅供参考)

这部分代码网上随便都能找到类似的,就不作解释。

注:变量wdDoc.Tables获取当前文档内所有表格的集合。可通过wdDoc.Tables(index) 访问指定表格。

2. 判断表格对象(Tables)是否有合并单元格

注:参数wdTable是指定表格,即通过wdDoc.Tables(index)获取 。

实现思路:通过 “表格行×表格列数” 计算出表格理论单元格数量,即如果没有合并单元格,这个表格就应该有这么多个单元格。然后通过.Range.Cells获取实际单元格的集合,通过判断实际单元格个数与理论的是否相等,来判断是否有合并单元格。

这里利用到Tables对象的一个特性:wdDoc.Tables(index).Range.Cells属性获取的单元格集合,它是不包含被合并掉的单元格的。

3. 计算合并单元格

遍历表格单元格集合来获得每一个单元格对象,并将对象传入AnalysisMergeCells函数。

PS:原本准备用For Each遍历wdTable.Range.Cells集合来拿到单元格对象,但是单元格对象参数传入到AnalysisMergeCells函数内就变成了单元格文本,奇怪的BUG...

※ 通过AnalysisMergeCells函数计算单元格的合并情况。

注1:参数wdCellObject是表格的指定单元格对象,通过wdDoc.Tables(index).Range.Cells(index)获取

注2:函数返回数组 [RowMergeCount, ColumnMergeCount]

实现思路(1)列合并很容易判断,通过获取当前单元格wdCellObject.Range.Columns集合的.Count属性,横向合并多少列集合就会有几个Column对象。(2)行合并稍微麻烦点,没有直观的属性能判断。仔细分析wdCellObject对象发现,单元格对象有.RowIndex属性,指示着当前单元格所在行。对于处在同一列的单元格.RowIndex属性是唯一的,并且在没有合并行的情况下相邻行的单元格.RowIndex是连续的,合并行后.RowIndex属性不连续,因此,可以通过计算.RowIndex属性越值来判断合并了多少行。

上传日期:2023年5月20日 17点11分

关键词:

(责任编辑:黄俊飞)

推荐内容

Back to Top