주제
: Apps Script에서 getCellData로 실행했을때 발생한 error와 해결한 방법 :
웹에서,,,동일한 문제는 아니지만, 비슷한 형태의 문제를 이렇게 해결하는 것을 보고 시도해봄...(저는 무식한 하드웨어 엔지니어라서..ㅋ)
발생된 Error
변경전 코드 :
function getCellData(e) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheetName = e.parameter.sheetName || "Sheet1"; // URL 파라미터에서 sheetName 읽기
var cellRange = e.parameter.range || "A1"; // URL 파라미터에서 range 읽기
var sheet = ss.getSheetByName(sheetName);
if (!sheet) {
return ContentService.createTextOutput(JSON.stringify({"error": "Sheet not found: " + sheetName}))
.setMimeType(ContentService.MimeType.JSON);
}
var value = sheet.getRange(cellRange).getValue();
return ContentService.createTextOutput(JSON.stringify({"value": value}))
.setMimeType(ContentService.MimeType.JSON);
}
변경후 코드
function getCellData(e) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheetName = e?.parameter.sheetName || "Sheet1"; // URL 파라미터에서 sheetName 읽기
var cellRange = e?.parameter.range || "A1"; // URL 파라미터에서 range 읽기
var sheet = ss.getSheetByName(sheetName);
if (!sheet) {
return ContentService.createTextOutput(JSON.stringify({"error": "Sheet not found: " + sheetName}))
.setMimeType(ContentService.MimeType.JSON);
}
var value = sheet.getRange(cellRange).getValue();
return ContentService.createTextOutput(JSON.stringify({"value": value}))
.setMimeType(ContentService.MimeType.JSON);
}
Gemini 에게 한번 물어봄...
나의 질문 :
var sheetName = e?.parameter.sheetName
var cellRange = e?.parameter.range 이렇게 수정하니깐. error가 안생기는데 사용해도 돼?
Gemii 답변 :
네, var sheetName = e?.parameter.sheetName 및 var cellRange = e?.parameter.range와 같이 수정하신 코드는 오류를 방지하는 데 도움이 될 수 있으며 사용해도 괜찮습니다.
JavaScript의 Optional Chaining (?.) 연산자는 다음과 같은 역할을 합니다.
- e?.parameter: e 객체가 null 또는 undefined인 경우, 이 표현식은 즉시 undefined를 반환하고, 그 뒤의 parameter 속성에 접근하려는 시도를 하지 않습니다.
- e?.parameter.sheetName: e가 null 또는 undefined이거나, e.parameter가 null 또는 undefined인 경우, 이 표현식은 undefined를 반환합니다. 그렇지 않으면 e.parameter.sheetName의 값을 반환합니다.
이렇게 수정하면 어떤 장점이 있을까요?
- TypeError 방지: 이전에는 e 객체에 parameter 속성이 없는 경우 (undefined인 경우) e.parameter.sheetName에 접근하려다 TypeError가 발생했습니다. Optional Chaining을 사용하면 e 또는 e.parameter가 undefined일 때 안전하게 undefined를 반환하므로 오류를 방지할 수 있습니다.
- 더욱 안전한 코드: 웹 앱 URL 호출 시 sheetName이나 range 파라미터가 누락되더라도 스크립트가 중단되지 않고 sheetName과 cellRange 변수에 undefined가 할당됩니다. 이후에 이 값들을 처리하는 로직 (예: 기본값 사용)을 추가할 수 있습니다.
주의할 점:
- undefined 처리: sheetName이나 cellRange가 undefined가 될 수 있다는 점을 고려하여 이후 코드에서 이 값들을 적절하게 처리해야 합니다. 예를 들어, 시트 이름이나 셀 범위가 제공되지 않았을 때 기본값을 사용하거나, 오류 메시지를 반환하는 등의 로직을 추가할 수 있습니다.
---일단 사용해 보는걸로..
'AI를 이용한 프로그램 만들기' 카테고리의 다른 글
파이썬 코드 실행 과정 (파이썬 기초) (2) | 2025.05.09 |
---|---|
AI를 활용한 파이썬 프로그래밍: 효과적인 질문법과 단계별 가이드 (예제 포함) (4) | 2025.05.09 |
파이썬 소스 코드, 어떻게 작동될까요? 자세히 알아봅시다! (2) | 2025.05.09 |
AI를 이용한 파이썬으로 구글 스프레드 시트에 연결하는 프로그램 만들기 1 (29) | 2025.04.17 |
TypeError: Cannot read properties of null (reading 'getDataRange') (2) | 2025.04.17 |