Giting.
낮의 Giting
홈 › 스킬 › sheet-io
스프레드시트 연동 스킬 실물 캡처 스킬 · 도구 · 자체 제작
◆ 도입 후보

레퍼런스 없이 처음부터 만든 스킬이다. 'AI로 스프레드시트 쓰기'는 세 가지로 조용히 망가진다. 1만 행을 통째로 context에 부어 토큰을 태우고, 007이 7로·전화번호가 지수표기로·한글이 깨지고 수식이 계산값으로 덮이며, 한 셀 고치려다 시트 전체를 다시 써 남의 컬럼을 날린다. sheet-io는 각각을 inspect(스키마·샘플·통계만)·타입 보존(식별자 열은 text로 고정)·안전한 append로 막는다. 표준 라이브러리만 쓰고 공개 구글시트는 CSV export URL로 인증 없이 연동한다. 까다로운 실측(앞자리 0 code·전화번호·한글·날짜·빈값)으로 검증했다. 007과 전화번호가 텍스트로 보존되고 필터·추가가 타입을 지킨다. 스프레드시트를 다루는 모든 작업에 도입 후보.

실물부터, 설치 전에 전부 만져보세요

아래는 이미지가 아니라 이 스킬이 담고 있는 진짜 HTML입니다. 눌러 보세요.

'AI로 스프레드시트 쓰기'가 조용히 망가지는 3가지, 각각을 이 스킬이 막습니다. 로컬 CSV·공개 Google Sheet 모두, 표준 라이브러리만으로.

재앙 1
토큰 폭발
1만 행을 통째로 붓기 → inspect가 스키마·샘플·통계만
재앙 2
타입·인코딩 손상
007→7·전화번호·cp949·수식 → 식별자 열은 텍스트로 고정
재앙 3
통째 덮어쓰기
남의 컬럼·수식 날림 → append/타깃만

1) inspect: 통째 안 붓고 파악 (실측 출력)

$ python3 sheet.py inspect data.csv
columns : 7  |  rows: 3
  'name'   : text        : 0 null : 3 uniq
  'code'   : text(id)    : 3 uniq  values: 007, 042, 113   ← 007 보존
  'phone'  : text(id)    : 01012345678 …               ← 숫자로 안 뭉갬
  'age'    : int         : 1 null : range 29..34
  'joined' : date        : 3 uniq
  'score'  : float       : 1 null : range 88.5..91.2
# read only what you need: get <src> --where col=val --cols a,b --limit N

2) get / append, 필요한 행만, 안전하게 추가

$ sheet.py get data.csv --where status=active --cols name,code
  [{"name":"김철수","code":"007"}, {"name":"박민수","code":"113"}]
$ sheet.py append data.csv --row "name=최영,code=005,phone=01000001111"
  appended 1 row → 최영,005,01000001111,…   ← 앞자리 0 유지

타입 보존: 이게 핵심 차이

그냥 열면 (재앙)
code 007 → 7
phone → 1.01E+10
한글 → 占쏙옙
sheet-io
code 007 → "007"
phone → "01012345678"
한글 → 김철수 (cp949 폴백)

공개 Google Sheet는 URL만 붙이면 CSV export로 자동 변환·인증 없이 읽습니다("링크 있는 사람=뷰어" 공유만). 표준 라이브러리만(pandas·gspread 불필요), 007·전화번호 텍스트 보존까지 실측했습니다. XLSX·비공개 쓰기는 optional.

검수 리포트

레퍼런스 없이, 처음부터

이번 스킬은 남의 자료를 참고하지 않고 우리가 처음부터 설계했습니다. 출발점은 하나 "AI로 스프레드시트 쓰기"는 세 가지로 조용히 망가진다는 것.

3대 재앙

1. 토큰 폭발: 1만 행 시트를 통째로 context에 부어버림. → inspect가 컬럼·행수·타입·샘플·통계만 줍니다. 전체를 안 넣고도 시트를 파악. 2. 타입·인코딩 손상: 007이 7로, 전화번호가 지수표기로, 날짜 재포맷, 한글 cp949 깨짐, 쓸 때 수식이 계산값으로 덮여 사라짐. → 식별자 같은 열은 텍스트로 고정(한 값만 0으로 시작해도 열 전체), 인코딩 폴백, 수식 왕복 금지. 3. 통째 덮어쓰기: 한 셀 고치라 했는데 시트 전체를 다시 써서 남의 컬럼·서식·수식을 날림. → append/타깃 업데이트만.

세 명령

sheet.py inspect data.csv                       # 스키마·샘플·통계 (토큰 절약)
sheet.py inspect "https://docs.google.com/..."  # 공개 구글시트도 그대로
sheet.py get data.csv --where status=active --cols name,email --limit 20
sheet.py append data.csv --row "name=Kim,code=007,phone=01012345678"

구글시트 연동은 인증 없이

Google Sheets URL을 붙이면 CSV export URL로 자동 변환해 읽습니다. 조건은 하나: 시트가 "링크 있는 사람 = 뷰어"로 공유돼 있을 것(File > Share). 아니면 CSV 대신 로그인 페이지가 와서, 도구가 "공개가 아니다"라고 정확히 알려줍니다. 설치할 것도, 크리덴셜도 없습니다.

실측으로 검증했다

앞자리 0 코드(007)·전화번호(01012345678)·한글·날짜·빈값·소수를 담은 시트로 돌렸습니다. code와 phone이 text(id)로 보존(숫자로 안 뭉개짐), age는 int(+null), 날짜·소수 인식, 필터·추가가 타입을 지켰습니다.

정직한 한계

쓰는 법