Write a string containing commas and double quotes to CSV

后端 未结 3 1224
遥遥无期
遥遥无期 2021-01-04 03:58

I\'m trying to produce a Google Shopping feed of 30,000+ items in NetSuite, a CRM system that runs server-side JavaScript that it calls Suitescript 2.0. Essentially, it\'s j

相关标签:
3条回答
  • 2021-01-04 04:18

    It turns out that, according to the CSV specs, to include double quotes within a string that is already quoted, you need to use two double quotes (""). I changed:

    itemDesc = itemDesc.replace(/"/g, '\"');
    

    to

    itemDesc = itemDesc.replace(/"/g, '""');
    

    I also removed

    itemDesc = itemDesc.replace(/,/g, '\,');
    itemDesc = itemDesc.replace(/'/g, '\'');
    

    Since the column in the CSV is being quoted already. These are unnecessary.

    0 讨论(0)
  • 2021-01-04 04:39

    I use this simple function to convert an string[][] to a csv file. It quotes the cell, if it contains a ", a , or other whitespace (except blanks):

    /**
     * Takes an array of arrays and returns a `,` sparated csv file.
     * @param {string[][]} table
     * @returns {string}
     */
    export function toCSV(table: string[][]) {
        return table
            .map(row =>
                row
                    .map(cell => {
                        // We remove blanks and check if the column contains
                        // other whitespace,`,` or `"`.
                        // In that case, we need to quote the column.
                        if (cell.replace(/ /g, '').match(/[\s,"]/)) {
                            return '"' + cell.replace(/"/g, '""') + '"';
                        }
                        return cell;
                    })
                    .join(',')
            )
            .join('\n');
    }
    
    0 讨论(0)
  • 2021-01-04 04:41

    In my case, I didn't want to quote strings that did not need quoting. So I test the string for nasty characters before quoting it.

    function escapeCSV (term) {
      if (term.match && term.match(/,|"/))  {
        return `"${term.replace('"','""')}"`
      } else {
        return term
      }
    }
    
    0 讨论(0)
提交回复
热议问题