如何将数组数据格式化为google,以便将其导入到消防局?见图
E下文。我有一个脚本可以直接将Google中的数据导入到Firestore中,但我不知道如何用下面的图像这样的字符串项来格式化数组。在Google /数据格式中,最好的方法是什么?
// Create a menu item for 'Export to Firestore'
function onOpen() {
SpreadsheetApp.getUi().createMenu(' Firebase').addItem('Export to Firestore', 'main').addToUi();
}
function main() {
// Get the active spreadsheet and its name for the collection name
var sheet = SpreadsheetApp.getActiveSheet();
var sheetName = sheet.getName();
// Get the first row as object properties
// [ 'comment', 'companyId', 'date', 'email', 'score', 'userId']
var properties = getProperties(sheet);
// Get the next 100 rows as records
// [ ['test comment', 'ec24fmJeLA93l5jWPAN0', '1602547200.00', 'bdavis@wftst.com', '3', 'a8waViyRAJWGr2h6Gc3u'] ]
var records = getRecords(sheet);
// Export to Firestore private key removed for security reasons
var firestore = FirestoreApp.getFirestore('XXXXXX', 'XXXXXXX', 'XXXXXX');
exportToFirestore(firestore, sheetName, properties, records);
}
function exportToFirestore(firestore, collectionName, properties, records) {
records.map(function(record) {
// record: ['test comment', 'ec24fmJeLA93l5jWPAN0', '1602547200.00', 'bdavis@wftst.com', '3', 'a8waViyRAJWGr2h6Gc3u']
// props : [ 'comment', 'companyId', 'date', 'email', 'score', 'userId']
var data = {};
properties.forEach(function(prop,i) { data[prop] = record[i]; });
return data;
}).forEach(function(data) {
firestore.createDocument(collectionName, data);
});
}
function getProperties(sheet) {
return sheet.getRange(1, 1, 1, 6).getValues()[0]; // [ [ 'comment', 'companyId', 'date', 'email', 'score', 'userId'] ]
}
function getRecords(sheet) {
return sheet.getRange(2, 1, 1, 6).getValues();
}
发布于 2021-01-14 06:15:48
我相信你的目标如下。
修改要点:
当上面的流反映到示例脚本中时,如下所示。
修改脚本:
在使用此脚本之前,请设置spreadsheetId
、sheetName
和email, key, projectId
of FirestoreApp.getFirestore(email, key, projectId)
以及collectionName
的变量。
const spreadsheetId = "###"; // Please set the Spreadsheet ID.
const sheetName = "Sheet1"; // Please set the sheet name.
// 1. Retrieve values from Spreadsheet.
const sheet = SpreadsheetApp.openById(spreadsheetId).getSheetByName(sheetName);
const [header, ...data] = sheet.getDataRange().getValues();
// 2. Create an object for sending to Firestore.
const obj = data.reduce((ar, r) => {
const temp = {};
r.forEach((c, j) => {
let key = header[j];
if (key.includes("Tags")) {
key = "tags";
temp[key] = temp[key] ? temp[key].concat(c) : [c];
} else {
temp[key] = c;
}
});
ar.push(temp);
return ar;
}, []);
// 3. Send the object to Firestore.
const firestore = FirestoreApp.getFirestore(email, key, projectId);
firestore.createDocument(collectionName, obj);
结果:
运行此脚本时,可以获得以下情况。
发自:
至
注意:
tags
的头是Tags 0
、Tags 1
和Tags 2
。此脚本用于标头。请小心这个。如果您的实际情况不正确,请修改脚本。参考文献:
添加:
关于你在回复中的要求,
按照以下方式修改上面的脚本如何?
发自:
// 3. Send the object to Firestore.
const firestore = FirestoreApp.getFirestore(email, key, projectId);
firestore.createDocument(collectionName, obj);
至:
// 3. Send the object to Firestore.
const firestore = FirestoreApp.getFirestore(email, key, projectId);
obj.forEach(r => firestore.createDocument(collectionName, r));
collectionName
?还是使用scores
?不幸的是,从你的回复中,我无法理解这件事。所以我修改了我的剧本。因此,请根据实际情况修改变量名。https://stackoverflow.com/questions/65649973
复制相似问题