Google apps script Google应用程序脚本,用于在从Firestore提取时按名称排序列
我正在从Firestore中的文档集合中提取数据,并将这些数据显示在Google工作表中 每次我运行函数获取这些数据时,列都会以随机顺序出现 我想列出现在一个特定的顺序,或按字母顺序 此函数用于获取我的数据并将其附加到电子表格:Google apps script Google应用程序脚本,用于在从Firestore提取时按名称排序列,google-apps-script,google-sheets,google-cloud-firestore,Google Apps Script,Google Sheets,Google Cloud Firestore,我正在从Firestore中的文档集合中提取数据,并将这些数据显示在Google工作表中 每次我运行函数获取这些数据时,列都会以随机顺序出现 我想列出现在一个特定的顺序,或按字母顺序 此函数用于获取我的数据并将其附加到电子表格: function importData() { const firestore = getFirestore(); const allDocuments = firestore.getDocuments('Data').map(function(documen
function importData() {
const firestore = getFirestore();
const allDocuments = firestore.getDocuments('Data').map(function(document) {
return document.fields;
});
const first = allDocuments[0];
const columns = Object.keys(first);
const sheet = SpreadsheetApp.getActiveSpreadsheet();
const ss = sheet.getActiveSheet();
ss.clear();
sheet.appendRow(columns);
allDocuments.forEach(function(document) {
const row = columns.map(function(column) {
return document[column];
});
sheet.appendRow(row);
});
trimData();
formatData();
}
trimData()
函数用于删除任何无用的文本和空白,例如字段类型,例如stringValue
formatData()
函数设置交替配色方案,并设置显示在每个单元格左边框上的单元格值。如果所有文档都是数组,则可以对其进行排序:
allDocuments.sort();
还有其他用于排序数组的选项,我一直使用此站点:
我相信你的目标如下
- 您总是希望使用相同的列顺序来放置值
- 关于你下面的问题,
每次我运行函数获取这些数据时,列都会以随机顺序出现
- 我认为您出现问题的原因是由于
const columns=Object.keys(第一)行代码>。在这种情况下,键的顺序可能会在每次运行时更改。因此,我想提出以下修改
- 我认为您出现问题的原因是由于
- 并且,在脚本中,
在循环中使用。在这种情况下,工艺成本将变得很高。在这种情况下,我建议使用appendRow
setValues
- 通过此修改,键的顺序始终是排序的,并且您可以始终使用相同的顺序。
- 但是,如果添加其他字段,则键的顺序也会更改。所以请小心这个
const first = allDocuments[0];
const columns = Object.keys(first);
const sheet = SpreadsheetApp.getActiveSpreadsheet();
const ss = sheet.getActiveSheet();
ss.clear();
sheet.appendRow(columns);
allDocuments.forEach(function(document) {
const row = columns.map(function(column) {
return document[column];
});
sheet.appendRow(row);
});
const first = allDocuments[0];
const columns = Object.keys(first).sort();
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getActiveSheet();
sheet.clear();
const values = allDocuments.reduce(function(ar, document) {
const row = columns.map(function(column) {
return document[column];
});
ar.push(row);
return ar;
}, [columns.slice()]);
sheet.getRange(1, 1, values.length, values[0].length).setValues(values);