본문 바로가기
카테고리 없음

구글 스프레드시트 Gemini API 셀 참조 문제 정리

by 퍼포먼스마케팅코더 2024. 1. 29.
반응형

구글 스프레드 시트 사용 시 셀 참조 문제 정리

 


1. 셀 참조 문제: Google Sheets의 사용자 정의 함수에서는 셀 참조를 문자열 형태로만 전달할 수 있습니다. 예를 들어, `=gemini("질문", A1)`와 같은 형태는 작동하지 않으며, `=gemini("질문", "A1")`처럼 셀 참조를 문자열로 처리해야 정상 작동합니다.

2. 보완 방법 :
    - 명령 테스트: 기본 역할과 지시사항을 명시. 예: "다음 내용의 주제를 적어주세요:"
    - 입력 테스트: 역할 및 지시사항에 맞는 작업 내용을 기록.
    - 문자열 합침: 명령과 입력 문자열을 `&`를 사용하여 합침.
    - Gemini 답변: 합쳐진 최종 명령과 입력 텍스트 문자열을 Gemini 함수에 전달하여 답변을 받고, 이를 최종 결과로 사용.

 

 

아래는 Gemini API에 사용된 앱스크립트, 아래의 앱스크립트를 써서 =gemini(G1) 와 같이 쓰면 해결된다. API 키는 Get API key | Google AI Studio 의 홈페이지에서 생성해서 아래에 key=YOUR_API_KEY 영역에 복사해서 붙여 넣으면 됨.

/**
 * 주어진 스프레드시트에서 특정 범위의 셀 값을 가져옵니다.
 * @param {string} 스프레드시트ID - 값을 가져올 스프레드시트의 고유 ID.
 * @param {string} 시트 - 인자값
 * @return {string[][]} 셀 값 배열.
 */


function gemini(inputText) {
  var url = "https://generativelanguage.googleapis.com/v1beta/models/gemini-pro:generateContent?key=YOUR_API_KEY";

  //var cellReferenceStr = cellReference.toString();

  //Logger.log(cellReferenceStr);

  //var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  //var sheet = spreadsheet.getActiveSheet();

  //var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // 현재 활성 시트를 가져옵니다.

  // 셀 값을 가져옵니다.
  //var cellValue = sheet.getRange(cellReference).getValues();

  // 범위 데이터를 inputText와 결합
  var combinedText = inputText //+ " " + cellValue;

  var payload = {
    contents: [
      {
        parts: [
          {
            text: combinedText
          }
        ]
      }
    ]
  };

  var options = {
    method: 'post',
    contentType: 'application/json',
    payload: JSON.stringify(payload),
    muteHttpExceptions: true
  };

  var response = UrlFetchApp.fetch(url, options);
  var responseText = response.getContentText();

  // JSON 응답을 파싱
  var jsonResponse = JSON.parse(responseText);

  // 원하는 'text' 부분 추출
  var extractedText = jsonResponse.candidates[0].content.parts.map(function(part) {
    return part.text;
  }).join("\n");

  // 추출된 텍스트를 로그로 출력
  Logger.log(extractedText);

  return extractedText;
}

 

반응형

댓글