2017-09-26 6 views
0

각 시트가 여러 장있는 파일을 Excel 파일로 가져와 파일에 존재하는 경우 선택한 시트의 데이터를 수집하고 하나의 큰 시트 . 일반적으로 파일을 반복 실행하고 원하는 시트가 있으면 데이터가있는 셀 범위를 찾아 데이터 프레임에 추가합니다. 지금해야 할 일은 헤더 행 (열 이름)을 Dataframe에 추가하는 것이지만, 시트에서는 여러 행의 헤더입니다.openPyXL - 병합 중에 셀 범위에 값 지정

데이터 프레임에서 동일하게 보이게하려면 맨 위의 행에있는 셀을 병합 해제하고 첫 번째 셀의 값을 이전에 병합 된 범위의 나머지 부분으로 복사해야합니다.

엑셀 시트에 액세스 할 때 OpenPyXL을 사용하고 있습니다. 내 함수는 매개 변수로 작업 할 시트를받습니다. 그것은 다음과 같습니다

def checkForMergedCells(sheet): 
    merged = ws.merged_cell_ranges 
    for mergedCell in merged: 
     mc_start, mc_stop = str(mergedCell).split(':') 
     cp_value = sheet[mc_start] 
     sheet.unmerge_cells(mergedCell) 
     cell_range = sheet[mergedCell] 
     for cell in cell_range: 
      cell.value = cp_value 

것은 CELL_RANGE 오류 메시지가 점점에서 끝나는 튜플 반환한다는 것입니다 : 인덱스에 의해

AttributeError: 'tuple' object has no attribute 'value' Below you can see screencap during debug which shows values passed in each variable.

Debugger running

답변

1

액세스는 일반적으로 튜플의 튜플을 반환을 개별 셀이나 행을 가져 오려는 경우는 예외입니다. 프로그래밍 방식으로 액세스하려면 모듈을 보면서 시간을 보내고 싶을 수도 있습니다.

from openpyxl.utils import range_boundaries 

for group in ws.merged_cell_ranges: 
    min_col, min_row, max_col, max_row = range_boundaries(group) 
    top_left_cell_value = ws.cell(row=min_row, column=min_col).value 
    for row in ws.iter_rows(min_col=min_col, min_row=min_row, max_col=max_col, max_row=max_row): 
     for cell in row: 
      cell.value = top_left_cell_value