2015-05-25 1 views
1

У меня есть листок, который мне нужно скопировать в сотни электронных таблиц в данной папке на Google Диске. Я только начинаю с скрипта, и я не знаю, как действовать, потому что сценарий ниже просто дает мне ошибку. Благодарю.Сценарий для копирования одного листа в различные электронные таблицы в определенной папке на Google Диске

function myFunction() { 
var source = SpreadsheetApp.getActiveSpreadsheet(); 
var sheet = source.getSheets()[0]; 
var folder = DriveApp.getFoldersByName('TEST FOR SCRIPT'); 
var contents = folder.getFiles(); 
for (var i = 0; i < contents.length; i++) { 
file = contents[i]; 
} 
sheet.copyTo(contents).setName('ANSWERS'); 
} 
+0

Вы можете запустить каждую строку кода, строка за строкой, с помощью отладчика. [Документация Google - отладчик] (https://developers.google.com/apps-script/troubleshooting#using_the_debugger_and_breakpoints) –

+0

как об использовании папки копирования. Надстройка: http://scripts.edlisten.com/copy-folder –

+0

@BjornBehrendt Я не понял ваш комментарий. Проблема заключается в том, чтобы скопировать лист в другие электронные таблицы, а не размножать папки. Благодарю. –

ответ

1

Я получил этот ответ, кто-то в пределах сообщества в Google+, и она работает:

function copyToSheets() { 
var source = SpreadsheetApp.getActiveSpreadsheet(); 
var sheet = source.getSheets()[1]; 

var folders = DriveApp.getFoldersByName('ID'); 
var firstFolder = folders.next(); 
var folderFiles = firstFolder.getFiles(); 
var thisFile; 

while (folderFiles.hasNext()) { 
    thisFile = folderFiles.next(); 
    var currentSS = SpreadsheetApp.openById(thisFile.getId()); 
    sheet.copyTo(currentSS); 
    currentSS.getSheets()[currentSS.getSheets().length-1].setName('NAME'); 
    } 
} 
0

Эта строка кода:

var folder = DriveApp.getFoldersByName('TEST FOR SCRIPT'); 

возвращает FolderIterator. Даже если у вас есть только одна папка с этим именем, метод getFoldersByName() возвращает объект, который вы не можете использовать непосредственно с помощью метода getFiles(). Метод getFiles() работает с классом файлов. Он недоступен для Итератора Папки. После того, как вы получите Итератор папки, вы должны использовать метод next(), чтобы получить первую (и, возможно, только) папку в объекте.

function getAllFilesInFolder() { 
    var source = SpreadsheetApp.getActiveSpreadsheet(); 

    var sheet = source.getSheets()[0]; 
    var folders = DriveApp.getFoldersByName('Folder Name Here'); 
    var firstFolder = folders.next(); 
    var folderFiles = firstFolder.getFiles(); 
    var thisFile; 

    while (folderFiles.hasNext()) { 
    thisFile = folderFiles.next(); 
    Logger.log(thisFile.getName()); 
}; 
}; 

А также использовать hasNext() перебрать файлы. Кажется, что не существует свойства length объекта Files.

+0

Спасибо @sandygood, но, как я упоминал ранее, из-за моего незнания в коде, я не знаю, как продолжить то, что вы отправили. Не могли бы вы закончить код, чтобы другие могли найти полный ответ и просто скопировать код? Что я поставил в конце того, что вы мне прислали, чтобы, наконец, скопировать лист в другие электронные таблицы? Благодарю. –

+0

Более конкретно, если я просто добавлю sheet.copyTo (thisFile) .setName ('ANSWERS'); в конце того, что вы мне прислали, он говорит мне: «Не могу найти метод copyTo (File)». –

Смежные вопросы