2016-10-13 2 views
0

나는이 오래된 Excel 시트에서 다음과 같은 내용 :파이썬 Xlrd 및 Xlwt

excel sheet updated

에서 : 나는 다음과 같은 값을 갖는 새 엑셀 시트를 생성해야

excel sheet screenshot

입력 Excel 파일의 세 번째 열은 10010-10040이고 증분 값은 10입니다. 이것은 새로운 Excel 파일에서 확장해야합니다.

값 사이에 쉼표 (,)를 붙이면 별도의 값으로 처리하고 확장해야합니다. (2 행 3 열과 비슷하다.)

나는 이것을하는 법을 모르며 나는 Python을 처음 사용한다.

+0

문자 "-"를 구분으로 사용하여 "10010-10040-10"("initNumber-FinalNumber-Increment") 값을 구분해야합니다. 그런 다음 증분이 "증가"가되고 "initNumber"에서 시작하여 "FinalNumber"에서 끝나는 for 루프 (또는 비슷한)를 수행 할 수 있습니다. 귀하의 사이클 안에서 Ex "+ ExerationNumber를 연결하여 Ex1, Ex2, ...를 얻으십시오. 3 번째 열의 경우"initNumber "에서 시작하여 매 루프마다"Increment "를 추가하는 변수를 가질 수 있습니다. – luizfvpereira

+0

오래된'xls' 파일을 다루고 있습니까? 또는 최신'xlsx' 파일? 이 라이브러리는 이전 형식으로 작동하도록 설계되었습니다. –

+0

안녕 마틴 .. 입력 파일로 새 xlsx 파일을 사용했습니다. xlrd가 함께 작동합니다. 출력 파일은 이전 형식의 xls 파일로 나왔습니다. –

답변

0

다음을 시도하십시오. 이 xls 스프레드 시트 읽기 및 쓰기 위해 xlrdxlwt 라이브러리를 사용합니다.에 걸릴 꽤 많은이 파이썬 당신이 익숙하지 않은 경우, 불행하게도

import xlrd 
import xlwt 

wb_in = xlrd.open_workbook(r'input.xls') 
sheet_name = wb_in.sheet_names()[0] 
ws_in = wb_in.sheet_by_name(sheet_name) 

wb_out = xlwt.Workbook() 
ws_out = wb_out.add_sheet(sheet_name) # Use the same sheet name 

row_out = 0 

for row_in in range(ws_in.nrows): 
    row = ws_in.row_values(row_in) 

    if isinstance(row[2], float): 
     req_spec = str(int(row[2])) 
    else: 
     req_spec = row[2] 

    req_range = req_spec.split('-') 
    req_enum = req_spec.split(',') 

    if len(req_range) > 1: # e.g. 10010-10040-10 
     for value in range(int(str(req_range[0])), int(str(req_range[1])) + 1, int(str(req_range[2]))): 
      ws_out.write(row_out, 0, row[0]) 
      ws_out.write(row_out, 1, row[1]) 
      ws_out.write(row_out, 2, str(value)) 
      row_out += 1 
    elif len(req_enum) > 1: # e.g. 1010,1020 
     for value in req_enum: 
      ws_out.write(row_out, 0, row[0]) 
      ws_out.write(row_out, 1, row[1]) 
      ws_out.write(row_out, 2, value) 
      row_out += 1 
    else:      # e.g. 10100 
     ws_out.write(row_out, 0, row[0]) 
     ws_out.write(row_out, 1, row[1]) 
     ws_out.write(row_out, 2, req_spec) 
     row_out += 1 

wb_out.save('output.xls') 

을 스크립트는 입력 통합 문서를 작성하여 작동

을 및 출력 통합 문서. 입력의 각 행에 대해 항상 3 개의 열이 있고 세 번째 열에는 세 가지 지정 유형 중 하나가 들어 있다고 가정합니다. - 또는 ,이 있는지 여부에 따라 사용중인 항목을 결정합니다. 그런 다음이 범위를 기반으로 출력에 행을 씁니다.

파일을 읽을 때 xlrd은 셀의 형식을 추측하려고합니다. 대부분의 항목에 대해 문자열 형식을 추측하지만 때로는 실수로 부동 소수점 숫자를 추측합니다. 스크립트는이를 테스트하고 일관성을 위해 문자열로 변환합니다. 또한 xlrd은 유니 코드 u"xxx" 형식을 사용하여 문자열을 저장합니다. 필요한 범위를 계산할 수 있으려면 숫자로 변환해야합니다.

+0

마틴 감사합니다 ... 그것은 나를 많이 도왔습니다 ...! –

+0

당신은 환영합니다! 대답으로 회색 눈금을 클릭하는 것을 잊지 말고 해결책으로 받아들입니다. –

관련 문제