Чтение нескольких таблиц в скрипте приложения Google

1

Я пытаюсь получить весь текст из определенной ячейки всех электронных таблиц в папке. Моя текущая проблема заключается в том, что я могу читать их только как тип файла, который не позволяет мне получить доступ к функции getRange().

Вот мой код до сих пор.

function createLog() {

  var folder = DriveApp.getFolderById("id#");//not placing actual id for privacy

  var contents = folder.getFiles();

  var data; //array for relevant text

  var file; 

  var d = new Date();

  var log = SpreadsheetApp.create("Events log "+d.getMonth()+"/"+d.getDay());



 while(contents.hasNext()) {

    file = contents.next();

     file.getRange("A6");//error is here because it is a file type not a spreadsheet



  }


  for(var i =0; i<contents.length;i++){

log.getRange(0,i).setValue(data[i]); 

  }

}
Теги:
google-apps-script

2 ответа

1
Лучший ответ

После того, как у вас есть список файлов, вам нужно открыть их с помощью SpreadsheetApp. Затем вы можете работать с таблицей, используя функции "Лист" и "Диапазон".

var spreadsheet = SpreadsheetApp.openById(file.getId());
var sheet = spreadsheet.getSheetByName('your sheet name');
var value = sheet.getRange("A6");

Увидеть:

https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet-app https://developers.google.com/apps-script/reference/drive/file#getId()

1

Ответ Cameron правильный, но я предлагаю открывать электронные таблицы по ID вместо имен, потому что в Google Диске много файлов могут иметь одно и то же имя... Ниже приведен упрощенный демо-код, чтобы проверить идею и несколько комментариев, чтобы подчеркнуть, что нужно отрегулировать

function createLog() {
  var folder = DriveApp.getFolderById("0B3###############ZMDQ");//not placing actual id for privacy
  var contents = folder.getFilesByType(MimeType.GOOGLE_SHEETS);
  var data; //array for relevant text
  var fileID,file,sheet; 
  var data = [];
  var d = new Date();
  var log = SpreadsheetApp.create("Events log "+d.getMonth()+"/"+d.getDay());

  while(contents.hasNext()) {
    file = contents.next();
    Logger.log('Sheet Name = '+file.getName());
    fileID = file.getId();
    sheet = SpreadsheetApp.openById(fileID).getSheets()[0];// this will get the first sheet in the spreadsheet, adapt to your needs
    data.push([sheet.getRange("A6").getValue()]);// add a condition before this line to get only the data you want
  }
  log.getActiveSheet().getRange(1,1,data.length, data[0].length).setValues(data); 
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню