2017-09-14 1 views
-1

OpenPyxl 및 xlsxwriter를 사용하여 Excel에서 행 번호를 확장하는 동안 잠시 멈추었습니다. 나는 형상에 대응, 또 다른 데이터를 추가하고, 아래로 모두를 이동해야행에 데이터가 추가되고 해당 셀 뒤에

enter image description here

그리고, 그래서 다음과 같이 표시됩니다 : 같은

지금 내 파일이 보이는

enter image description here

내 데이터 [ 'a', b ','c ']가 목록으로 저장되어 있습니다. 대신 사전을 사용해야합니까? 아니면 쉽게 접근 할 수 있습니까? 대한

지금 내 코드 같이 보인다 :

from openpyxl import load_workbook 
from openpyxl import Workbook 
import xlsxwriter 
import collections 

INPUT_FILE = 'output.xlsx' 



wb = load_workbook(filename=INPUT_FILE) 
ws = wb['cond'] 

workbook = xlsxwriter.Workbook('data.xlsx') 
worksheet = workbook.add_worksheet() 


def get_data(start, stop, col): 
    mylist = [ws.cell(row=i,column= col).value for i in range(start,stop)] 
    findings = [v for i,v in enumerate(mylist) if mylist.index(v) == i] 
    return findings 

def get_data_row(start, stop, row): 
    mylist = [ws.cell(row = row, column = i).value for i in range(start, stop)] 
    values = [v for i,v in enumerate(mylist) if mylist.index(v) == i] 
    return values 

def write_from_dict(row, col, dict): 
    row = row 
    col = col 
    for key in dict.keys(): 
     worksheet.write(row, col, key) 
     for item in dict[key]: 
      worksheet.write(row, col + 1, item) 
      row += 1 



if __name__ == '__main__': 

    mammo_findings_list = get_data(2,10, 11) 
    us_findings_list = get_data(10, 17, 11) 
    mri_findings_list = get_data(17, 27, 11) 

    mammo_params_list = [get_data(2, 5, 14), get_data(5,8,14), 
         get_data(8, 9, 14), get_data(9,10, 14)] 
    mammo_data = dict(zip(mammo_findings_list,mammo_params_list)) 


    mammo = write_from_dict(1, 1, mammo_data) 


    shape_val = get_data_row(15, 19, 2) 
    margin_val = get_data_row(15, 19, 3) 
    density_val = get_data_row(15, 19, 4) 

    mass_dict = dict(zip(mammo_params_list[0],shape_val,margin_val,density_val])) 
    print(mass_dict) 

    test = write_from_dict(1,2,mass_dict) #eventually didn't work for me now 

    workbook.close() 

사전 출력 :

{'Shape': ['Oval, Round', None, 'Irregular'], 'Margin': ['Circumscribed', None, 'Obscured, Microlobulated, Indistinct, Spiculated'], 'Density': ['High density', 'Equal density, Low density', None]} 
{'Mass': ['Shape', 'Margin', 'Density'], 'Calcifications': ['Typically benign', 'Suspicious morphology', 'Distribution'], 'Assymetry': ['Assymetry'], 'Lymph nodes': ['Lymph nodes']} 

그리고 난 그냥/추가 어떻게 든이 데이터를 병합하고 동시에 Excel로 모든 것을 작성해야합니다.

감사합니다!

+2

코드는 현재 어떤 모양입니까? –

+0

@CharlieClark이 (가) 편집 한 글입니다. –

+0

감사합니다. 두 라이브러리를 모두 사용하는 이유는 무엇입니까? openpyxl은 필요한 모든 것을 할 수 있어야합니다. –

답변

1

용어 사전을 워크 시트의 관련 열로 변환하는 경우를 제한합니다.

values_dict = { 
'Shape': ['Oval, Round', None, 'Irregular'], 
'Margin': ['Circumscribed', None, 'Obscured, Microlobulated, Indistinct, Spiculated'], 
'Density': ['High density', 'Equal density, Low density', None] 
} 

이 경우에 해당하지 않으면 문자열에 포함 된 목록이 먼저 확장되어야합니다.

가장 간단한 방법은 각 키 값을 따로 처리하는 것입니다. openpyxl를 들어이

for col, (key, values) in enumerate(values_dict.items(), start=1): 
    ws.cell(row=1, column=col, value=key) # column title 
    for row, v in enumerate(values, start=2): 
     ws.cell(row=2, column=col, value=v) # column values 

을 것이다 그러나 이것은 우리가 시도하고 openpyxl에서 피 계산을 조정 행 및 셀의 많은을 포함한다. 다른 방법은 zip을 사용하여 값 열을 추가 할 수있는 행으로 변환하는 것입니다.

from itertools import zip_longest 
headers = [] 
values = [] 
for k, v in values_dict.items(): 
    headers.append(k) 
    values.append(v) 
ws.append(headers) 
for row in zip_longest(*values): 
    ws.append(row) 

물론 중간 구조를 제거 할 수 있다면 더 좋을 것입니다.

관련 문제