Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script Google应用程序脚本,用于在从Firestore提取时按名称排序列_Google Apps Script_Google Sheets_Google Cloud Firestore - Fatal编程技术网

Google apps script Google应用程序脚本,用于在从Firestore提取时按名称排序列

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

我正在从Firestore中的文档集合中提取数据,并将这些数据显示在Google工作表中

每次我运行函数获取这些数据时,列都会以随机顺序出现

我想列出现在一个特定的顺序,或按字母顺序

此函数用于获取我的数据并将其附加到电子表格:

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);