所有
我在 Word文档中有表格,其中包含合并的单元格。我想使用 win32com 包取消合并这些单元格。
这方面的一个例子是当ROW 1包含5个单元格时,ROW 2包含6个单元格。
理想情况下,我想在ROW 1中取消合并所有合并的单元格,使得未合并的单元格与ROW 2对齐,这样数据就会显示在生成的未合并范围的最左侧单元格中。
示例:
(合并)
+++++++++++++++++++++++++++++++++++++
|hi |bye | |Hello |none |
+++++++++++++++++++++++++++++++++++++
|1 |21 |23 |good |bye |3 |
+++++++++++++++++++++++++++++++++++++
(适用取消合并)
+++++++++++++++++++++++++++++++++++++
|hi |bye | |Hello| |none |
+++++++++++++++++++++++++++++++++++++
|1 |21 |23 |good |bye |3 |
+++++++++++++++++++++++++++++++++++++
在包含合并单元格的表格中,共有 11 个单元格。在未合并表中,有 12 单元格。
有关如何执行此操作的任何想法。 win32com模块的文档非常稀少,而且在我工作的时候,看起来存在的东西很少被阻止。
非常感谢帮助。
+++ -------------------------------------------- ------------------------------ +++
额外详情:
我带来的数据如下:
#Opens an instance of MS Word in the background, then accesses the referenced
#file.
path = "string containing directory name"
Word = win32.Dispatch("Word.Application")
Word.Visible = False
Word.Documents.Open(path)
#Creates a com element containing access to the document contents of the file referenced above
MT_doc = Word.ActiveDocument
然后我使用以下代码从文件中取出表格:
#Determins the number of tables in the Word Document and outputs a table
#element to "table"
num_tables = MT_doc.Tables.Count
table = MT_doc.Tables
我被困的地方是:
table(1).Rows(1).Cells.Count != table(1).Rows(2).Cells.Count
在这种情况下,第一行有10个单元格,而第二行有18个单元格。无法拆分这些合并的单元格,我的其余代码无法执行。
答案 0 :(得分:0)
我找到了解决问题的方法。经过大量的搜索后,看起来嵌入在MS Word中的表没有"合并"与他们相关的财产。但是,他们确实有宽度"与他们相关的财产。使用win32com获得这个看起来像这样:
#See above for definition of "table" - it's just a win32com COM module
#containing all the tables inside of an MS Word document.
width = table(1).Rows(1).Cells(i).Width
这将返回每个单元格的类型(宽度)=浮点数。可以根据需要将该值与高于或低于任何单元格的宽度值进行比较。如果所讨论的任何单元格的宽度值不等于上方或下方单元格的宽度,那么您就知道给定单元格的格式是这样的,即嵌入式表格中存在的方式可能包含与原始格式非常相似的单元格示例单元格布局。通过迭代上方或下方的单元,可以将这些单元的宽度加在一起,直到它们彼此相等或近似相等。对于我的代码,单元格必须等于彼此的一个整数值。这是通过使用round()函数来避免一个人打开Word文档的情况,意外地改变单个单元格的宽度,然后只用眼睛修复那个单元格宽度[这最初发生在我身上,这是因为我不小心将文件中的所有单元格宽度设置为width = 60.当我修复了表格布局时,我并没有将一个单元格放回到它所属的位置。“
所讨论代码的实现相当冗长,并且对我的特定问题有些具体。然而,使用单元格宽度的概念并非某些"合并"细胞的性质可广泛应用,对于遇到类似问题的其他人来说应该是一种有用的方法。
答案 1 :(得分:0)
你可以像:
那样实现table.Rows[0].Cells[0].Merge(table.Rows[1].Cells[0])