Google app maker 如何从App Maker下载生成的CSV文件?

Google app maker 如何从App Maker下载生成的CSV文件?,google-app-maker,Google App Maker,我已经为我们的内部用户创建了一个AppMaker应用程序,以促进审批流程。 主审批人要求选择下载包含大量数据的CSV文件,而不将其保存到GDrive。(我也不想采用这种方法,因为这需要驱动器权限,当用户看到应用程序请求访问其文件的权限时,他们会抓狂) 所以,我得到的最远的结果是使用window.open()和csv数据,它确实下载了一个csv文件,但没有任何扩展名。但是,这并不优雅,而且使用它的人更难将其重命名为download.csv或从Excel打开它,而不是双击它 我在网上找到了使用带有h

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

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

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

有什么想法吗?解决方案


谢谢

我为类似的功能实现了以下代码,但请注意,它只生成当前加载到数据源中的项的数据。如果您有多页数据,则需要分别下载每一页。请注意,下载文件是用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);

我为类似的功能实现了以下代码,但请注意,它只生成当前加载到数据源中的项的数据。如果您有多页数据,则需要分别下载每一页。请注意,下载文件是用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行。学到了一些新东西!再次感谢!完美的非常感谢马库斯!成功了!实际上,我的解决方案与你的相同,没有最后8行。学到了一些新东西!再次感谢!