파이썬 2.x 버전 엑셀에 저장하는것 관련해서 질문드립니다.

조회수 1818회

안녕하세요. 파이썬을 이제 막 접하기 시작한 직장인입니다.

파이썬을 이용한 엑셀 자동화를 목표로 공부하고 있는데요 하나 질문 사항이 있어서 글을 씁니다

예를 들어서

A엑셀 파일에 하나의 셀에 있는 "Hello python World" 를 읽어와서 B엑셀 파일을 새로 만들어서 하나의 셀에 저장하는것 까지는 수행을 했습니다

이제 여기서 질문인데요..

저 문장을 1개의 셀에 넣지를 않고

1행 1열에 hello를 넣고 1행 2얼에 python을 넣고 1행 3열에 world를 넣고싶은데요.. 그러면 어떻게 해야 하는지 알고 싶습니다. (실력이 미천하여,,,예시코드로 설명해 주시면 감사하겠습니다...ㅜ)

지금 쓰고 있는 라이브러리는 xlwt와 xlrd를 써서 만들고 있습니다.

부족한 저에게 많은 가르침 주시면 감사하겠습니다..!!

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 내장함수는 아실거라는 가정하에 간략히 작성합니다.

    불러온 스트링을 A라고 하면.. A = A.split()으로 잘라서 리스트를 만드세요.

    그리고 for문으로 해당 열에 입력하시면 될 것 같아요.

    
    A = "Hello Python World" # 셀 복사
    A = A.split()
    행번호 = 10 # 예를 들어
    
    for 열번호, 값 in enumerate(A):
        ws.write(행번호,열번호,값)
    

    (여러 행을 복붙하실 거면 복사하실 때 2차원배열로 만드시고요.)

    2개 이상의 워크시트를 다루는 것도 간단합니다.

    스택오버플로에 이와 관련된 좋은 예문이 있어 가져와보았습니다.

    import xlwt
    
    data1 = [["a1", "b1", "c1", "d1"], ["e1", "f1", "g1", "h1"], ["i1", "j1", "k1", "l1"]]
    data2 = [["a2", "b2", "c2", "d2"], ["e2", "f2", "g2", "h2"], ["i2", "j2", "k2", "l2"]]
    data3 = [["a3", "b3", "c3", "d3"], ["e3", "f3", "g3", "h3"], ["i3", "j3", "k3", "l3"]]
    
    sheets = ["Sheet 1", "Sheet 2", "Sheet 3"]
    
    wb = xlwt.Workbook()
    
    for sheet, data in zip(sheets, [data1, data2, data3]):
        ws = wb.add_sheet(sheet)
    
        for row, row_value in enumerate(data):
            for col, col_value in enumerate(row_value):
                ws.write(row, col, col_value)
    
    wb.save('output.xls')
    

    *출처 : https://stackoverflow.com/questions/35085436/xlwt-write-multiple-columns

    개인적인 의견으로는, 회사 엑셀업무의 자동화를 목표로 하신다면

    특별한 이유가 없는 한은 파이썬3과 win32com 패키지를 쓰시는 게 좋은 것 같습니다.

    저도 회사원이고 win32com으로 자동화를 하고 있는데, 써본 바로는...

    xlrd, xlwt보다 훨씬 편하기도 하고,

    복잡한 작업을 해야 할 때 VBA 매크로기록을 참고할 수 있다는 게 가장 큰 장점이에요.

    VBA 매크로를 거의 그대로 옮겨쓰면 되니까요.

    여러 셀을 선택했을 때 2겹 튜플로 데이터가 복사되기도 하고요.

    단점이라면 엑셀이 깔려 있어야 하고, 코드가 파이써닉하지 않다는 거?ㅎ

    아래는 한 셀 안에 특정 글자만 굵게 하거나 색을 입히는 간단한 코드에요.

    상당히 직관적이죠?ㅎ (xlwt에서도 가능하긴 해욥ㅎ)

    import win32com.client as win32
    excel = win32.gencache.EnsureDispatch("Excel.Application")
    wb1 = excel.Workbooks.Add()
    ws1 = wb1.Worksheets(1)
    excel.Visible = True
    특정글자 = ws1.Cells(1,1).GetCharacters(Start=4,Length=7).Font
    # 인덱싱도 파이써닉하지 않게 1부터 시작...
    특정글자.ColorIndex = 4
    특정글자.Name = "나눔명조"
    특정글자.Size = 50
    특정글자.Bold = True
    특정글자.Shadow = True
    ...
    
    

    괜찮지 않나요?ㅎ

    처음 질문 주신 내용도 for문으로가 아니라

    일괄입력도 가능합니다. 피벗이나 그래프도 가능하고요.

    오지랖이었다면 죄송ㅋ

    • (•́ ✖ •̀)
      알 수 없는 사용자
    • 감사합이다 ㅜ 좋은 예제까지 들어주시고..덕분에 쏙쏙 이해가 되었습니다!!Com 추천도 감사드립니다!! 알 수 없는 사용자 2018.4.11 11:57

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)