Получите таблицу Google по имени вместо идентификатора - PullRequest
0 голосов
/ 04 февраля 2019

Я пытаюсь импортировать данные из другой таблицы и нашел рабочий код ниже.Как получить файл по имени, а не по идентификатору?

(идентификатор файла меняется каждый месяц, но имя файла будет оставаться неизменным.)

function ImportRange() {


var values = SpreadsheetApp.openById('xxxxxx').
  getSheetByName(‘xxx').getRange('A1:D100').getValues();
 SpreadsheetApp.getActiveSheet()
                .getRange( 1, 1, values.length, values[0].length )
                .setValues(values);

}

1 Ответ

0 голосов
/ 04 февраля 2019

Вы можете выполнить итерации электронных таблиц с помощью DriveApp, чтобы получить их все, а затем сравнить их по имени:

/* 
The function will iterate through spreadsheets in a given folder and return DriveApp file object (https://developers.google.com/apps-script/reference/drive/file)
folderId — string — the id of the folder to search for the target spreadsheet; root folder will be used if nothing is passed
targetSpreadsheetName - string - the name of the spreadsheet to be found
*/
function getSpreadsheet(folderId, targetSpreadsheetName) {
  var folder = folderId ? DriveApp.getFolderById(folderId) : DriveApp.getRootFolder();
  var spreadsheets = folder.getFilesByType(MimeType.GOOGLE_SHEETS);
  while (spreadsheets.hasNext()) {
    var spreadsheet = spreadsheets.next();
    if (spreadsheet.getName() === targetSpreadsheetName) {
      return spreadsheet.getId();
    }
  }
  return null;
}

Тогда в вашей функции ImportRange вы будете использовать ее следующим образом:

function ImportRange() {
var id = getSpreadsheet('', 'Untitled spreadsheet'); //this way you'd get a spreadsheet named 'Untitled spreadsheet' in your root folder
if (id === null) return 'No spreadsheet';
var values = SpreadsheetApp.openById(id). 
  getSheetByName('xxx').getRange('A1:D100').getValues();
 SpreadsheetApp.getActiveSheet()
                .getRange( 1, 1, values.length, values[0].length )
                .setValues(values);

}

Хотя эта функция выглядит довольно медленной (в моем случае сценарию потребовалось около 1 секунды, чтобы перебрать одну таблицу), и я бы не рекомендовал запускать ее каждый раз при запуске Import range.Если идентификатор вашей целевой таблицы меняется каждый месяц, было бы разумнее сохранить его где-нибудь - в технической таблице или свойства документа / скрипта - и получить его оттуда.Таким образом, вам нужно будет запускать getSpreadsheet только один раз в месяц с устанавливаемым триггером .

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