【问题标题】:skip comma (,) in csv export在 csv 导出中跳过逗号 (,)
【发布时间】:2025-12-02 04:25:01
【问题描述】:

所以,我发现了其他几个带有相关答案的 SO 问题,并尝试了其中的大部分,但似乎没有什么对我有用。可能是因为我的案子比之前的案子复杂多了。

这是我的 csv 文件,它有几个特殊字符 [, ' "]

ID,Name,Executable,Host,Timeout,Tags,Visible,
65,one test,SomePROXY=http://10.10.10.10 /abc/cde/efg/some.py -u tom -g 'some-abc-test' --passparams "one,two",example.com,1800,nothing,true,

我期望的 excel 格式是:

ID: 65
Name: one test
Executable: SomePROXY=http://10.10.10.10 /abc/cde/efg/some.py -u tom -g 'some-abc-test' --passparams "one,two"
Host: example.com
Timeout: 1800
Tags: nothing
Visible: true

但由于 Executable 字段中的逗号,“两个”出现在新列中。 我尝试引用 """ 下的所有内容(如其他答案中所建议的那样),但这似乎不起作用。

谁能帮帮我。

这是我的代码,我在这里尝试使用(用于 ag-grid 表)

    $scope.export_data_csv = function(){
        var LINE_SEPARATOR = '\r\n';
        var COLUMN_SEPARATOR = ',';
        var fileName = 'export.csv';

        let csvString = '';
        let columnsToExport = $scope.ag_grid_options.api.columnController.getAllDisplayedColumns();

        // adding column headers.
        columnsToExport.map((column) => {
          csvString+= column.colDef.headerName;
          csvString+= COLUMN_SEPARATOR;
        });
        csvString+= LINE_SEPARATOR;

        // adding content of data currently loaded in the grid.
        $scope.ag_grid_options.api.forEachNode( function(node) {
          node.columnController.allDisplayedColumns.map((column) => {
            let cellContent = node.valueService.getValue(column, node);
            if(typeof(cellContent) == 'object'){
                cellContent = cellContent.join("; ")
            }
            csvString+= (cellContent != null) ? cellContent : "";
            csvString+= COLUMN_SEPARATOR;
          });
          csvString+= LINE_SEPARATOR;
        });

        // for Excel, we need \ufeff at the start
        var blobObj = new Blob(["\ufeff", csvString], {
            type: "text/csv;charset=utf-8;"
        });
        // Internet Explorer
        if (window.navigator.msSaveOrOpenBlob) {
            window.navigator.msSaveOrOpenBlob(blobObj, fileName);
        }
        else {
            // Chrome
            var downloadLink = document.createElement("a");
            downloadLink.href = window.URL.createObjectURL(blobObj);
            downloadLink.download = fileName;
            document.body.appendChild(downloadLink);
            downloadLink.click();
            document.body.removeChild(downloadLink);
        }
    }

;

【问题讨论】:

  • 显示你试过的代码
  • 您需要complicated regex 来匹配引号外的逗号
  • 为什么不尝试一些现成的解决方案?用手逃避特殊符号很痛苦,你仍然会错过一些东西。
  • @PetrAveryanov 你能推荐任何这样的现成解决方案吗?

标签: javascript angularjs csv export-to-csv


【解决方案1】:

您必须将 'Excecutable' 的整个值声明为字符串,并使用额外的双引号转义其中的双引号。

ID,Name,Executable,Host,Timeout,Tags,Visible,
65,one test,"SomePROXY=http://10.10.10.10 /abc/cde/efg/some.py -u tom -g 'some-abc-test' --passparams ""one,two""",example.com,1800,nothing,true,

【讨论】: