Загрузите файл CSV, созданный с помощью JavaScript, ограниченный 29 строками для некоторой причины
Я использую следующее, чтобы загрузить файл, созданный с помощью JavaScript в vue
проект на стороне клиента, который также использует json2csv
,
// console.log('wtf all 200 rows are here!', modifiedData);
const csv = json2csvParser.parse(modifiedData);
let content = 'data:text/csv;charset=utf-8,';
content += csv;
const data = encodeURI(content);
const link = document.createElement('a');
link.setAttribute('href', data);
link.setAttribute('download', 'errors_totalcost.csv');
link.click();
Но по какой-то причине файл имеет только 29 строк вместо всех 200. Приведенный выше код совсем не работает в Firefox, но используется для работы в Chrome, теперь он разбит в Chrome и усекает файл.
Кто-нибудь может объяснить, что не так и как решить эту проблему, создавая файл на стороне клиента?
1 ответ
Одним из полей (строка 28) было поле примечания, содержащее текст, который при визуализации в браузере выглядел следующим образом:
Sale Numbers:
#1453
#142356
#78527
#4563232
#45378
#675675
#32452
Or in object like:
{t:"Sale Numbers:↵#1453↵#142356↵#78527↵#4563232↵#45378↵#675675↵#32452"}
Я не знаю почему, но Chrome прекратил обработку после этой строки. Похоже, это связано с #
и исправить это заменить его. Вы можете воспроизвести следующее:
const json2csvParser = new Json2csvParser();
const fakeObj = []
for (let index = 0; index < 100; index++) {
fakeObj.push({
a:4, b:2, c:1, v:7, t:23, s:10
})
};
fakeObj.push({
a:4, b:2, c:1, v:7,
t:"Sale Numbers:↵#1453↵#142356↵#78527↵#4563232↵#45378↵#675675↵#32452", // will cause issue
// t: "Sale Numbers:↵#1453↵#142356↵#78527↵#4563232↵#45378↵#675675↵#32452".replace(/(#)/gm, " "), // this solution works
s:10
})
fakeObj.push({
a:"you wont get this row if the one before has a hash", b:2, c:1, v:7, t:"", s:10
})
const csv = json2csvParser.parse(fakeObj);
let content = 'data:text/csv;charset=utf-8,';
content += csv;
const data = encodeURI(content);
const link = document.createElement('a');
link.setAttribute('href', data);
link.setAttribute('download', 'errors_totalcost.csv');
link.click();