2018년 8월 13일 월요일

Python에서 excel 처리 (openpyxl)


openpyxl을 처음 사용해보면서 이것 저것 테스트해 본 코드이다.
실제 워크북을 읽어들인 후에 수정한 이후 저장하였을때
reference가 아닌 해당 cell에 직접 수정을 가하여야 반영되는 것 같은데 조금 더 사용해 봐야 할 것 같다.

Workbook은
1. Workbook()으로 빈 workbook을 생성하거나
2. load_workbook()으로 파일내용을 access 가능하다.

Workbook내에는 여러 sheet들이 있고
이 sheet들의 access는
1. workbook.worksheets로 list들로 받아 올 수 있으며
2. 바로 workbook[sheetname]으로 sheet를 받아 올 수 있다.

sheet에서는 iterator를
1. sheet.iter_rows() 나
2. sheet.rows 를 통하여 row / column의 iterator를 얻어 올 수 있다.
3. sheet['1'] 이나 sheet['A']로도 얻어올 수 있다.

cell을 access하기 위해서는 
1. 각 row나 column에서 cell을 access할 수도 있고
2. sheet['A1']나 sheet['A1:B2'] 형태로 하나 및 그 이상의 cell을 access할 수 있고
3. Cell 함수를 이용할 수도 있다.

cell에 값을 넣을때
1. sheet['A1'] = value 와 같이 바로 assign이 가능하며
2. cell.value = value로 assign도 가능하다.


from os import listdir
import os
from openpyxl import load_workbook, Workbook

def copyexcel(sfn, tfn):

    sx = load_workbook(sfn, read_only=True)
    if(sx == ''):
        return

    ssheet = sx.active

    tx = Workbook()
    tsheet = tx.create_sheet('Sheet')

    '''

    ws = sx.worksheets
    wsn = sx.sheetnames
   
    ssheet = sx["sheetname"]

    row = sheet['1']
    col = sheet['A']
    rows = sheet['1:2']
    cols = sheet['A:B']

    rows = sheet['A2:B3']

    sheet['A1'] = 'my input data'
    sheet.append['A1-data', 'B1-data', 'C1-data']
    sheet.append['A2-data', 'B2-data', 'C2-data']

    cell = sheet['A1']
    cell.data_type = c.TYPE_BOOL, c.TYPE_ERROR, C.TYPE_FORMULA, c.TYPE_FORMULA_CACHE_STRING, c.TYPE_INLINE, c.TYPE_NULL, c.TYPENUMERIC, c.TYPE_STRING

    '''

    for row in ssheet.iter_rows():
        row_data = []
        for cell in row:
            row_data.append(cell.value)

        tsheet.append(row_data)

    tx.save(tfn)
     


def main():

    files = listdir('.')

    for f in files:
        if os.path.isdir(f):
            continue
        if f[-4:] != 'xlsx':
            continue
   
        fn = f[:-5]
        newfn = fn + '_new' + '.xlsx'

        copyexcel(f, newfn)

if __name__ == "__main__":
    main()

댓글 없음:

댓글 쓰기

200926.가오리코스 라이딩

9/26 골절인지 아닌지 확인 안됨. 이후 미세골절여부 확인 핸드폰을 드는 것도 어려움 9/29 x ray 다시 찍지 않고 이후 재 방문 요청 ...