Javascript 如何使用应用程序脚本将一个子文件夹中的某些电子表格中的值复制到另一个电子表格中
我需要复制值从子文件夹中的几个电子表格中,为此我研究了如何使用如下脚本在文件夹和子文件夹之间搜索文件Javascript 如何使用应用程序脚本将一个子文件夹中的某些电子表格中的值复制到另一个电子表格中,javascript,google-apps-script,google-sheets,Javascript,Google Apps Script,Google Sheets,我需要复制值从子文件夹中的几个电子表格中,为此我研究了如何使用如下脚本在文件夹和子文件夹之间搜索文件 function listFolders(folder) { folder = folder || DriveApp.getRootFolder(); var name = folder.getName(); var files = folder.getFiles(); while ( files.hasNext() ) { Logger.log(name + " :: " +
function listFolders(folder) {
folder = folder || DriveApp.getRootFolder();
var name = folder.getName();
var files = folder.getFiles();
while ( files.hasNext() ) {
Logger.log(name + " :: " + files.next().getName());
}
var subfolders = folder.getFolders();
while (subfolders.hasNext()) {
listFolders(subfolders.next());
}
在此之前,它将在所有文件夹的文件夹和子文件夹之间进行搜索
文件,然后我试图实现一个条件,如果它找到文件夹“测量”,然后从文件中复制一些数据到另一个电子表格,但它没有实现条件,我不知道为什么
if( folder == "Measurement"){
while (files.hasNext()) {
var file = files.next();
var bring = SpreadsheetApp.openById(file.getId());
var srceSheet = bring.getSheets()[0];
var lastRow = srceSheet.getLastRow();
var range = srceSheet.getRange("A"+(lastRow)+":D"+(lastRow));
var values = range.getValues();
var ss = SpreadsheetApp.getActiveSpreadsheet();
var SSsheet = ss.getSheetByName("Sheet 1");
var getRow = SSsheet.getLastRow() + 1;
var ssRange = SSsheet.getRange(getRow, 2, values.length,
values[0].length);
ssRange.setValues(values);
}
}
}
我不知道我会有什么错误,如果条件声明不正确,或者我调查的另一种方法是将具有此条件的文件名
'全文包含“hello world”
或此其他'名称包含“hello”和name包含“再见”
预先声明一个包含此条件的变量作为var file=DriveApp.getRootFolder().searchFiles('name包含“hello”和name包含“再见”)
谢谢你的帮助,我能够解决我的问题,进行了更多的调查,我找到了这个页面的方法file.list
,我的脚本是这样的
function SearchFiles() {
var searchFor ='fullText contains "Test"';
var names =[];
var fileIds=[];
var files = DriveApp.searchFiles(searchFor);
while (files.hasNext()) {
var file = files.next();
var fileId = file.getId();
fileIds.push(fileId);
var name = file.getName();
names.push(name);
var bring = SpreadsheetApp.openById(file.getId());
var dePr = bring.getSheetByName("Sheet1 ");
var veEq = bring.getSheetByName("Sheet2 ");
var ltRowDe = dePr.getLastRow();
var rgDe = dePr.getRange("B"+(ltRowDe)+":E"+(ltRowDe));
var valDe = rgDe.getValues();
var ltRowVe = veEq.getLastRow();
var rgVe = veEq.getRange("O"+(ltRowVe)+":P"+(ltRowVe));
var valVe = rgVe.getValues();
var ss = SpreadsheetApp.getActiveSpreadsheet();
var ssDe = ss.getSheetByName("Sheet 1");
var getRowDe = ssDe.getLastRow() + 1;
var ssRgDe = ssDe.getRange(getRowDe, 5, valDe.length, valDe[0].length).setValues(valDe);
var ssVe = ss.getSheetByName("Sheet 2");
var getRowVe = ssVe.getLastRow() + 1;
var ssRgVe = ssVe.getRange(getRowVe, 7, valVe.length, valVe[0].length).setValues(valVe);
}
}
基本上,我的脚本所做的是,它通过驱动器对所有名为
Test
的文件执行搜索,并将您指定的所有这些文件的工作表的最后数据带到另一个电子表格中。谢谢你的帮助,我希望有一天有人会提供这个脚本=D如果原始文件夹始终是“Measurement”,那么最好获取其ID并使用DriveApp.getFolderById(ID)
而不是遍历所有文件夹。另一件事是变量folder
属于folder
类型,因此无法将其与字符串“Measurement”进行比较。如果(folder.getName()=“Measurement”)是,您可以更改为if(folder.getName()=“Measurement”)
是的,源文件夹将始终被称为Measurement
,问题是它不仅仅是一个文件夹,而且许多文件夹被称为Measurement
,因此我无法用ID声明方法,谢谢,您让我意识到我放弃了一些东西,但现在它仍然不起作用,我会继续尝试,我希望有人能指导我解决这个问题:d这行代码:if(folder==“Measurement”){
如果folder
不是字符串,则它永远不会相等。您应该有一个名为folderName
的变量,并在代码中使用它。如果folder
是文件夹对象,则它永远不会等于字符串“Measurement”我将假设名为folder
的变量是文件夹对象,而不是文件夹名称。似乎您需要彻底调试代码。