我有一个主谷歌工作表和一个包含5-6张谷歌文件夹。
如何将这5-6张纸全部添加到带有GAS的主板上?(它们都具有相同的标题。),这样我就可以通过更改文件夹ID来自动执行此操作。
我找到了下面的,它可以识别文件夹中的所有工作表,但不知道下一步。请帮帮忙。
function listFilesInFolder(folderName) {
var sheet = SpreadsheetApp.getActiveSheet();
//change the folder ID below to reflect your folder's ID (look in the URL when you're in your folder)
var folder = DriveApp.getFolderById("***ID***");
var contents = folder.getFiles();
var cnt = 0;
var file;
while (contents.hasNext()) {
var file = contents.next();
cnt++;发布于 2020-04-23 16:34:27
答案:
您可以使用SpreadsheetApp获取数据,并使用getRange().setValues()__附加值。
代码示例:
由于我不知道您的文件夹/工作表的结构,所以这有点泛化:
function appendData() {
var sheet = SpreadsheetApp.getActiveSheet();
var folder = DriveApp.getFolderById("folderId");
var files = folder.getFiles();
while (files.hasNext()) {
var tempFile = "";
var file = files.next();
// if the file is not a Sheet, skip it
if (file.getMimeType() != "application/vnd.google-apps.spreadsheet") {
tempFile = {
"title": file.getName(),
"parents": [ {
"id": folderId
}]
};
file = Drive.Files.insert(tempFile, file.getBlob(), { "convert": true });
}
var importSheet = SpreadsheetApp.openById(file.getId())
// assuming you only want to append the first sheet of each Spreadsheet:
var range = importSheet.getSheets()[0].getDataRange();
// extend the main sheet if you need to:
try {
sheet.getRange(1, 1, sheet.getDataRange().getNumRows() + range.getNumRows(), 1);
}
catch (e) {
sheet.insertRowsAfter(sheet.getDataRange().getNumRows(), range.getNumRows() + 1);
}
// remove the headers from the data to copy:
range = importSheet.getSheets()[0].getRange(2, 1, range.getNumRows() - 1, range.getNumColumns())
// copy the data:
sheet.getRange(sheet.getDataRange().getNumRows() + 1, 1, range.getNumRows(), range.getNumColumns()).setValues(range.getValues());
if (tempFile != "") {
Drive.Files.Delete(file.getId());
}
}这段代码做的事情:
如果是Excel文件,则将文件从指定的folder
SpreadsheetApp获取工作表数据
确保从Resources > Advanced Google services...菜单项启用高级驱动器服务。
参考文献:
https://stackoverflow.com/questions/61381179
复制相似问题