【问题标题】:How To Download a generated CSV file from App Maker?如何从 App Maker 下载生成的 CSV 文件?
【发布时间】:2019-01-30 17:22:46
【问题描述】:

我为我们的内部用户创建了一个 AppMaker 应用程序,以促进审批流程。 主审批者已要求选择下载包含大量数据的 CSV 文件而不将其保存到 GDrive。 (我也不想采用这种方法,因为这需要 Drive 权限,并且当用户看到应用程序正在请求访问其文件的权限时会吓坏)。

所以,我得到的最远的方法是将 window.open() 与 csv 数据一起使用,它确实下载了一个 csv 文件但没有任何扩展名。然而,这并不优雅,而且它使使用它的人更难将其重命名为 download.csv 或从 Excel 中打开它而不是双击它。

我在网上找到了使用带有 href 和下载属性的锚点的选项,并愉快地实现了它,只是从 AppMaker 那里得到了一个很好的错误,即 Anchor href 不允许以“数据:”开头 .

有什么想法吗?解决方案?

谢谢!

【问题讨论】:

    标签: google-app-maker


    【解决方案1】:

    我为类似的功能实现了以下代码,但请注意,它只生成当前加载到数据源中的项目的数据。如果您有多页数据,则需要单独下载每一页。请注意,下载文件专门使用 YourFileName.csv 命名。

    var ds = widget.datasource;
    var items = ds.items;
    var fields = ds.model.fields._values;
    var serialized = '';
    var headers = [];
    var permit = widget.root.children.Panel1.datasource.item.WR_Number;
    
    fields.forEach(function(fieldname) {
      var header = fieldname.displayName;
      headers.push(header);
    });
    serialized += headers.join(',') + '\r\n';
    
    items.forEach(function(item) {
      var values = [];
    
      fields.forEach(function(field) {
        var value = item[field.name];
        var strVal = value === null ? '' : value.toString();
        values.push(strVal);
      });
    
      serialized += values.join(',') + '\r\n';
    });
    var file = new Blob([serialized], {type: 'text/csv'});
    var link = document.createElement('a');
    link.download = permit + '_WaterUseData.csv';
    link.href = window.URL.createObjectURL(file);
    link.style.display = 'none';
    document.body.appendChild(link);
    link.click();
    document.body.removeChild(link);
    

    【讨论】:

    • 完美!非常感谢马库斯!做到了!实际上,我的解决方案与您的解决方案相同,但没有最后 8 行。学到了新东西!再次感谢!
    猜你喜欢
    • 2023-02-14
    • 2014-10-15
    • 2019-10-27
    • 1970-01-01
    • 2022-07-14
    • 1970-01-01
    • 2018-11-05
    • 2018-12-23
    • 1970-01-01
    相关资源
    最近更新 更多