본문 바로가기

💻 개발IT/Infra

[Firebase Firestore] 엑셀 내보내기

이번에 개발하는 서비스는

사전 데이터 입력이 매우 많아

Firebase 사이트에서 데이터를 한땀한땀 넣고 있었다..🥲

 

속으로 토를 몇 번 하고

원치 않게 지금까지 살면서 수치스러웠던 일들이 문득 떠올라

하나하나 후회와 함께 이불킥을 하다보니

이렇게 하면 안 되겠다는 생각이 들었다. 

 

 

찾아보니 역시나 나 같은 사람들이 한 둘이 아니었다ㅎ

 

정신 건강을 위해

입력했던 데이터를 엑셀로 내보내고

엑셀로 입력하는 과정을 진행하고자 하고

이 글에서는 엑셀 내보내는 방법을 적고자 한다. 

 

 

구글 시트 생성

구글 시트에 들어가 새 파일을 생성한다. 

 

https://docs.google.com/spreadsheets/u/0/

 

Facebook에 로그인

Notice 계속하려면 로그인해주세요.

www.facebook.com

 

 

Apps Script 실행

새로 생성한 시트 상단의

확장 프로그램 → Apps Script 메뉴를 클릭한다.

 

 

Firestore 라이브러리 추가

 

좌측 메뉴에서 라이브러리 우측의 + 버튼을 클릭한다. 

 

스크립트 ID에 

1VUSl4b1r1eoNcRWotZM3e87ygkxvXltOgyDZhixqncz9lQ3MjfT1iKFw

입력하고 [조회] 버튼을 클릭 후 [추가] 버튼을 클릭한다.

 

상단의 실행 버튼을 클릭하면 아래와 같은 팝업이 나타난다.

[권한 검토] 클릭 후 구글 로그인을 진행하고 접근 허용 해준다.

 

 

구글 시트 API 서비스 추가 

좌측 메뉴의 [서비스] 우측의 + 버튼을 클릭한다. 

 

목록 중 Google Sheets API를 클릭하고 [추가] 버튼을 누른다. 

 

 

코드 작성

function getFirestore() {
  var email = "client_email"
  var key = "private_key"
  var projectId = "project_id"
  return FirestoreApp.getFirestore(email, key, projectId)
}

function myFunction() {
  const firestore = getFirestore()
  var activeSheet = SpreadsheetApp.getActiveSpreadsheet()
  var sheet = activeSheet.getActiveSheet() 

  const allDocuments = firestore.getDocuments("Collection명")
  for(var i = 0; i < allDocuments.length; i++) {
    var myArr = []
    var question = allDocuments[i].fields["필드명1"]
    myArr.push(question.stringValue)

    var description = allDocuments[i].fields["필드명2"]
    myArr.push(description.stringValue)

    sheet.appendRow(myArr)
  }
}

Firebase 프로젝트에 접속한 뒤 

좌측 상단에서 설정 아이콘 선택 후 [프로젝트 설정] 클릭한다.

 

[서비스 계정] 메뉴에서 좌측 중앙에 [서비스 계정 n개] 클릭하면 구글 클라우드 사이트에 접속된다.

 

좌측 [서비스 계정] 메뉴를 클릭하고

목록에 나오는 이메일을 클릭한다. 

 

상단의 [키] 메뉴에서 [키 추가] 버튼을 누른 후 json으로 다운받고

파일에서 [project_id], [private_key], [client_email] 값을 복사하고 코드에 입력한다. 

 

실행

다시 Apps Script 사이트로 돌아와서 myFunction 선택 후 [실행] 버튼을 누른다.

 

시트로 돌아가보면 데이터가 엑셀에 들어가있는 것을 확인할 수 있다. 

 

 

 

(추가) 만약 Array 데이터가 있을 경우

 

테스트 데이터를 만드는 경우

위의 코드 myFunction에서 for 문 안에만 추가해주면 된다.

 

for(var i = 0; i < allDocuments.length; i++) {
    var myArr = []
    
    // 이 부분을 추가해주면 된다 (시작)
    const arrField = allDocuments[i].fields["필드명"].arrayValue.values

    for(var j = 0; j < arr.length; j++) {
      myArr.push(arr[j].stringValue)
    }
    // (끝)
    
    sheet.appendRow(myArr)
}

 

반응형