Как скачать сгенерированный CSV-файл из App Maker? - PullRequest
0 голосов
/ 30 января 2019

Я создал приложение AppMaker для наших внутренних пользователей, чтобы облегчить процесс утверждения.Главный утверждающий запросил вариант загрузки файла CSV с кучей данных без сохранения его в GDrive.(Я также не хотел использовать этот подход, так как для этого потребовалось бы разрешение на диск, и пользователи испугались, увидев, что приложение запрашивает разрешение на доступ к их файлам).

Итак,Я получил возможность использовать window.open () с данными csv, которые загружают файл csv, но без каких-либо расширений.Однако это не элегантно, и человеку, использующему его, становится сложнее переименовать его в download.csv или открыть его из Excel вместо двойного щелчка.

Я нашел в Интернете вариантиспользуя якорь с href и атрибутом загрузки и успешно реализовал его только для того, чтобы получить приятную ошибку от AppMaker о том, что Anchor href не разрешается начинать с «data:» .

Есть идеи?Решения?

Спасибо!

1 Ответ

0 голосов
/ 30 января 2019

Я реализовал следующий код для аналогичной функциональности, однако учтите, что он генерирует данные только тех элементов, которые в данный момент загружены в источник данных.Если у вас есть несколько страниц данных, вам нужно будет загрузить каждую страницу отдельно.Обратите внимание, что загружаемый файл имеет конкретное имя с именем 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);
...