Загрузите файл 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();
Другие вопросы по тегам