Преобразование Google Sheets (Apps Scripts) в действительный формат CSV - PullRequest
0 голосов
/ 26 ноября 2018

У меня есть скрипт ниже, который, по сути, просматривает вкладку листов Google, в которой есть некоторые данные, которые необходимо загрузить в Google Import API (Google Analytics):

var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('UK Only');
  var maxRows = ss.getLastRow();
  var maxColumns = ss.getLastColumn();
  var rows = ss.getRange(1, 1, maxRows, maxColumns).getValues();
  var rowsCSV = rows.join("\n")

  var blobData = Utilities.newBlob(rowsCSV, "application/octet-stream", "GA import data");
  try {
    var upload = Analytics.Management.Uploads.uploadData("10131233", "UA-1234576-2", "righfghfghfgT8Dox1nwXDg", blobData);
    Logger.log("Test Data Import Successful");
  }
  catch (e) {
    console.error(e);
  }

Вывод похож наниже:

ga:productSku,ga:productName,ga:productBrand,ga:productCategoryHierarchy,ga:dimension25,ga:dimension28,ga:dimension31
456456456,example value wit,h char ,that "breaks" csv,fgjfgjf Tjghjghjg,FP,Women,dasdasd
456456456,example value wit,h char ,that "breaks" csv,123123123,FP,Women,dasdasd
456456456,example value wit,h char ,that "breaks" csv,Rdasdasd,FP,asdasdasd

Выше приведены некоторые значения, которые нарушают формат CSV (запятые и кавычки).

Как правильно отформатировать CSV, чтобы он не ломался на этих символах?

1 Ответ

0 голосов
/ 19 декабря 2018

Мне удалось решить эту проблему с помощью приведенной ниже функции. Мне пришлось учитывать кавычки и запятые в значениях, которые не нравятся Google API:

function arrayToCSV (twoDiArray) {
    var csvRows = [];
    for (var i = 0; i < twoDiArray.length; ++i) {
        for (var j = 0; j < twoDiArray[i].length; ++j) {
            twoDiArray[i][j] = '\"' + twoDiArray[i][j].replace('"','""') + '\"';
        }
        csvRows.push(twoDiArray[i].join(','));
    }

    return csvRows.join('\r\n');
};

Обязательно вызывать его с помощью приведенного ниже кода:

  var maxRows = ss.getLastRow();
  var maxColumns = ss.getLastColumn();
  var rows = ss.getRange(1, 1, maxRows, maxColumns).getValues();
  var rowsCSV = arrayToCSV(rows);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...