#javascript #csv #export-to-csv
Вопрос:
Я работаю со строкой CSV, которая содержит двойные кавычки («) вокруг имени и фамилии человека с целью указания полного имени в одной ячейке. Значение в двойных кавычках также содержит запятую, поскольку имя находится в порядке «фамилия, имя». Пример: "Smith, Matt"
.
Я создаю CSV-файл из этой строки, используя следующий JavaScript:
//shortened example of the CSV string
let csv = [
["Smith, Matt", 'Developer'],
];
var blob = new Blob([csv], { type: 'text/csv' });
if (navigator.msSaveBlob) { // IE 10
navigator.msSaveBlob(blob, filename);
} else {
let link = document.createElement("a");
if (link.download !== undefined) { // feature detection
// Browsers that support HTML5 download attribute
var url = URL.createObjectURL(blob);
link.setAttribute("href", url);
link.setAttribute("download", "test.csv");
link.setAttribute("target", '_self');
link.style.visibility = 'hidden';
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
}
}
CSV-файл, созданный на основе этого, не использует двойные кавычки с запятой. Двойная кавычка отображается как символ сущности в файле CSV, а запятая обеспечивает разделение значений на отдельные ячейки:
Имя | Роль | |
---|---|---|
amp;quot;Matt |
Smithamp;quot; |
Разработчик |
У меня нет возможности изменить порядок «фамилия, имя» в строке, поэтому в значении имени потребуется запятая. Есть ли способ загрузить файл CSV и заставить двойные кавычки применять правило, согласно которому, даже если они содержат запятую в значении, полное значение в кавычках должно находиться в той же ячейке?
Комментарии:
1. Вы пробовали экранировать символы?
2. @darklightcode Я не пробовал экранировать. Есть ли сообщение, которое вы бы порекомендовали для этого?
3. взгляните на csv-parser и papaparse
Ответ №1:
Самый простой подход — изменить разделитель на тот, который не используется в ваших объектах. Например, вы можете использовать знак запятой.
let rawCsv = [
["Smith, Matt", 'Developer'],
];
let csv = rawCsv.map(x=>{
return x.join(';');
})
// saving file