gspread에서 구글 스프레드시트를 업데이트할 때 칸의 디스플레이 형식을 깨끗하게 하려고 합니다

개요


gspread로 전자 표에 값을 붙일 때 디스플레이 형식을 알아차리면 행복해지기 때문에 그 방법을 정리했다.

결론

  • 파일에서 읽은 파일을 붙여넣을 때 적당한 변환값(변환 중 약간의 고려점)
  • update_cells 옵션에는 USER_ENTERED 가입
  • 붙여넣기 값 예


    예를 들어, 다음을 붙여 넣습니다.
    실제로 파일, BigQuery, Athena에서 읽습니다.

    사례 1


    아무 생각 없이 세로로 붙여.
    case1.py
    # 前略
    wkb = gc.open_by_key("xxxxxxxxxxx")
    wks = wkb.worksheet("data1")
    wks.clear()
    
    cell_list = wks.range('A1:A10')
    
    vlist=[]
    vlist.append("12039")
    vlist.append("1111222233334444")
    vlist.append("3.141592")
    vlist.append("2021-01-14")
    
    
    idx=0
    for val in vlist :
        cell_list[idx].value = val
        idx+=1
    
    wks.update_cells(cell_list)
    

    사례 1 결과



    한순간, 응?좋지 않아요?그렇게 생각하지만 문자열이라 계산이 안 돼요.
    그리고 =sum () 문자열에서 실행하면 0이 될 것 같아서 상상만 해도 무서워요.

    사례 2


    gspread가python의 유형을 적절하게 변환하면 칸도 좋은 느낌을 줄 수 있습니다.
    그래서
    case2.py
    #前略
    idx=0
    for val in vlist :
        try :
            val = int(val)
        except :
            pass
    
        cell_list[idx].value = val
        idx+=1
    
    wks.update_cells(cell_list)
    
    삭제합니다.

    사례 2 결과


    했어!?

    네, 다음은 안 돼요.
    - 긴 수치 손상
    - 소수는 여전히 문자열
    이것도 고려해야 한다.

    사례 3


    나는 논리적인 조합 방법이 또 다른 것이 있다고 생각하지만, 전환의 순서를 고려해야 하기 때문에 약간 복잡해진다.이번에는
  • 점을 포함하면 플로트
  • 로 변환
  • 일정한 문자 수 이하에서 int
  • 로 변환
    판정
    case3.py
    #前略
    vlist=[]
    vlist.append("12039")
    vlist.append("1111222233334444")
    vlist.append("3.141592")
    vlist.append("2021-01-14")
    vlist.append("2021-01-15")
    
    idx=0
    for val in vlist :
        try :
            if len(val) <= 10:
                val = int(val)
        except :
            pass
        try :
            if "." in val:
                val = float(val)
        except :
            pass
        cell_list[idx].value = val
        idx+=1
    
    wks.update_cells(cell_list)
    
    

    사례 3 결과



    느낌이 좋아요.
    날짜가 있어서 다른 자리에 최신 데이터를 표시하고 싶어요.


    날짜 유형은 문자열로 유지됩니다.

    사례 4


    네, 그럼 날짜형으로 바꿔서 드릴게요.
    문자열은 그대로 유지되며 update_cells 옵션으로 USER_ENTERED를 내면 해결됩니다.
    case4.py
    #前略
    idx=0
    for val in vlist :
        try :
            if len(val) <= 10:
                val = int(val)
        except :
            pass
    
        try :
            if "." in val:
                val = float(val)
        except :
            pass
        cell_list[idx].value = val
        idx+=1
    
    wks.update_cells(cell_list,value_input_option="USER_ENTERED")
    

    사례 4 결과



    이렇게 해서 드디어 좋은 느낌이 들었어요!

    잡감


    붙일 수 있느냐 못 붙일 수 있느냐가 아니라'붙였지만 좀 이상해'로 바뀌는 것이 번거롭다.
    또한 적당한 유형의 BigQuery를 설정한 표에서 라이브러리에서 얻은 데이터를 상술한 것과 같은 상황에서 전환할 필요가 없다.
    그러나 파일을 읽은 후에 이것도 RPA에 상당히 많은 상황이라고 나는 생각한다.

    좋은 웹페이지 즐겨찾기