posted by 내.맘.대.로 2025. 12. 19. 10:19

내맘대로의 EPUBGUIDE.NET에서 편집자의 의도를 그대로 살려 전자책을 제작해 드립니다.

종이책의 편집 스타일을 최대한 유지하며, 팝업 주석 처리, 이미지 확대 축소 등 전자책의 장점을 반영하여 전자책을 제작합니다. 탬플릿을 사용하지 않고, 책 한권 한권 고유 스타일을 살리기 때문에 전자책에서도 종이책 디자인을 느낄 수 있습니다.

한국출판문화진흥원의 [텍스트형 전자책 제작 지원 사업] 선정 도서는 ‘제작 난이도별 제작비 산정 기준에 근거하여’ 제작 단가를 산정하고, 일정에 맞춰 제작을 해 드리니 많은 문의 바랍니다.

자세한 내용은 여기로: https://www.epubguide.net/notice/309

오래 전 작성된 글은 현재의 Sigil 버전과 차이가 날 수 있습니다. 등록 일자를 확인 하고 1년 이상 지난 글은 변경된 내용이 있는지 확인하시기 바랍니다.

EPUBGUIDE.NET의 핵심만 모았다. 전자책 편집자를 위한 필독서!

책표지

클릭 편집 탬플릿 제공,

왕초보를 위한
클릭으로 EPUB 만들기

정가 : 9,900원 할인: 8,910원

책표지

기초부터 전자책 제작 실습까지

Sigil 완벽 가이드

정가: 18,000원 할인: 16,200 원

300x250

작업 관리는 여러 방식으로 하지만, 가장 손쉽고 익숙한 것은 엑셀(스프레드 시트)을 이용한 정리일 것입니다.

저는 작업 의뢰를 받으면 구글 스프레드에 작업 일정 관리 부터 세금계산서 발행까지 정리를 하고 있어요.

그런데 작업할 도서 목록이 많아지면, 일 단위로 일정을 관리하기 어렵습니다.

그래서 마감일을 관리하기 위해 마감일 기준으로 구글 캘린더에 작업 목록을 정리해 관리를 합니다.

출판사 책제목 제작원가 견적 총액(세금포함) 세금 제작 기한 완료일 정산내역 증빙구분 계산서 발급일자
테스트 출판사 샘플 도서명 100 110 10 2025-12-01 2025-12-15   세금계산서  
테스트 출판사 샘플 도서명 100 110 10 2025-12-04 2025-12-04   세금계산서  
테스트 출판사 샘플 도서명 100 100   2025-12-05 2025-12-05   계산서  
테스트 출판사 샘플 도서명 100 103 3 2025-12-09 2025-12-09   외주  

 

하지만 일이 들어 올 때 마다 작업 일정을 구글 스프레드와 캘린더에 등록하기 귀찮아요.

구글 스프레드에만 등록하면 자동으로 캘린더에 등록되면 얼마나 좋을까?

마침 구글 App Script라는게 있어 AI를 이용해 만들어 봤습니다.

스프레드 시트에 등록한 출판사명 + 도서명을 캘린더 일정 제목으로 하고, 완료일에 일정을 등록하도록 하는 App Script입니다.

복잡한 기능이 아니라 1시간도 되지 않아 앱을 만들었어요.

AI와 대화는 이런걸 만들어줘, 이 기능을 추가해줘, 이렇게 수정해줘 등등 대화 형태로 진행을 했지만, 대화 과정을 모두 보여드릴 필요는 없겠지요?

최종 결과물을 AI 프롬프트로 다시 정리해 보여드립니다.

이 내용에서 필요한 부분만 수정하면 저와 시트 모양이 다르더라도 일정 관리 앱스크립트를 만들 수 있어요.

 

예를 들어, 데이터 시작 셀을 A5열로 잡았는데 내가 작성한 시트는 A10열 부터 시작을 할 수 있을거예요.

저는 출판사와 책 제목을 캘린더 일정 이름으로 표시했지만, 할일 번호와 할일 제목이 될 수 있겠지요.

 

당신은 Google Apps Script(GAS) 전문가입니다.
Google Sheets의 데이터를 읽어 Google Calendar에 “종일 일정”을 생성하는 스크립트를 작성하세요. 아래 요구사항을 모두 만족하는 최종 코드를 하나의 .gs 파일 형태로 제시하고, 필요한 경우 보조 함수도 함께 작성하세요.

1) 실행 환경/전제
스크립트는 “컨테이너 바운드” Google Sheets(스프레드시트에 연결된 Apps Script)에서 실행됩니다.
사용자가 스프레드시트를 열면 커스텀 메뉴가 자동 생성되어야 합니다.
캘린더는 사용자가 지정한 calendarId로 접근합니다(권한 이슈가 있을 수 있으니 예외 처리/로그 포함).

2) UI 메뉴 요구사항
onOpen(e) 트리거로 메뉴를 추가하세요.
메뉴 이름: 일정 추가
메뉴 항목 텍스트: 캘린더에 추가
메뉴 클릭 시 실행 함수: sheetTOcalendar

3) 시트/데이터 소스 요구사항
현재 활성 스프레드시트를 가져오고, 데이터는 “현재 활성 시트(Active Sheet)”에서 읽습니다.
calendarId는 Total 시트의 B1 셀에서 읽습니다.
Total 시트가 없거나 B1이 비어 있으면 사용자에게 알리고 중단하세요(예: SpreadsheetApp.getUi().alert 또는 throw new Error).
데이터 범위(열 의미)는 다음과 같습니다.

A열(인덱스 0): 책 제목(title)
B열(인덱스 1): 출판사(publisher)
F열(인덱스 5): 마감일(deadline)
G열(인덱스 6): 완료 여부(finished) — 현재 로직에서는 기본적으로 사용하지 않지만, 확장 가능하도록 구조화하세요(예: 옵션 플래그로 “완료면 스킵”을 쉽게 추가 가능).

데이터 시작 행은 5행입니다(즉, A5부터).
데이터의 마지막 행은 안정적으로 계산해야 합니다.
단순히 중간 빈 행이 있어도 아래 데이터가 누락되지 않도록 구현하세요.
getLastRow() 기반으로 처리하되, 실제로 A열/필수 컬럼이 모두 비어 있는 행은 건너뛰도록 하세요.

4) 일정 생성 규칙(핵심)
각 행에 대해 아래 조건을 만족할 때만 캘린더에 종일 일정을 생성합니다.
title과 publisher가 비어있지 않음
deadline이 유효한 날짜임(Date 객체 또는 변환 가능한 값)
일정 제목(title)은 다음 규칙으로 만드세요.
"{책제목} {출판사}"
일정은 “종일 일정(All-day event)”로 생성해야 합니다.

중복 방지 로직:
같은 deadline 날짜에, 같은 일정 제목이 이미 존재하면 생성하지 않습니다.
구현은 getEventsForDay(deadline)로 해당 날짜의 이벤트 목록을 가져와 제목이 동일한 이벤트가 하나라도 있으면 스킵합니다.
처리 결과는 실행 로그에 남겨야 합니다.
예: “이미 추가됨”, “추가함”, “deadline이 유효하지 않아 스킵” 등.

5) 날짜 처리/유효성 검사
deadline 셀 값이 다음 형태일 수 있으니 모두 고려하세요.
Date 객체
문자열(예: 2025-12-31, 2025.12.31 등)
스프레드시트 날짜 직렬값(숫자)
유효하지 않으면 해당 행은 스킵하고 로그를 남기세요.
가능한 경우 문자열/숫자는 Date로 변환을 시도하세요.
시간대 이슈(한국 시간) 가능성을 고려하여, 최소한 “날짜만” 기준으로 종일 일정이 생성되도록 주의하세요.

6) 성능/안전성 요구사항
루프 변수는 반드시 let 또는 const로 선언하세요(전역 변수 금지).
가능한 한 Spreadsheet 호출을 최소화하세요(한 번에 범위를 읽고 메모리에서 처리).
Calendar 호출도 불필요하게 반복하지 않도록 구조를 깔끔하게 작성하세요.
캘린더 ID가 잘못되었거나 캘린더 객체가 null이면 중단하고 사용자/로그에 안내하세요.

7) 사용성(옵션이지만 포함 권장)
처리 완료 후 “몇 건 처리/몇 건 추가/몇 건 스킵” 같은 요약 정보를 alert 또는 로그로 남기세요.
중복 판단 기준을 추후 확장 가능하도록 분리해 주세요(예: isDuplicateEvent_(cal, date, title) 같은 헬퍼 함수).

8) 최종 산출물 형식
최종 답변에는 다음을 포함하세요.
완성된 Apps Script 코드(전체)
코드 사용 방법(어떤 시트를 어떻게 준비하고, 어떤 메뉴를 눌러 실행하는지) 간단히 3~5줄
불필요한 설명은 줄이고, 바로 실행 가능한 수준으로 작성하세요.
300x250
posted by 내.맘.대.로 2025. 12. 14. 10:17

내맘대로의 EPUBGUIDE.NET에서 편집자의 의도를 그대로 살려 전자책을 제작해 드립니다.

종이책의 편집 스타일을 최대한 유지하며, 팝업 주석 처리, 이미지 확대 축소 등 전자책의 장점을 반영하여 전자책을 제작합니다. 탬플릿을 사용하지 않고, 책 한권 한권 고유 스타일을 살리기 때문에 전자책에서도 종이책 디자인을 느낄 수 있습니다.

한국출판문화진흥원의 [텍스트형 전자책 제작 지원 사업] 선정 도서는 ‘제작 난이도별 제작비 산정 기준에 근거하여’ 제작 단가를 산정하고, 일정에 맞춰 제작을 해 드리니 많은 문의 바랍니다.

자세한 내용은 여기로: https://www.epubguide.net/notice/309

오래 전 작성된 글은 현재의 Sigil 버전과 차이가 날 수 있습니다. 등록 일자를 확인 하고 1년 이상 지난 글은 변경된 내용이 있는지 확인하시기 바랍니다.

EPUBGUIDE.NET의 핵심만 모았다. 전자책 편집자를 위한 필독서!

책표지

클릭 편집 탬플릿 제공,

왕초보를 위한
클릭으로 EPUB 만들기

정가 : 9,900원 할인: 8,910원

책표지

기초부터 전자책 제작 실습까지

Sigil 완벽 가이드

정가: 18,000원 할인: 16,200 원

300x250

지구 구름 사진 바탕화면 앱의 프롬프트를 정리해 공개합니다.

바이브 코딩을 통해 앱 개발 전혀 모르는 문송 50대도 이런 앱을 만들 수 있습니다.

진짜 누구나 간단한 프로그램은 AI를 이용해 만들 수 있는 세상이 된 것이지요.

바이브 코딩의 핵심은 '프롬프트'입니다. 내가 원하는 것을 AI에게 정확히 전달하는 능력이 중요합니다.

내가 원하는 것을 글로 정리 할 수 없다면 AI 사용자가 아닌, AI의 노예가 될 거예요.

 

https://www.epubguide.net/695

 

바탕화면 구름사진 EarthWallpaper(Desktop Earth, xplanet) 0.4

http://jikji.duckdns.org:8085/cloud/EarthWallpaper_v0.4.zip 실시간 지구 구름 사진 바탕화면 앱입니다.사용법은 여기 참고하세요.https://www.epubguide.net/692 0.3에서 몇가지 개선사항이 있어 버전업 합니다.- 배경

www.epubguide.net

이 앱의 기본 기능은 다음과 같습니다.

1. 지구 평면 사진, 낮과 밤 사진 2장을 조합해 원형으로 지구를 표현

2. 원형 지구 위에 실시간 구름 사진을 표시(데이터 업데이트 주기가 있어 실제로는 1시간)

3. 위도, 경도를 조절 할 수 있고 확대/축소, 구름사진 설정 등을 조절

4. 정해진 시간에 한 번씩 업데이트를 함. 이때 실제 시간에 맞춰 밤낮을 표현

 

이 앱을 만들기 위한 기본 프롬프트를 정리했습니다.

물론, 이 프롬프트를 넣어서 만들어 달라고 해도 완벽한 상태가 나오지는 않습니다.

이 프롬프트로 기본을 잡고, 앱을 실행시켜 확인하면서 본인이 원하는 기능을 추가해 나가야 합니다.

이 프롬프트를 공부하다 보면, 더 복잡한 프로그램도 AI를 이용해 만들 수 있습니다.

# 역할 부여
당신은 시니어 파이썬 개발자입니다. Windows 환경에서 작동하는 '실시간 3D 지구 배경화면 프로그램'을 제작해야 합니다. 코드는 단일 파일(`desktop_app.py`)로 작성하되, 아래의 요구사항을 완벽하게 준수해야 합니다.

# 프로젝트 개요
- 사용자의 설정(위도, 경도, 줌, 자전축 기울기 등)에 따라 실시간으로 지구 이미지를 렌더링합니다.
- 태양의 위치를 계산하여 낮과 밤의 경계(터미네이터 라인)를 시각화합니다.
- 실시간 구름 위성 사진을 합성하고, Windows 바탕화면으로 지정합니다.
- 시스템 트레이에 상주하며 백그라운드에서 주기적으로 배경화면을 업데이트합니다.

# 기술 스택 (필수)
- 언어: Python 3.9+
- GUI: PyQt6 (모든 UI 구성)
- 이미지 처리: Pillow (PIL), Numpy (고속 연산 및 매트릭스 처리 필수)
- 천문 계산: ephem (태양 위치), 없을 경우 수식으로 대체하는 예외 처리 포함
- 네트워크: requests (구름 이미지 다운로드)
- 시스템 제어: ctypes (배경화면 변경), winreg (레지스트리 조작)

# 상세 기능 요구사항

1. **천체 및 위치 계산 (CelestialCalculator)**
   - `ephem` 라이브러리를 사용하여 현재 태양의 적경/적위를 계산하고 지구상의 위도/경도로 변환하세요. (라이브러리 없을 시 에러 처리 포함)
   - `http://api.open-notify.org/iss-now.json` API를 통해 국제우주정거장(ISS)의 현재 위치를 가져오세요.

2. **3D 지구 렌더링 엔진 (EarthRenderer)**
   - **핵심 로직:** Numpy와 PIL을 사용하여 Orthographic Projection(정사영) 방식으로 2D 지도를 3D 구체로 매핑하세요.
   - **텍스처:** 낮 지도(월별 분리 `m01.jpg`~), 밤 지도(`night.jpg`), 구름 지도, 스펙큘러 맵(반사광)을 합성해야 합니다.
   - **쉐이딩:** 태양의 위치에 따라 낮/밤 영역을 블렌딩하고, 바다 영역에 태양 반사광(Specular Highlight)을 추가하세요.
   - **대기 효과:** 지구 테두리에 푸른 대기 효과(Atmosphere glow)를 그리세요.
   - **별 배경:** 배경에 별(`stars.jpg`)을 그리고, 지구의 위치에 따라 배경이 이동(Parallax)하도록 구현하세요.

3. **구름 업데이트 스레드 (CloudUpdateWorker)**
   - `QThread`를 상속받아 GUI 멈춤 없이 백그라운드에서 구름 이미지를 다운로드하세요.
   - 소스 선택 기능: SSEC API 방식과 직접 URL(`http://.../clouds.jpg`) 방식을 지원해야 합니다.

4. **GUI 구성 (EarthWallpaperApp)**
   - **메인 윈도우:** - 좌측: 현재 렌더링된 지구를 보여주는 미리보기 창 (창 크기에 맞춰 비율 유지 리사이징 `ResizeLabel`).
     - 우측: 설정 패널 (위도, 경도, 줌, 구름 투명도/선명도, 자전축 슬라이더).
     - 옵션: 배경화면 배치 방식(채우기, 맞춤, 확대 등 콤보박스), 업데이트 주기, 시작 프로그램 등록 체크박스.
   - **시스템 트레이:** 프로그램을 닫아도 트레이로 최소화되며, 우클릭 메뉴(열기, 종료)를 지원하세요.

5. **시스템 통합**
   - **배경화면 적용:** `ctypes.windll.user32.SystemParametersInfoW`를 사용해 렌더링된 이미지를 바탕화면으로 설정하세요.
   - **레지스트리 수정:** `winreg`를 사용하여 사용자가 선택한 배경화면 배치 스타일(Tile, Stretch, Fit 등)을 Windows 레지스트리에 반영하세요.
   - **설정 저장:** 모든 설정값(위/경도, API 키 등)은 `config.json`에 저장하고 불러오세요.

# 예외 처리 및 자산 생성
- 필요한 이미지 폴더(`earth`, `assets`)가 없으면 자동 생성하세요.
- `stars.jpg`가 없으면 PIL을 이용해 검은 배경에 랜덤한 흰 점을 찍어 임시 별 이미지를 생성하는 코드를 포함하세요.
- `ephem` 모듈이 없어도 프로그램이 죽지 않고 근사치 계산으로 동작하게 하세요.

위 명세를 바탕으로 실행 가능한 전체 파이썬 코드를 작성해 주세요.
300x250
posted by 내.맘.대.로 2024. 2. 19. 08:52

내맘대로의 EPUBGUIDE.NET에서 편집자의 의도를 그대로 살려 전자책을 제작해 드립니다.

종이책의 편집 스타일을 최대한 유지하며, 팝업 주석 처리, 이미지 확대 축소 등 전자책의 장점을 반영하여 전자책을 제작합니다. 탬플릿을 사용하지 않고, 책 한권 한권 고유 스타일을 살리기 때문에 전자책에서도 종이책 디자인을 느낄 수 있습니다.

한국출판문화진흥원의 [텍스트형 전자책 제작 지원 사업] 선정 도서는 ‘제작 난이도별 제작비 산정 기준에 근거하여’ 제작 단가를 산정하고, 일정에 맞춰 제작을 해 드리니 많은 문의 바랍니다.

자세한 내용은 여기로: https://www.epubguide.net/notice/309

오래 전 작성된 글은 현재의 Sigil 버전과 차이가 날 수 있습니다. 등록 일자를 확인 하고 1년 이상 지난 글은 변경된 내용이 있는지 확인하시기 바랍니다.

EPUBGUIDE.NET의 핵심만 모았다. 전자책 편집자를 위한 필독서!

책표지

클릭 편집 탬플릿 제공,

왕초보를 위한
클릭으로 EPUB 만들기

정가 : 9,900원 할인: 8,910원

책표지

기초부터 전자책 제작 실습까지

Sigil 완벽 가이드

정가: 18,000원 할인: 16,200 원

300x250

1월부터 3월까지 전자책 제작자는 비수기에요.

그래서 한달에 3주 정도 노는것 같네요.

어제도 일이 없어 그동안 머리로 구상만 하던 것을 만들어 봤습니다.

저처럼 외주 작업을 하며 작업 일정을 관리하는 분들에게 도움이 될 것 같아 전체 과정을 공개합니다.

AI가 없었다면 포기했을 일인데 AI의 도움을 받으니 처음 써 보는 Appscript도 만들 수 있네요.

몇십줄 짜리 간단한 코드를 하루 종일 만들었으니 쉬운 작업은 아닙니다.

처음엔 셀에 있는 날짜와 책제목만 넣으면 되니 코드 몇줄이면 되겠지 했는데,

만들다 보니 추가할 내용들이 계속 생기더라구요.

이 작업을 전부 AI의 도움을 받아 만들어 봤습니다. AI한테 과장 좀 섞어 1000번 쯤 질문을 한 것 같아요.

1. 기본 작업 - 내가 원하는 것을 내가 제대로 이해하기

제가 올린 게시글에 가장 많이 쓴 내용이, [질문을 하려면, 뭘 질문하려는지 이해해야 한다]입니다. 질문자가 원하는걸 모르면 알려주고 싶어도 알려줄 수 없지요.

내가 원하는걸 내가 모르면 AI도 알려줄 수 없습니다.

내가 원하는건, 아래 스프레드 시트를 구글 캘린더 일정에 넣는거예요.

-처음인 이런거라고 생각을 했지요. 조금 지나, 내가 원하는 게 뭔지 모르고 있었구나 하고 깨달았지만...

어째든 첫 단계는 구글 캘린더와 연동할 스프레드 시트를 만드는 것입니다.

제 작업 일정은 이렇게 되어 있습니다.

이제 질문을 던질 AI를 정해야 하는데, 구글 스프레드와 캘린더를 사용하다 보니 구글 Bard를 쓰기로 했습니다.

ChatGPT와 비교를 해 봤는데 Bard가 더 잘 설명해 줬어요.

연동할 시트 만들고, AI를 정했으니 준비는 끝났습니다.

2. AI에게 내가 알고싶어 하는 것 질문하기

첫 번째 질문은 아래와 같습니다.

[구글 docs 스프레드에 있는 내용을 구글 캘린더와 연동하고 싶어.]

이렇게 질문을 던지니 코드를 알려줍니다.

하지만 이 코드를 보고, 내가 질문을 잘못했구나 하고 깨달았어요.

Bard는 이런 상황에서 작동하는 코드를 만들어 주더라고요.

제목: [일정 제목]

시작일: [시작일]

종료일: [종료일]

시간: [시간]

설명: [설명]

물론, 스프레드와 캘린더를 연동하는 기본적인 방법을 잘 알려줬습니다.

AppScript를 어떻게 여는지, 캘린더에 넣기 위해 캘린더가 필요하고 캘린더 ID를 가져와야 한다는 등...

2. AI에게 보다 구체적으로 요구사항 말하기.

그래서 구체적으로 원하는 것을 정리했습니다. 이런 작업을 프롬프트 엔지니어링이라고 해요.

[구글 스프레드에 있는 여러 행과 열로 된 목록 일정을 캘린더에 자동으로 추가하는 appscript 만들고 싶어. 각 열에는 타이틀, 날짜가 들어가고 종일 일정으로 추가할거야]

이번엔 잘 넣었다고 생각했는데,

내용
A
일정 제목
B
날짜

이런 행열로 된 코드를 알려줍니다.

그래서 더 구체적으로...

[구글 스프레드에 있는 여러 행과 열로 된 목록 일정을 캘린더에 자동으로 추가하는 appscript 만들고 싶어. A열에는 타이틀, B열에는 날짜가 들어가고 종일 일정으로 추가할거야]

이렇게 질문을 하니 원하는게 나왔습니다.

이번엔 2개를 알려줬어요. 하나는 질문에 딱 맞는 내용으로.

A
B
일정1
2023-08-01
일정2
2023-08-02
일정3
2023-08-03

다른 하나는 AI가 알아서 업그레이드 한 내용으로

제목
시작일
종료일
일정1
2023-08-01
2023-08-01
일정2
2023-08-02
2023-08-02
일정3
2023-08-03
2023-08-03

이 질문으로 얻은 코드를 내 작업 일정표에 맞게 수정을 해서 실행하니 스프레드 시트의 내용이 캘린더에 들어가는 마법같은 일이 벌어지더라구요.

여기서 끝~~~

이었으면 하루 종일 걸리지 않았겠지요 ㅜ.ㅜ

이번에도 내가 원하는 게 뭔지 몰라 생긴 일입니다.

3. 내가 진짜로 원하는 건 나도 몰랐지만 더 복잡한 것이었다.

저렇게 하고 일정을 추가해 보니 잘 되었습니다.

그런데, 일정 추가할 때 마다 범위를 다시 지정할 수는 없잖아요.

그래서 범위를 수정했어요.

내용이 들어있는 A1: B10을 지정했을 때 잘 되던게

내용이 없는, 앞으로 들아갈 가능성이 있는 범위까지 확대를 했지요.

A1:B30

이렇게 했더니 무슨 오류가 생기네요.

오류 내용을 잘 읽어봤습니다. B열에는 날짜가 들어가야 하는데, 날짜가 아닌 다른 내용이라는 거예요.

아무 것도 없으니 문제가 안된다 생각했는데, 다시 생각해 보니 아무 것도 없는 데이터도 데이터더라구요.

그래서 내가 원하는 것을 다시 정리해 봤습니다.

1. 스프레드 시트의 내용을 구글 캘린더에 자동으로 추가

2. A열은 이벤트 제목, B열은 날짜

3. 열의 길이는 최대 100개 (A1:B100)

4. B열은 순차적으로 들어가고, 중간에 빈 열은 존재하지 않음

5. A1:B100 범위에서 B열이 비어있는 부분 전까지 자동으로 범위 설정

이렇게 정리하고 나니, 앞에서 얻은 코드에 5번이 빠져있네요.

그래서 이렇게 질문을 했습니다.

[이 코드에서 var sheetDate = spreadsheet.getRange("A5:G100").getValues(); 이 부분을 실제 값이 있는 영역으로 자동 설정되도록 수정하고 싶어]

[이 코드]는 Bard가 알려준 내용을 바탕으로 제가 만든 시트에 작동하도록 수정한거예요.

이걸 먼저 Bard에게 알려준 후 이렇게 질문을 했지요.

그러니 역시 답을 줍니다.

받은 코드를 그대로 넣으니, 이게 잘 작동하네요.

여기서 끝~~

난줄 알았는데, 아직도 내가 '진짜로' 원하는 것을을 다 알아내지 못했습니다.

4. 빠진 부분을 추가로 질문하기

앱스크립트를 1번, 2번, 3번 반복해서 실행했을 때 문제가 되는거예요.

여기까지 얻은걸 한번에 정리하려고 하면, A4 한장도 넘게 나올거예요. 그래서 단계별로 작업하기로 했습니다.

다시 원하는 내용을 목록으로 작성을 합니다.

1. 스프레드 시트의 내용을 구글 캘린더에 자동으로 추가

2. A열은 이벤트 제목, B열은 날짜

3. 열의 길이는 최대 100개 (A1:B100)

4. B열은 순차적으로 들어가고, 중간에 빈 열은 존재하지 않음

5. A1:B100 범위에서 B열이 비어있는 부분 전까지 자동으로 범위 설정

6. 캘린더에 추가한 일정은 다시 등록되지 않아야 한다.

6-1 이를 위해 B열에 지정한 날짜의 일정을 알아야 한다.

6-2 종일 일정으로 등록하니, 종일 일정 목록만 알면 된다.

6-3 일정 제목은 출판사+책제목이기 때문에 똑같은 일정 제목은 없다.

6-4 일정을 추가하기 전에 A열의 출판사+책제목이 6-1에서 얻은 출판사+책제목과 비교해 같으면 추가에서 제외한다.

6-5 6-2에서 같은 일정이 발견되지 않으면 캘린더에 추가한다.

6-6 종일 일정이 없는 날이면 6-1~6-5 과정 없이 바로 추가한다.

** 남은 작업이 6번이라 6번만 구체적으로 정리했을 뿐, 1~5도 6번처럼 구체적으로 정리하면 각 항목 별로 여러 줄이 나오게 됩니다. 이걸 잘 정리해야 Bard가 진짜 잘 작동하는 코드를 알려줘요.

이렇게 정리한 후 하나씩 추가를 했습니다.

요구사항이 복잡해지면 논리적인 오류가 발생합니다. 논리적 오류가 발생하면 제대로 된 결과물을 얻을 수 없지요.

그래서 요구 사항을 하나씩 추가하기로 했습니다.

이 과정은 1~5번 코드를 짠 곳이 아닌, 새로운 파일을 만들어서 작업했어요.

만들어 놓은거 망가지면... 다시 복구할 능력이 안되니까 ㅜ.ㅜ

먼저 캘린더에서 종일 일정 제목을 불러오는 코드를 알려달라고 하고,

캘린더 일정 제목과 A열 제목을 비교하는 코드를 추가해 달라고 합니다.

제목이 같으면 캘린더에 일정을 등록하지 않도록 코드를 수정해 달라고 합니다.

이렇게 해서 만든 결과물을 1-5 코드와 합쳐달라고 합니다.

물론, 질문이 한번에 완성된건 아니에요.

질문을 어떻게 하느냐에 따라 결과물이 달라지고,

1~5 코드와 연동할 수 없는 결과물이 많이 나옵니다.

1~5 코드와 연동할 수 있는 결과물이 나오도록 질문을 잘 해야돼요.

이 부분을 추가하기 위해 질문을 과장 없이 100번쯤 다시 한 것 같아요.

최종 결과물을 얻어낸 후, 처음 던진 질문을 보니 내가 참 한심하다는 생각이 들더라구요.

내가 원하는 것이 스프레드의 데이터를 바탕으로 캘린더에 일정을 추가하는 것이라 생각했는데

사실은

1. 스프레드의 데이터를 바탕으로 캘린더에 일정을 추가하는데

2. 스프레드 시트의 특정 열은 일정 제목, 다른 열은 일정 날짜로 되어 있고

3. 데이터 범위는 앞으로 데이터를 넣을 곳 까지 지정해야 하지만

4. 데이터가 들어간 부분까지 자동으로 다시 범위가 지정되야 하며

5. 스프레드에 있는 내용 중 캘린더에 추가한 내용은 다시 추가하면 안된다.

라는 길고 복잡한 것이었지요.

그래서 AI에게 질문을 던지는 단순해 보이는 작업이 [프롬프트 엔지니어링]이라는 분야로 탄생한게 아닐까 싶어요.

아직 끝난게 아니에요.

5. 메뉴로 추가하기

일정 추가할 때 마다 앱스크립트로 들어갈 수는 없잖아요.

그래서 메뉴를 추가해야 합니다.

Bard에게 앱스크립트를 메뉴에 추가하고 싶다고 하니 코드를 알려주네요.

이건 좀 간단했어요.

이게 어제 하루 종일 한 일입니다.

개발자에게는 아주 간단한 일이겠지만, 개발을 해 보지 않은 왕초보에게는 하루 종일 걸리는 일.

그래도 AI가 있으니 하루 종일이지 AI의 도움이 없었다면 불가능했을 일이지요.

그런데...

다시 생각해 보니 내가 원하는건 종일 일정이 아니었네요 ㅜ.ㅜ

다 만들어 놓고 보니 진짜 원하는 게 뭔지 보이네요.

할 일로 등록을 해야하고(날짜가 지나도 안한건 표시되야 하니),

제작을 완료하면 '한 일'로 바뀌어야 하고,

[일정 추가] 버튼을 누르지 않아도 셀에 값이 들어가면 즉시 일정에 추가되야 하고.....

셀 구조가 바뀌어도-A열에 있던 책제목을 C열로 옮긴다던지...- 스크립트는 바꿀 필요가 없어야 하고

생각을 하다 보니 끝이 없겠다 싶어서,

진짜로

여기서 끝~~

ps. 저처럼 엑셀로 일정 관리하며 캘린더와 연동시키고 싶은 분이 있을까 싶어 코드 공개합니다.

내가(아닌 AI가) 만들었지만, 다시 봐도 뭔 내용인지 모르겠네요 ㅡ.ㅡ;;

첨부파일
sheetTOcalendar.txt
null파일 다운로드

등록한 일정을 보지 않으면 아무 소용 없잖아요.

안쓰는 구닥다리 스마트폰을 구글 캘린더와 연동해 모니터 앞에 뒀어요.

이렇게 하면 놓칠 일이 없겠지요?

300x250