2016-09-26 479 views
0

所有,使用win32com合并和取消合并单元格

我有一个包含合并单元格一个Word文档里面。我想取消合并这些单元格使用win32com包。

这是一个示例,当ROW 1包含5个单元格,并且ROW 2包含6个单元格时。

理想情况下,我想在行1中取消合并的所有单元格,以使未合并的单元格与第2行对齐,从而使数据显示在所得未合并范围的最左侧单元格中。

实施例:

(合并)

+++++++++++++++++++++++++++++++++++++ 
|hi |bye |  |Hello  |none | 
+++++++++++++++++++++++++++++++++++++ 
|1 |21 |23 |good |bye |3 | 
+++++++++++++++++++++++++++++++++++++ 

(取消合并)

+++++++++++++++++++++++++++++++++++++ 
|hi |bye |  |Hello|  |none | 
+++++++++++++++++++++++++++++++++++++ 
|1 |21 |23 |good |bye |3 | 
+++++++++++++++++++++++++++++++++++++ 

表合并细胞时,有一个总的是 cells。在未合并的表中有单元格。

关于如何做到这一点的任何想法。 win32com模块的文档相当稀少,而且在我工作时,似乎存在的很少的内容被阻止。

帮助将非常感激。

+++ ------------------------------------------- ------------------------------- +++

额外的细节:

我带来这样我的数据:

#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 
012:

#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 

然后我用下面的代码抢出来的文件表

我卡住的是:

table(1).Rows(1).Cells.Count != table(1).Rows(2).Cells.Count 

在这种情况下,第一排有10个小区,而第二行有18个细胞。如果不能分割这些合并的单元格,我的其他代码将无法执行。

回答

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.当我修复表格布局时,我没有完全返回它所属的单元格。

所讨论的代码的实现是相当冗长的,并且对于我的特定问题有些特定。然而,使用单元格宽度的概念并非单元格的某些“合并”属性,这种概念是广泛适用的,对于其他类似问题的其他用户应该是一种有用的方法。

0

你可以实现它想:

table.Rows[0].Cells[0].Merge(table.Rows[1].Cells[0])