如何强制 Google 可视化 API 中的 dataTableToCsv 方法转义标签符号

How to force dataTableToCsv method in Google Visualization API to escape the hashtag sign

dataTableToCsv 方法似乎在遇到“#”时停止 因为这是一个 google 定义的方法,什么是逃避这个标志的最好方法或者更好的方法,更正这个?

csvContent = csvColumns + google.visualization.dataTableToCsv(data);

这是一个测试。请注意,在此示例中,它将停在 D 列第二行。

google.charts.load('current', {
  callback: drawBasic,
  packages: ['table']
});

function drawBasic() {
  var query = new google.visualization.Query(
    'https://docs.google.com/spreadsheets/d/1w1vaFAPTE440jc2cpYGftXSaPwGxU_x7iQRSGK35oYc/edit#gid=0'
  );
  query.setQuery('SELECT *');
  query.send(handleQueryResponse);
}

function handleQueryResponse(response) {
  if (response.isError()) {
    alert('Error in query: ' + response.getMessage() + ' ' + response.getDetailedMessage());
    return;
  }


  var data = response.getDataTable();
  var options = {
    title: 'test'
  }

  var chart = new google.visualization.Table(document.getElementById('chart_div'));
  chart.draw(data, options)
  
   $('#Export').on('click', function () {
    var csvColumns;
    var csvContent;
    var downloadLink;
    var fileName;

    // build column headings
    csvColumns = '';
    for (var i = 0; i < data.getNumberOfColumns(); i++) {
      csvColumns += data.getColumnLabel(i);
      if (i < (data.getNumberOfColumns() - 1)) {
        csvColumns += ',';
      }
    }
    csvColumns += '\n';

    // build data rows
    csvContent = csvColumns + google.visualization.dataTableToCsv(data);

    // download file

    fileName = 'data.csv';

      downloadLink = document.createElement('a');
      downloadLink.href = 'data:text/csv;charset=utf-8,' + encodeURI(csvContent);
      downloadLink.download = fileName;
      raiseEvent(downloadLink, 'click');
      downloadLink = null;

 function raiseEvent(element, eventType) {
    var eventRaised;
    if (document.createEvent) {
      eventRaised = document.createEvent('MouseEvents');
      eventRaised.initEvent(eventType, true, false);
      element.dispatchEvent(eventRaised);
    } else if (document.createEventObject) {
      eventRaised = document.createEventObject();
      element.fireEvent('on' + eventType, eventRaised);
    }
  }

});
  
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
 <button id="Export" title="Download to CSV">Download to CSV</Button>
<div id="chart_div"></div>

  • 您想将电子表格的值下载为 CSV 文件。
  • 在您当前的问题中,CSV 数据未完成。这是 "it will stop at Column D second row".

如果我的理解是正确的,这个修改怎么样?请将此视为几个答案之一。

发现当我看到 csvContent = csvColumns + google.visualization.dataTableToCsv(data);csvContent 时,CSV 数据包含电子表格中的全部值。所以在这个修改中,csvContent被转换为blob并被下载。

修改后的脚本:

当您的脚本修改时,请修改如下。

从:
downloadLink.href = 'data:text/csv;charset=utf-8,' + encodeURI(csvContent);
到:
downloadLink.href = URL.createObjectURL(new Blob([csvContent], {type: "text/csv"}));

downloadLink.href = window.URL.createObjectURL(new Blob([csvContent], {type: "text/csv"}));

参考文献:

如果我误解了您的问题并且这不是您想要的方向,我深表歉意。