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',
的电子表格的权限。请注意这一点。
我正在将电子表格中的数据与 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',
的电子表格的权限。请注意这一点。