Я работаю над тем, чтобы автоматизировать поток данных, которые мы используем для поддержки некоторых наших аналитических материалов / отчетов. Подводя итог, у меня есть 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);
Без кубиков.
Любые предложения о том, как бороться с переносами строк в этом сценарии?