如何强制 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"}));
参考文献:
如果我误解了您的问题并且这不是您想要的方向,我深表歉意。
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"}));
参考文献:
如果我误解了您的问题并且这不是您想要的方向,我深表歉意。