def testMerge(row, column):
cell = sheet.cell(row, column)
for mergedCell in sheet.merged_cells.ranges:
if (cell.coordinate in mergedCell):
return True
return False
import sys
from openpyxl import load_workbook
from openpyxl.cell.cell import MergedCell
def cell_value(sheet, coord):
cell = sheet[coord]
if not isinstance(cell, MergedCell):
return cell.value
# "Oh no, the cell is merged!"
for range in sheet.merged_cells.ranges:
if coord in range:
return range.start_cell.value
raise AssertionError('Merged cell is not in any merge range!')
workbook = load_workbook(sys.argv[1])
print(cell_value(workbook.active, sys.argv[2]))
mergedRanges = sheet_ranges.merged_cells.ranges
### How many times do we run unmerge?
i=0
### keep testing and removing ranges until they are all actually gone
while mergedRanges:
for entry in mergedRanges:
i+=1
print(" unMerging: " + str(i) + ": " +str(entry))
ws.unmerge_cells(str(entry))
5条答案
按热度按时间wh6knrhe1#
您可以在工作表中使用
merged_cells.ranges
(merged_cell_ranges
在2.5.0-b1(2017-10-19)中已被弃用,更改为merged_cells.ranges)(似乎无法找到每行),如下所示:oymdgrw72#
要测试单个单元格是否合并,您可以检查类型:
要“取消合并”所有单元格,可以使用函数
unmerge_cells
kcugc4gi3#
为了测试单个单元格是否被合并,我循环查看sheet.merged_cells.ranges,比如@A刘建议。不幸的是,检查像@0x4a6f4672这样的单元格类型不再起作用。
下面是一个函数,它向您展示了如何做到这一点。
t1qtbnec4#
这个问题询问了检测合并的单元格和 * 阅读 * 它们,但到目前为止,提供的答案只涉及 * 检测 * 和 * 取消合并 *。这里有一个函数,它返回单元格的 logical 值,用户将看到包含在合并单元格中的值:
h79rfbju5#
这些都有帮助(谢谢),但是当我在几个电子表格中使用这些方法时,它并没有合并我期望的所有单元格。我不得不循环并重新测试合并,以最终完成它们。在我的例子中,我们花了4遍才让所有的东西都像预期的那样取消合并: