Ошибка при переносе строки при импорте CSV из Google Drive в Google Sheets - PullRequest
1 голос
/ 31 марта 2019

Я работаю над тем, чтобы автоматизировать поток данных, которые мы используем для поддержки некоторых наших аналитических материалов / отчетов. Подводя итог, у меня есть CSV в Google Drive, который необходимо импортировать в Google Sheet. CSV содержит разрывы строк в некоторых «ячейках», которые приводят к тому, что импорт полностью прерывается / выходит за пределы строки. Чтобы было понятно, я могу получить данные, но они смещены из-за разрывов строк в CSV.

Я начал с кода из Ctrl :

function importCSVFromGoogleDrive() {

  var file = DriveApp.getFilesByName("tweet_activity.csv").next();
  var csvData = Utilities.parseCsv(file.getBlob().getDataAsString());
  var sheet = SpreadsheetApp.getActiveSheet();
  sheet.getRange(1, 1, csvData.length, csvData[0].length).setValues(csvData);

}

Я быстро обнаружил, что, хотя код импортировал файл, разрывы строк разрушали выравнивание данных. При осмотре становится ясно, что разрывы строк являются источником проблемы.

Я просмотрел форумы и нашел несколько возможных исправлений ([здесь] ( Сохранение в формате CSV через скрипт Google для обработки символов новой строки ) и [здесь] ( Apps Script Utilities.parseCsv предполагает новую строку при разрыве строки в двойных кавычках ) например)

Я пробовал:

function importCSVFromGoogleDrive_v2() {

  var file = DriveApp.getFilesByName("tweet_activity.csv").next();
  var NewFile = file.replace("\n", " ").replace("\r", " ");
  var csvData = Utilities.parseCsv(NewFile.getBlob().getDataAsString());
  var sheet = SpreadsheetApp.getActiveSheet();
  sheet.getRange(1, 1, csvData.length, csvData[0].length).setValues(csvData);

}

В результате "Ошибка типа: не удается найти замену функции в объекте tweet_activity.csv. (Строка 42, файл" Код ")"

Я также пытался заменить разрывы строк после разбора.

function importCSVFromGoogleDrive_v3() {

  var file = DriveApp.getFilesByName("tweet_activity_metrics_downtownstlouis_20190303_20190331_en.csv").next();
  var csvData = Utilities.parseCsv(file.getBlob().getDataAsString());
  var csvDataRev = csvData.replace("\n", " ").replace("\r", " ");
  var sheet = SpreadsheetApp.getActiveSheet();
  sheet.getRange(1, 1, csvData.length, csvData[0].length).setValues(csvData);

}

Это привело к «Ошибка типа: не удалось найти замену функции в объекте»

Наконец, я попробовал другой код замены (я изменил для своих целей, но это была важная часть):

var dataString = myBlob().getDataAsString(); 
var escapedString = dataString.replace(/(?=["'])(?:"[^"\](?:\[\s\S][^"\])"|'[^'\]\r\n(?:\[\s\S][^'\]\r\n)')/g, function(match) { return match.replace(/\r\n/g,"\r\n")} ); 
var csvData = Utilities.parseCsv(escapedString);

Без кубиков.

Любые предложения о том, как бороться с переносами строк в этом сценарии?

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