【问题标题】:Gscripts fetch large CSVGscripts 获取大型 CSV
【发布时间】:2021-07-12 10:35:54
【问题描述】:

这可能很容易,但我一直在苦苦挣扎。我正在获取 CSV 并将其写入谷歌表格。 CSV 每天更新,最近对我来说太大了,无法继续使用 ImportData。 Max Mahkrov 下面的代码几乎可以工作,但数据仍然太大,我无法在工作表中写入。如何编写列的选择(例如 1-8)?

对我来说更好的是根据日期过滤行,但我看到有一个 ArrayLib 库曾经具有该功能,现在已经不存在了。

javascript:

function getBigCsv() {
  var url = 'https:URL.csv';
  var csv = UrlFetchApp.fetch(url);
  var data = Utilities.parseCsv(csv);
  SpreadsheetApp.getActive().getSheetByName('Sheet1').getRange(2, 1, data.length, data[0].length).setValues(data);
}

【问题讨论】:

    标签: csv google-apps-script spreadsheet


    【解决方案1】:

    Utilities.parseCsv 返回您可以过滤的二维数组,例如与map()

    示例:

    function getBigCsv() {
      var url = 'https:URL.csv';
      var csv = UrlFetchApp.fetch(url);
      var data = Utilities.parseCsv(csv);
      data = data.map(function(row){return [row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7]]});
      SpreadsheetApp.getActive().getSheetByName('Sheet1').getRange(2, 1, data.length, data[0].length).setValues(data);
    }
    

    【讨论】:

    • 非常感谢@ziganotschka。这不是我猜到的解决方案,但它工作得很好,我想我也可以使用类似的东西来构建行过滤器。如果您有兴趣,我正在使用 Google 表格为疫苗时间表网站提供支持:vaxtimer.com 再次感谢。
    【解决方案2】:

    将数据限制为 Date().valueOf() 大于 dtv。我可能会使用自定义对话框来准确选择您希望显示的天数。但我不想写,所以我会留给你。

    function getSmallerCsv() {
      const dt = new Date();
      const dtv = new Date(dt.getFullYear(),dt.getMonth(),dt.getDate()).valueOf();
      var url = 'https:URL.csv';
      var csv = UrlFetchApp.fetch(url);
      var data = Utilities.parseCsv(csv);
      data = data.map(function(row){return [row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7]]}).filter(r => new Date(r[?]).valueOf() > dtv);
      SpreadsheetApp.getActive().getSheetByName('Sheet1').getRange(2, 1, data.length, data[0].length).setValues(data);
    }
    

    【讨论】:

    • 嗨@Cooper,这真是太棒了,非常感谢。这完全让我摆脱了所有空间限制,而且,作为一个很好的副产品,运行时间从 ~45 秒变为 ~5 秒。
    • 您可以使用带有单个选择的对话框来选择要包含在数据集中的天数。我用这样的东西来做类似的事情function updateSelect2(){ const v=[2,5,10,20,30]; var id='sel2'; var select = document.getElementById(id); select.options.length = 0; for(var i=0;i<v.length;i++) { select.options[i] = new Option(v[i],v[i]); } }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-10
    相关资源
    最近更新 更多