需要帮助调试 Google Apps 脚本代码,用于更新 Google 云端硬盘中的数百个文件
Need help debugging Google Apps Script code intended to update hundreds of files in Google Drive
我工作的公司刚刚更新了其品牌,影响了保存到共享 Google 驱动器的数百个 Excel 和 PowerPoint 文件。有一个团队正在努力更新文件。我的挑战是找到一种有效的方法来添加新文件并删除 Google 驱动器中的旧文件。
我创建了一个 Google Sheet 来捕获当前文件 ID、新文件 ID 和文件夹 ID,以及以下 Google Apps 脚本代码。代码抛出以下错误。
Exception: Unexpected error while getting the method or property getFileById on object DriveApp.
BulkUpdate @ Bulk Update.gs:25
希望有人能帮我调试?我是新手,碰壁了
function BulkUpdate() {
// This constant is added to updated files
var success = "Success"
// Define range
var sheet = SpreadsheetApp.getActiveSheet();
var firstRow = 2; // First row of data to process
var lastRow = sheet.getLastRow(); // Last row of data to process
// Fetch range
var dataRange = sheet.getRange(firstRow, 1, lastRow, 4);
// Fetch values for each row in range
var data = dataRange.getValues();
for (var i = 0; data.length; ++i) {
var row = data[i];
var folderId = row[0]; // First column
var currentFileId = row[1]; // Second column
var newFileId = row[2]; // Third column
var confirmation = row[3]; // Fourth column
// Copy new file to folder and trash current file
if (confirmation !== success) {
var currentFile = DriveApp.getFileById(currentFileId);
var newFile = DriveApp.getFileByID(newFileId);
var folder = DriveApp.getFolderById(folderId);
newFile.makeCopy(folder);
currentFile.setTrashed(true);
// Update spreadsheet
sheet.getRange(firstRow + i, 4).setValue(success);
SpreadsheetApp.flush();
}
}
// Create a popup window
SpreadsheetApp.getUi().alert("Updates Complete");
}
我看到一个错字
var currentFile = DriveApp.getFileById(currentFileId);
var newFile = DriveApp.getFileByID(newFileId);
getFileByID
id 全部大写,我猜根据API文档应该是getFileById
。另外,尝试打印 currentFileId
和 newFileId
.
谢谢大家。结果我需要在定义 'dataRange' 时从 lastRow
中减去一个。您将在下面找到最终代码以供参考。
function onOpen() {
var sheet = SpreadsheetApp.getActive();
var menuItems = [{name: 'Update Google Drive', functionName: 'bulkUpdate'}];
sheet.addMenu('Menu', menuItems);
}
function bulkUpdate() {
// This constant is added to updated files
var success = "Success"
// Define range
var sheet = SpreadsheetApp.getActiveSheet();
var firstRow = 2; // First row of data to process
var firstColumn = 1; // First column of data to process
var lastRow = sheet.getLastRow(); // Last row of data to process
var lastColumn = 6; // Last column of data to process
// Fetch range
var dataRange = sheet.getRange(firstRow, firstColumn, lastRow - 1, lastColumn);
// Fetch values for each row in range
var data = dataRange.getValues();
for (i = 0; i < data.length; i++) {
var row = data[i];
var folderId = row[1]; // Second column
var currentFileId = row[3]; // Fourth column
var newFileId = row[4]; // Fifth column
var confirmation = row[5]; // Sixth column
// Copy new file to folder and trash current file
if (confirmation !== success) {
var currentFile = DriveApp.getFileById(currentFileId);
var newFile = DriveApp.getFileById(newFileId);
var folder = DriveApp.getFolderById(folderId);
newFile.moveTo(folder);
currentFile.setTrashed(true);
// Update spreadsheet
sheet.getRange(firstRow + i, 6).setValue(success);
SpreadsheetApp.flush();
continue;
}
}
}
我工作的公司刚刚更新了其品牌,影响了保存到共享 Google 驱动器的数百个 Excel 和 PowerPoint 文件。有一个团队正在努力更新文件。我的挑战是找到一种有效的方法来添加新文件并删除 Google 驱动器中的旧文件。
我创建了一个 Google Sheet 来捕获当前文件 ID、新文件 ID 和文件夹 ID,以及以下 Google Apps 脚本代码。代码抛出以下错误。
Exception: Unexpected error while getting the method or property getFileById on object DriveApp.
BulkUpdate @ Bulk Update.gs:25
希望有人能帮我调试?我是新手,碰壁了
function BulkUpdate() {
// This constant is added to updated files
var success = "Success"
// Define range
var sheet = SpreadsheetApp.getActiveSheet();
var firstRow = 2; // First row of data to process
var lastRow = sheet.getLastRow(); // Last row of data to process
// Fetch range
var dataRange = sheet.getRange(firstRow, 1, lastRow, 4);
// Fetch values for each row in range
var data = dataRange.getValues();
for (var i = 0; data.length; ++i) {
var row = data[i];
var folderId = row[0]; // First column
var currentFileId = row[1]; // Second column
var newFileId = row[2]; // Third column
var confirmation = row[3]; // Fourth column
// Copy new file to folder and trash current file
if (confirmation !== success) {
var currentFile = DriveApp.getFileById(currentFileId);
var newFile = DriveApp.getFileByID(newFileId);
var folder = DriveApp.getFolderById(folderId);
newFile.makeCopy(folder);
currentFile.setTrashed(true);
// Update spreadsheet
sheet.getRange(firstRow + i, 4).setValue(success);
SpreadsheetApp.flush();
}
}
// Create a popup window
SpreadsheetApp.getUi().alert("Updates Complete");
}
我看到一个错字
var currentFile = DriveApp.getFileById(currentFileId);
var newFile = DriveApp.getFileByID(newFileId);
getFileByID
id 全部大写,我猜根据API文档应该是getFileById
。另外,尝试打印 currentFileId
和 newFileId
.
谢谢大家。结果我需要在定义 'dataRange' 时从 lastRow
中减去一个。您将在下面找到最终代码以供参考。
function onOpen() {
var sheet = SpreadsheetApp.getActive();
var menuItems = [{name: 'Update Google Drive', functionName: 'bulkUpdate'}];
sheet.addMenu('Menu', menuItems);
}
function bulkUpdate() {
// This constant is added to updated files
var success = "Success"
// Define range
var sheet = SpreadsheetApp.getActiveSheet();
var firstRow = 2; // First row of data to process
var firstColumn = 1; // First column of data to process
var lastRow = sheet.getLastRow(); // Last row of data to process
var lastColumn = 6; // Last column of data to process
// Fetch range
var dataRange = sheet.getRange(firstRow, firstColumn, lastRow - 1, lastColumn);
// Fetch values for each row in range
var data = dataRange.getValues();
for (i = 0; i < data.length; i++) {
var row = data[i];
var folderId = row[1]; // Second column
var currentFileId = row[3]; // Fourth column
var newFileId = row[4]; // Fifth column
var confirmation = row[5]; // Sixth column
// Copy new file to folder and trash current file
if (confirmation !== success) {
var currentFile = DriveApp.getFileById(currentFileId);
var newFile = DriveApp.getFileById(newFileId);
var folder = DriveApp.getFolderById(folderId);
newFile.moveTo(folder);
currentFile.setTrashed(true);
// Update spreadsheet
sheet.getRange(firstRow + i, 6).setValue(success);
SpreadsheetApp.flush();
continue;
}
}
}