Остановить импорт данных Google script при разборе пустой строки

#javascript #google-apps-script #google-sheets

#javascript #google-apps-script #google-sheets

Вопрос:

Я бы хотел, чтобы импорт данных останавливался при разборе пустой строки. Я пробовал этот код, но он по-прежнему импортирует данные за пустые строки:

 function readInAllData() {
var threads = GmailApp.search("subject:Report #7"); 
  var message = threads[0].getMessages()[threads[0].getMessages().length-1];
  var attachment = message.getAttachments()[0];
  if (attachment.getContentType() === "text/csv") {
    attachment.setContentTypeFromExtension();
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Y input"); 
    var csvData = Utilities.parseCsv(attachment.getDataAsString(), ",");
    var range = sheet.getRange("A:R");

    var row = 0;
          range.clearContent();
      for (var row=0; row<csvData.length; row  ) {
          sheet.getRange(1, 1, csvData.length, csvData[0].length).setValues(csvData);
            
                if (!csvData[row].join("")) break;
    }
    return null;
}
  

Ответ №1:

Объяснение:

Вам не нужен цикл for, чтобы найти первую пустую строку в ваших данных. Вы можете использовать findIndex и every, чтобы найти первую строку, для которой каждая ячейка пуста, а затем установить значения до этой строки:

 const pos = csvData.findIndex(r => r.every(c=>c=='') );
sheet.getRange(1, 1, pos, csvData[0].length).setValues(csvData.slice(0,pos));
  

Решение:

 function readInAllData() {
var threads = GmailApp.search("subject:Report #7"); 
  var message = threads[0].getMessages()[threads[0].getMessages().length-1];
  var attachment = message.getAttachments()[0];
  if (attachment.getContentType() === "text/csv") {
    attachment.setContentTypeFromExtension();
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Y input"); 
    var csvData = Utilities.parseCsv(attachment.getDataAsString(), ",");
    var range = sheet.getRange("A:R");

    range.clearContent();
    const pos = csvData.findIndex(r => r.every(c=>c=='') );
    sheet.getRange(1, 1, pos, csvData[0].length).setValues(csvData.slice(0,pos));
            
    return null;
}
}
  

Комментарии:

1. Спасибо за ваш ответ, Мариос! Проблема в том, что я хотел бы остановить импорт данных при появлении первой пустой строки. Эта пустая строка отделяет данные, которые я хочу импортировать, от данных, которые я не хочу импортировать. Под пустой строкой находится длинная строка нежелательных значений, которая мешает моим расчетным показателям в таблице Google.

2. @Snail Спасибо за ваш отзыв, я изменил свой ответ. Дайте мне знать, сработало ли это для вас.

3. проверено. Даже после просмотра инструкции, где должна находиться эта кнопка, потребовалось две попытки, чтобы заметить это.