Как заставить метод dataTableToCsv в API визуализации Google экранировать знак хэштега - PullRequest
1 голос
/ 08 ноября 2019

Похоже, что метод 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>

1 Ответ

1 голос
/ 08 ноября 2019
  • Вы хотите загрузить значения электронной таблицы в виде файла CSV.
  • В текущем выпуске данные CSV не заполнены. Это «это остановится на столбце D во втором ряду».

Если мое понимание верно, как насчет этой модификации? Пожалуйста, подумайте об этом как об одном из нескольких ответов.

Было обнаружено, что когда я увидел csvContent из csvContent = csvColumns + google.visualization.dataTableToCsv(data);, данные CSV имеют целые значения из электронной таблицы. Таким образом, в этой модификации csvContent преобразуется в большой двоичный объект и загружается.

Модифицированный скрипт:

Когда ваш скрипт модифицирован, пожалуйста, измените его следующим образом.

From:
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"}));

Ссылки:

Если я неправильно понял ваш вопрос, а это не то направление, которое вам нужно, я прошу прощения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...