У вас есть две проблемы. Первый синтаксис, который вы используете для создания BLOB-объекта, является недействительным. Вы используете выражение, но вам нужно предоставить данные. Во-вторых, вы пытаетесь создать XLS-файл в виде обычного текста, но этот формат не работает.
Самый простой способ добиться этого - создать файл CSV, отформатированный так же, как вы создаете строки, вам просто нужно отделить каждую строку CSV с помощью разрыва строки.
Наконец, поскольку вы используете jQuery, синтаксис для извлечения данных может быть упрощен с помощью вложенных вызовов map()
для создания массива для каждой строки выходных данных. Попробуйте это:
let csv = $('.sample').map((i, sample) => {
return $(sample).find('span > .labelValue').map((_, field) => field.innerText).get().join(',');
}).get();
csv.unshift('First Name,Middle Name,Last Name'); // add headers
createCsvFile(csv);
function createCsvFile(csvArray) {
let file = new Blob([csvArray.join('\r\n')], { type: "application/csv" });
let url = URL.createObjectURL(file);
let a = $("<a />", {
href: url,
download: "filename.csv"
}).appendTo("body").get(0).click();
}
Рабочий пример
Обратите внимание, что я добавил несколько строк в пример jsFiddle, чтобы вы могли видеть, насколько он расширяемый .