NodeJS 返回 Firestore 响应并发送到 Google Spread Sheet

NodeJS returning a Firestore response and sending to Google Spread Sheet

我正在将电子表格中的数据与 Firebase 集合进行比较。 当数据相等时,它带来了答案。如何将此答案放入另一个 google 电子表格?

我正在尝试这种方式,但无法在工作表中输入值。

import * as functions from 'firebase-functions'
import { google } from 'googleapis'
import { initializeApp } from 'firebase-admin/app'
const serviceAccount = require('../sheets_updater_service_account.json')
const sheets = google.sheets('v4')
import { getFirestore } from "firebase-admin/firestore"
initializeApp()
const firestore = getFirestore()


module.exports.readAndUpdateAdministrativeSheet = functions.https.onRequest(async (request, response) => {

    // =========================== AUTENTICAÇÃO FIREBASE ===================================
    const jwtClient = new google.auth.JWT({
        email: serviceAccount.client_email,
        key: serviceAccount.private_key,
        scopes: ['https://www.googleapis.com/auth/spreadsheets']
    })

    await jwtClient.authorize()


    // ================= CONEXÃO COM A PLANILHA CRIAÇÃO DE FILTROS =========================
    const { data } = await sheets.spreadsheets.values.get({
        auth: jwtClient,
        spreadsheetId: 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',
        range: `Listagem de pagamento!A2:X6`,
    })

    // ========= CRIAÇÃO DE BANCO DE DADOS DA COLEÇÃO LISTAGEM DE PAGAMENTO ================
    const generateDuplicities = data.values!.map(async row => {
        const [idade, nome, cpf, cpf_x, numeroRequerimento, arbitramentoHonorários,
            valorArbitrado, valorDeferido, valorComplementar, status, resultado, codigoBanco,
            banco, agencia, conta, dataDoRequerimento, dataRequerimento, dataStatus,
            comarca, vara, ato, assistidos, email, telefone] = row
        firestore.collection("Listagem de pagamento").doc(numeroRequerimento).set({
            idade, nome, cpf, cpf_x, numeroRequerimento, arbitramentoHonorários,
            valorArbitrado, valorDeferido, valorComplementar, status, resultado, codigoBanco,
            banco, agencia, conta, dataDoRequerimento, dataRequerimento, dataStatus, comarca, vara, ato,
            assistidos, email, telefone
        })
        const resultduplicitiesWithJudicialCharges = firestore.collection("Processos judiciais").where("documentosDosautores", "==", cpf)  
        const duplicitiesWithJudicialCharges = new Array()

        resultduplicitiesWithJudicialCharges.get().then((querySnapshot) => {
            querySnapshot.forEach((parentDoc) => {
                //functions.logger.log(parentDoc.id, " => ", parentDoc.data())
                parentDoc.ref.collection("fee-arbitrations - Base de Execução").where('arbitramentoDeHonoráriosBE', '==', arbitramentoHonorários).get().then((querySnapshot) => {
                    querySnapshot.forEach((childDoc) => {
                        duplicitiesWithJudicialCharges.push(`${'arbitramentoHonorários'}: ${arbitramentoHonorários}`, `${'nome'}: ${nome}`, `${'processoBE'}: ${childDoc.data().processoBE}`)
                        functions.logger.log(duplicitiesWithJudicialCharges)
                        console.log(duplicitiesWithJudicialCharges)
                        const updateOptions = {
                            spreadsheetId: 'YYYYYYYYYYYYYYYYY',
                            range: 'grpr!A12', // Isso responde uma pergunta que fiz no Whosebug
                            valueInputOption: 'USER_ENTERED',
                            resource: { values: duplicitiesWithJudicialCharges },
                        }
                        google.sheets({ version: 'v4'}).spreadsheets.values.update(updateOptions)
                    })
                })
            })

        })
    })
    await Promise.all(generateDuplicities)
}) 

我做错了什么?

有人知道我做错了什么吗?

在您的脚本中,不包括请求表格 API 的客户端。我认为当它被包括在内并且您的 duplicitiesWithJudicialCharges 值是一个有效值,并且您的服务帐户具有编写电子表格的权限时,您的脚本就可以工作。那么,下面的修改呢?

发件人:

google.sheets({ version: 'v4'}).spreadsheets.values.update(updateOptions)

收件人:

google.sheets({ version: 'v4', auth: jwtClient}).spreadsheets.values.update(updateOptions);

或者,如果你想使用const sheets = google.sheets('v4'),下面的修改怎么样?

发件人:

const updateOptions = {
    spreadsheetId: 'YYYYYYYYYYYYYYYYY',
    range: 'grpr!A12', // Isso responde uma pergunta que fiz no Whosebug
    valueInputOption: 'USER_ENTERED',
    resource: { values: duplicitiesWithJudicialCharges },
}

收件人:

const updateOptions = {
    auth: jwtClient,
    spreadsheetId: 'YYYYYYYYYYYYYYYYY',
    range: 'grpr!A12', // Isso responde uma pergunta que fiz no Whosebug
    valueInputOption: 'USER_ENTERED',
    resource: { values: duplicitiesWithJudicialCharges },
}

注:

  • 在此修改中,假设您的jwtClient具有写入spreadsheetId: 'YYYYYYYYYYYYYYYYY',的电子表格的权限。请注意这一点。