Google apps script Google脚本:从电子表格创建批量文件夹
需要帮助, 我正在寻找在我的谷歌驱动器创建大量文件夹从电子表格中提到的信息。电子表格的标题为“A”列作为名称,“B”列作为说明,“C”列作为父文件夹名称,“D”列作为其根目录或编号 在运行脚本之后,它会做两件事。 1:给出“异常:参数不能为空:说明”错误 2:它只创建一个文件夹,名称仅作为第一个字母。e、 g列“A”中的第2行的名称为“abcd”,列“A”中的第3行的名称为“XYZ”。脚本仅从第2行创建名为“a”而不是“abcd”的文件夹Google apps script Google脚本:从电子表格创建批量文件夹,google-apps-script,flysystem-google-drive,Google Apps Script,Flysystem Google Drive,需要帮助, 我正在寻找在我的谷歌驱动器创建大量文件夹从电子表格中提到的信息。电子表格的标题为“A”列作为名称,“B”列作为说明,“C”列作为父文件夹名称,“D”列作为其根目录或编号 在运行脚本之后,它会做两件事。 1:给出“异常:参数不能为空:说明”错误 2:它只创建一个文件夹,名称仅作为第一个字母。e、 g列“A”中的第2行的名称为“abcd”,列“A”中的第3行的名称为“XYZ”。脚本仅从第2行创建名为“a”而不是“abcd”的文件夹 function onOpen() { var ui
function onOpen() {
var ui = SpreadsheetApp.getUi();
ui.createMenu('GDrive')
.addItem('Create new Folders', 'crtGdriveFolder')
.addToUi();
}
function crtGdriveFolder() {
var sheet = SpreadsheetApp.getActiveSheet();
var startRow = 2;
var numRows = sheet.getLastRow();
var maxRows = Math.min(numRows,20);
var folderid = sheet.getRange("C2").getValue();
var root = sheet.getRange("D2").getValue();
var dataRange = sheet.getRange(startRow, 1, maxRows, 2);
var data = dataRange.getValue();
var folderIterator = DriveApp.getFoldersByName(folderid);
if(!folderIterator.hasNext()) {
SpreadsheetApp.getActiveSpreadsheet().toast('Folder not Found!');
return;
}
var parentFolder = folderIterator.next();
if(folderIterator.hasNext()) {
SpreadsheetApp.getActiveSpreadsheet().toast('Folder has a non-unique name!');
return;
}
for (i in data) {
var row = data[i];
var name = row[0];
var desc = row[1];
if(root == "N" && name != "") {
var idNewFolder = parentFolder.createFolder(name).setDescription(desc).getId();
////Utilities.sleep(100);
var newFolder = DriveApp.getFolderById(idNewFolder);
} if(root == "Y" && name != "") {
var idNewFolder = DriveApp.createFolder(name).setDescription(desc).getId();
Utilities.sleep(100);
var newFolder = DriveApp.getFolderById(idNewFolder);
}
}
}
尝试
var data=dataRange.getValues()代码>(getValueS,复数形式,结尾带有S)而不是getValue(单数)
使用var maxRows=Math.min(numRows,20)代码>。有时您的范围内的数据行是否可能少于20行?如果是,它将找到空行 正如Micheil在评论中提到的,只需更改var data=dataRange.getValue()代码>
tovar data=dataRange.getValues()代码>并且它应该可以工作。目前它只获取单个单元格的值,而不是范围。这就是为什么当您尝试使用var name=row[0]获取名称时代码>它只返回该单元格值的单个字符。
否,var maxRows=Math.min(numRows,20)代码>即使少于20行也不会引起问题。感谢您对maxrows的澄清,这是我的第一个猜测。