Estoy trabajando con una cadena CSV que contiene comillas dobles (") alrededor del nombre y apellido de una persona con el fin de tener el nombre completo en una sola celda. El valor entre comillas dobles también contiene una coma porque el nombre está en " apellido, primer nombre". Ej: "Smith, Matt" .
Estoy creando un archivo CSV a partir de esta cadena usando el siguiente 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); } }El archivo CSV que se crea a partir de esto no aplica las comillas dobles con la coma. Las comillas dobles se representan como un carácter de entidad en el archivo CSV y la coma impone la separación de los valores en celdas separadas:
| Nombre | Role | |
|---|---|---|
"Matt | Smith" | Desarrollador |
No tengo la opción de cambiar el orden de "apellido, nombre" en la cadena, por lo que se requerirá la coma en el valor del nombre. ¿Hay alguna manera de descargar el archivo CSV y hacer que las comillas dobles hagan cumplir la regla de que, incluso si contienen una coma en el valor, el valor completo debe estar en la misma celda?
El enfoque más fácil es cambiar el delimitador a uno que no use en sus entidades. Por ejemplo, puede usar el signo de coma.
let rawCsv = [ ["Smith, Matt", 'Developer'], ]; let csv = rawCsv.map(x=>{ return x.join(';'); }) // saving file