2016-09-26 73 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])