엑셀로 gemini에게 질문하기
2024-07-20 15:59:05
gemini는 챗GPT, 클로드에 비해 아주 저렴합니다. api를 이용하여 질문하고 답변을 받는 엑셀을 만들어 보겠습니다.
gemini api-key
제이나이 키를 받습니다.
엑셀을 실행하고 Alt+F11을 눌러 VBA 편집기를 실행합니다. 삽입/모듈 메뉴를 선택하고 아래 코드를 붙여넣습니다.
apiKey = "YOUR_API_KEY"에는 위에서 복사한 API-Key를 붙여 넣습니다.
엑셀로 다시 돌아와서 B2 셀에다가 질문을 입력합니다.
Alt+F8을 눌러 실행하면 위와 같이 답변을 확인 가능합니다.
' ThisWorkbook 모듈에 다음 코드를 추가합니다Private Sub Workbook_Open()
' 워크시트 이벤트를 활성화합니다 Application.EnableEvents = True
End Sub
' Sheet1 모듈 (B2 셀이 있는 워크시트)에 다음 코드를 추가합니다Private Sub Worksheet_Change(ByVal Target As Range)
' B2 셀이 변경되었는지 확인합니다 If Target.Address = "$B$2" Then
' 엔터 키를 눌렀는지 확인합니다 If Len(Target.Value) > 0 And Target.Value <> vbNullString Then
Call GetGeminiResponse End If
End IfEnd Sub
' 모듈에 다음 코드를 넣습니다 (기존 GetGeminiResponse 서브루틴을 대체합니다)
Sub GetGeminiResponse() Dim xhr As Object
Dim url As String Dim requestBody As String
Dim apiKey As String Dim response As String
' API 키를 여기에 입력하세요
apiKey = "YOUR_API_KEY"
' URL 설정 url = "https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash-latest:generateContent?key=" & apiKey
' 요청 본문 생성
requestBody = "{""contents"":[{""parts"":[{""text"":""" & Replace(ThisWorkbook.Sheets("Sheet1").Range("B2").Value, """", "\""") & """}]}]}"
' XMLHttpRequest 객체 생성 Set xhr = CreateObject("MSXML2.ServerXMLHTTP")
' 상태 메시지 표시
ThisWorkbook.Sheets("Sheet1").Range("B3").Value = "요청 처리 중..."
' 요청 보내기 On Error GoTo ErrorHandler
With xhr .Open "POST", url, False
.setRequestHeader "Content-Type", "application/json" .send requestBody
' 응답 받기
If .Status = 200 Then response = .responseText
' JSON 파싱 (간단한 방식)
Dim startPos As Long, endPos As Long startPos = InStr(response, """text"": """) + 9
endPos = InStr(startPos, response, """") - 1
' 결과를 B3 셀에 출력 ThisWorkbook.Sheets("Sheet1").Range("B3").Value = Mid(response, startPos, endPos - startPos + 1)
Else ThisWorkbook.Sheets("Sheet1").Range("B3").Value = "Error: " & .Status & " " & .statusText
End If End With
Set xhr = Nothing
Exit Sub
ErrorHandler: ThisWorkbook.Sheets("Sheet1").Range("B3").Value = "Error: " & Err.Description
Set xhr = NothingEnd Sub