Excel 시트에서 병합된 셀을 탐지하는 방법은 무엇입니까?
병합된 셀이 포함된 Excel 시트에서 데이터를 읽으려고 합니다.openpyxl을 사용하여 병합된 셀을 읽을 때 첫 번째 병합된 셀에는 값이 포함되고 나머지 셀은 비어 있습니다.
각 셀의 병합 여부와 병합되는 셀의 개수를 알고 싶은데 해당 기능을 찾을 수 없었습니다.시트에 다른 셀이 비어서 사용할 수 없습니다.
사용할 수 있습니다.merged_cells.ranges
(merged_cell_ranges
버전 2.5.0-b1(2017-10-19)에서 더 이상 사용되지 않으며, 시트에서 merged_cells.dll로 변경되었습니다(행당 찾을 수 없음).
from openpyxl import load_workbook
wb = load_workbook(filename='a file name')
sheet_ranges = wb['Sheet1']
print(sheet_ranges.merged_cells.ranges)
단일 셀의 병합 여부를 테스트하려면 클래스(이름)를 확인합니다.
cell = sheet.cell(row=15, column=14)
if type(cell).__name__ == 'MergedCell':
print("Oh no, the cell is merged!")
else:
print("This cell is not merged.")
모든 셀을 "합병"하려면 다음 기능을 사용할 수 있습니다.unmerge_cells
for items in sorted(sheet.merged_cell_ranges):
print(items)
sheet.unmerge_cells(str(items))
단일 셀이 병합되는지 테스트하기 위해 @A와 같이 sheet.merged_cells.range를 반복합니다.Lau가 제안합니다.불행히도, @0x4a6f4672와 같은 셀 유형을 확인하는 것은 더 이상 작동하지 않습니다.
이 작업을 수행하는 방법을 보여주는 기능이 있습니다.
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]))
이 모든 것이 도움이 되었습니다(감사합니다). 그러나 스프레드시트 몇 개를 사용하여 접근 방식을 사용했을 때 예상했던 모든 셀이 병합되지 않았습니다.저는 결국 모든 것을 완료하기 위해 병합을 반복하고 다시 테스트해야 했습니다.제 경우, 예상대로 모든 것이 합쳐지는 데 4번의 패스가 필요했습니다.
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))
언급URL : https://stackoverflow.com/questions/39574991/how-to-detect-merged-cells-in-an-excel-sheet
'source' 카테고리의 다른 글
WooCommerce의 사용자 지정 주문 작업 (0) | 2023.07.03 |
---|---|
Android에서 Shared Preferences를 사용하여 값을 저장, 가져오기 및 편집하는 방법 (0) | 2023.07.03 |
Oracle 시퀀스 다음 단계 및 곡선 혼란 (0) | 2023.07.03 |
oracle pl/sql 내부에서 CLOB를 VARCHAR2로 변환하는 방법 (0) | 2023.07.03 |
갈라지는 낙타 케이스 (0) | 2023.07.03 |