Как заставить скрипт Google Sheet пропускать пустые строки?

Я новичок в использовании App Script. У меня есть скрипт из https://gist.github.com/palumbo/d751841c3e61764f058fb60253bc47fe, который загружает изображения с URL-адресов на листе Google на Google Диск. В моем исходном листе есть много строк, в которых поле URL-адреса пусто. Скрипт останавливается на пустой ячейке. Как указать сценарию игнорировать пустые ячейки в столбце URL-адреса и перейти к следующей строке? Спасибо за любую помощь, которую вы можете оказать!

function downloadImage() {
  let sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); 
  let lastRow = sheet.getLastRow(); 

  let folder = DriveApp.getFolderById("1W4pv0RW7DB_yh8pqChc8YPNyq0ETQ_1m"); 

  for (let i = 0; i < lastRow-1; i++) {
    let url = sheet.getRange(2+i,1).getValue(); 
    let blob = UrlFetchApp.fetch(url).getBlob(); 
    folder.createFile(blob); 
  }
}

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

Tanaike 26.09.2023 08:31

Например, если в столбце A есть ссылки на изображения в строках 1,2,3,4,6,910. Строки 5,7,8 пусты. Когда я запускаю скрипт для загрузки изображений в папку Google Drive. он сохраняет изображения только до 4-й строки и не сохраняет изображения с 6,9,10, поскольку останавливается на пустой ячейке в строке 5.

user22635203 26.09.2023 09:05

Вот ссылка на видео на YouTube youtube.com/watch?v=6cgMbq_t5V0&t=43s

user22635203 26.09.2023 09:05

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

Tanaike 26.09.2023 09:25
Применение градиента к изображению с помощью CSS
Применение градиента к изображению с помощью CSS
Здравствуйте, братья и сестры, как дела? Недавно я застрял на применении градиента к изображению. Я применял это много раз, но иногда наши требования...
Получение URL-адреса изображения курса в Moodle с помощью PHP
Получение URL-адреса изображения курса в Moodle с помощью PHP
Moodle - это популярная система управления обучением с открытым исходным кодом, используемая многими учебными заведениями и организациями по всему...
1
4
50
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Судя по вашему следующему ответу,

Например, если в столбце A есть ссылки на изображения в строках 1,2,3,4,6,910. Строки 5,7,8 пусты. Когда я запускаю скрипт для загрузки изображений в папку Google Drive. он сохраняет изображения только до 4-й строки и не сохраняет изображения с 6,9,10, поскольку останавливается на пустой ячейке в строке 5.

В этом случае как насчет следующего модифицированного сценария?

В вашем скрипте getValue() используется в цикле. В этом случае стоимость процесса становится высокой. Ссылка

В этой модификации сначала извлекаются значения ячеек. И когда значение ячейки не пусто, скрипт запускается и загруженный файл создается как файл.

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

function downloadImage() {
  let sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // or let sheet = SpreadsheetApp.getActiveSheet();
  let lastRow = sheet.getLastRow();
  let folder = DriveApp.getFolderById("1W4pv0RW7DB_yh8pqChc8YPNyq0ETQ_1m");

  // I modidied the below script.
  const values = sheet.getRange("A2:A" + lastRow).getDisplayValues();
  values.forEach(([url]) => {
    if (url && /^https?://.*$/.test(url)) {
      const res = UrlFetchApp.fetch(url, { muteHttpExceptions: true });
      if (res.getResponseCode() == 200) {
        console.info(`Downloaded from ${url}.`);
        folder.createFile(res.getBlob());
      }
    }
  });
}

или, в качестве другого подхода, можно также использовать следующую модификацию.

function downloadImage() {
  let sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // or let sheet = SpreadsheetApp.getActiveSheet();
  let lastRow = sheet.getLastRow();
  let folder = DriveApp.getFolderById("1W4pv0RW7DB_yh8pqChc8YPNyq0ETQ_1m");

  // I modidied the below script.
  const values = sheet.getRange("A2:A" + lastRow).getRichTextValues();
  values.forEach(([r]) => {
    const url = r.getLinkUrl();
    if (url) {
      const res = UrlFetchApp.fetch(url, { muteHttpExceptions: true });
      if (res.getResponseCode() == 200) {
        console.info(`Downloaded from ${url}.`);
        folder.createFile(res.getBlob());
      }
    }
  });
}

Использованная литература:

Привет, этот код сработал отлично, большое спасибо за помощь!

user22635203 27.09.2023 03:10

@user22635203 user22635203 Спасибо за ответ и тестирование. Я рад, что ваша проблема была решена. И тебе спасибо.

Tanaike 27.09.2023 03:21
function removingEmptyRows() {
  const ss = SpreadsheetApp.getActive();
  const sh = ss.getSheetByName("Sheet0");
  let vs = sh.getRange(2, 1, sh.getLastRow() - 1, sh.getLastColumn()).getValues().map((r,i)=> {r.unshift(i+2);return r;}).filter(r => r.every(c => c !== "")).filter(e => e);
  Logger.log("Empty Rows are 10,20,30,40,50 and I inserted the row numbers into column 1 before removing the blank lines so that those row numbers would be missing.\n\n")
  Logger.log(JSON.stringify(vs).replace('],', '],\n'));
}

Пустые строки — 10,20,30,40,50, и я вставил номера строк в столбец 1, прежде чем удалить пустые строки, чтобы эти номера строк отсутствовали.

[[2,44,27,27,3,4,16,49,2,2,34,38,5,27,30,23,30,3,24,41,33,27,42,29, 22,16,17], [3,36,30,21,36,35,43,20,16,26,11,8,6,48,47,8,42,25,30,22,2,37,41,33,25 ,48,36],[4,25,6,12,9,12,37,7,19,41,0,7,35,10,16,36,26,21,28,35,4,23 ,14,30,40,0,27],[5,12,31,3,2,41,10,16,47,42,18,27,12,30,16,5,2,19,7 ,11,9,14,28,27,46,21,34],[6,17,41,23,27,24,49,37,8,42,35,32,39,13,21,4 ,34,16,46,17,35,38,46,40,24,3,42],[7,1,44,22,33,38,25,29,34,29,13,42,48 ,32,19,3,26,10,8,37,0,3,4,33,27,46,39],[8,19,19,7,29,21,41,12,46,22 ,5,36,4,18,46,6,7,27,5,46,43,24,11,43,42,10,2],[9,34,8,26,9,10,28 ,26,15,5,3,46,32,28,36,44,23,20,15,41,13,11,3,44,10,9,46],[11,1,38,21 ,10,49,44,14,44,23,1,26,10,33,25,40,9,30,14,41,24,49,22,47,38,33,0],[12 ,40,40,4,36,37,32,37,37,33,7,34,3,37,26,10,28,14,38,10,8,6,26,44,2,7 ,16],[13,37,14,24,2,35,24,0,13,42,23,13,22,13,17,19,21,31,8,17,6,9,9 ,36,36,22,9],[14,19,26,2,39,36,29,39,21,17,6,16,48,28,45,0,31,45,17,14 ,38,11,40,7,34,32,11],[15,14,9,1,32,32,42,32,13,40,46,25,45,45,4,43,48 ,8,49,11,33,2,3,13,26,2,6],[16,8,4,42,38,39,7,17,43,9,13,39,16,10 ,46,37,11,28,13,0,18,4,44,18,45,33,20],[17,21,49,29,15,27,18,8,40,22,42 ,30,7,40,20,8,39,29,39,1,9,6,45,46,18,35,43],[18,46,27,0,0,22,38,27 ,14,3,17,37,4,38,27,29,19,42,23,29,44,48,0,19,31,0,47],[19,39,16,23,17 ,30,41,1,39,19,33,25,46,0,11,27,43,13,25,43,19,4,8,12,8,48,38],[21,49 ,20,48,19,43,8,42,47,1,30,46,32,32,29,16,7,7,2,15,37,4,5,47,6,6,4 ],[22,8,9,22,47,49,2,46,2,48,20,33,45,4,24,11,32,39,27,31,41,35,41,26 ,41,41,42],[23,8,30,44,7,12,13,23,33,7,12,41,0,27,12,7,11,15,2,33,45 ,33,40,49,38,22,3],[24,36,1,32,36,46,22,41,14,21,40,43,23,9,29,43,11,35 ,43,36,36,46,23,8,37,25,34],[25,5,13,21,11,5,0,41,4,6,24,16,16,36,36 ,11,21,29,11,1,35,4,25,16,43,30,19],[26,1,26,13,13,36,47,16,44,6,42,43 ,34,43,26,4,45,45,38,0,24,42,26,46,15,28,19],[27,30,11,24,3,2,37,30,12 ,40,23,34,15,48,3,37,26,49,29,25,30,36,39,3,38,26,9],[28,45,37,9,4,39 ,43,7,3,43,5,9,45,43,2,43,25,1,14,4,24,20,17,30,5,48,26],[29,15,39 ,21,18,35,23,35,13,48,14,36,40,45,26,21,36,40,18,16,24,24,19,8,24,4,16], [31,2,1,0,30,20,12,23,39,38,13,5,41,47,21,47,19,14,12,27,32,39,28,13,21 ,29,31],[32,31,48,21,29,40,19,35,11,43,32,13,3,41,29,9,37,24,44,32,33,42 ,28,41,5,45,10],[33,6,37,27,34,19,46,19,22,38,25,13,49,7,29,24,46,30,7 ,1,45,13,4,12,16,33,27],[34,19,47,15,1,22,32,16,0,31,47,49,21,9,3,6 ,47,49,36,28,4,30,32,3,17,27,33],[35,44,1,26,28,40,35,0,5,32,17,46,0 ,18,38,28,17,11,36,42,27,33,13,28,16,25,18],[36,42,7,44,14,8,46,15,9,21 ,25,35,26,33,8,11,21,16,19,33,46,30,13,24,43,18,31],[37,19,49,36,33,13,30 ,20,4,3,35,37,41,31,24,37,17,34,41,2,48,28,32,24,2,35,25],[38,30,29,21 ,37,11,19,35,24,7,11,42,18,15,18,10,49,38,23,18,30,41,46,48,14,27,44],[39 ,9,3,14,48,30,36,22,36,45,28,49,9,28,10,4,13,39,4,16,11,20,40,24,45,45 ,36],[41,4,42,39,49,27,34,20,39,42,38,5,8,3,41,30,6,14,27,12,36,43,41 ,10,22,44,6],[42,27,19,31,1,32,19,27,15,10,0,43,33,2,29,49,36,13,33,12 ,3,38,26,29,28,20,30],[43,15,6,10,23,30,34,40,4,13,31,2,1,23,16,11,24 ,14,13,24,0,32,30,40,27,47,36],[44,7,15,34,48,10,49,2,7,20,39,45,36,32 ,34,46,1,24,6,30,4,42,18,15,36,8,9],[45,28,6,11,8,45,28,33,45,21,41 ,17,26,37,41,11,18,13,36,23,6,36,27,0,15,6,41],[46,35,30,33,7,24,31,33 ,4,30,45,43,10,44,40,9,14,22,30,42,20,6,44,39,35,39,37],[47,14,44,23,12 ,11,15,32,41,49,26,45,27,1,18,39,45,29,8,36,10,6,29,5,33,30,37],[48,46 ,30,47,6,18,18,38,17,27,21,39,38,40,45,47,34,20,31,32,9,0,47,0,39,32,25 ],[49,36,36,31,12,12,5,22,12,16,10,16,38,24,41,38,9,37,21,2,45,13,29,30 ,34,16,6],[51,8,39,11,44,29,6,17,38,2,6,11,22,7,48,34,46,10,20,29,1 ,47,31,41,29,20,7]]

Другие вопросы по теме