TypeError: Cannot read properties of undefined (reading parameter')getCellData
본문 바로가기
AI를 이용한 프로그램 만들기

TypeError: Cannot read properties of undefined (reading parameter')getCellData

by 쌩양파 2025. 4. 17.

주제

: Apps Script에서 getCellData로 실행했을때 발생한 error와 해결한 방법 : 

웹에서,,,동일한 문제는 아니지만, 비슷한 형태의 문제를 이렇게 해결하는 것을 보고 시도해봄...(저는 무식한 하드웨어 엔지니어라서..ㅋ)

 

발생된 Error

getCellData 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가 될 수 있다는 점을 고려하여 이후 코드에서 이 값들을 적절하게 처리해야 합니다. 예를 들어, 시트 이름이나 셀 범위가 제공되지 않았을 때 기본값을 사용하거나, 오류 메시지를 반환하는 등의 로직을 추가할 수 있습니다.

---일단 사용해 보는걸로..