问题描述
我想将文件从Google云端硬盘复制到我设置为的目标位置,但是.addFile似乎已被弃用。
我尝试使用moveto
和makecopy
,但似乎无法正常使用。这是我现在拥有的代码:
function copyfile() {
var ss = SpreadsheetApp.getActive();
var activeSheet = ss.getSheetByName("sheet_Patients");
var activeSheetFM = ss.getSheetByName("_FolderMaker_");
var lastRow = activeSheet.getLastRow();
var data = activeSheet.getRange(lastRow,3,1,1).getValue();
var secondData = activeSheet.getRange(lastRow,4,1).getValue();
var folder_Name = [data+ "," +secondData];
var folders = DriveApp.getFoldersByName(folder_Name);
while (folders.hasNext()) {
const folder = folders.next();
var id = folder.getId();
}
activeSheetFM.getRange(2,1).setValue(id);
var file = DriveApp.getFileById("1g25_24OTv_t5Qav2Q1hwEM_YBiPSaWWb");
var source_folder = DriveApp.getFolderById("1pqh74miSSy9WDSD3kpi02kkI6XDuXiuU");
var dest_folder = DriveApp.getFoldersByName(id);
//Logger.log(finalId);
var finalFile = file.makecopy(data+ ','+ secondData + ' ' + Utilities.formatDate(new Date(),Session.getScriptTimeZone(),'yyyy-MM-dd') + ' ' + file.getName());
dest_folder.addFile(finalFile);
source_folder.removeFile(finalFile);
}
解决方法
修改点:
- 在您的脚本中,
isMatch(imgData.data,refImg); // imgData is an actual image data object so we need to access its 'data' property // refImg is the 'data' array saved to local storage,no need to access 'data' on it
中的dest_folder
是FolderIterator。- 我认为这可能是您遇到
var dest_folder = DriveApp.getFoldersByName(id);
问题的原因。
- 我认为这可能是您遇到
- 根据您的情况,如果用
I tried using moveTo and makeCopy but i cant seem to get it to work.
检索的文件夹是目标文件夹,则可以直接使用var folders = DriveApp.getFoldersByName(folder_Name);
。 - 在当前阶段,我建议使用
const folder = folders.next();
将文件移动到特定文件夹。
当以上几点反映到您的脚本时,它如下所示。
修改后的脚本:
从:moveTo
至:
var folders = DriveApp.getFoldersByName(folder_Name);
while (folders.hasNext()) {
const folder = folders.next();
var id = folder.getId();
}
activeSheetFM.getRange(2,4,1,1).setValue(id);
var file = DriveApp.getFileById("1g25_24OTv_t5Qav2Q1hwEM_YBiPSaWWb");
var source_folder = DriveApp.getFolderById("1pqh74miSSy9WDSD3kpi02kkI6XDuXiuU");
var dest_folder = DriveApp.getFoldersByName(id);
//Logger.log(finalId);
var finalFile = file.makeCopy(data+ ','+ secondData + ' ' + Utilities.formatDate(new Date(),Session.getScriptTimeZone(),'yyyy-MM-dd') + ' ' + file.getName());
dest_folder.addFile(finalFile);
source_folder.removeFile(finalFile);
参考文献:
,说明:
您基本上需要使用makeCopy(name,destination),而目的地必须是folder
类型而不是iterator
。
因此,您应该这样做:
var dest_folder = DriveApp.getFolderById(id);
var finalFile = file.makeCopy(data+ ','yyyy-MM-dd') + ' ' + file.getName(),dest_folder);
解决方案:
function copyfile() {
var ss = SpreadsheetApp.getActive();
var activeSheet = ss.getSheetByName("sheet_Patients");
var activeSheetFM = ss.getSheetByName("_FolderMaker_");
var lastRow = activeSheet.getLastRow();
var data = activeSheet.getRange(lastRow,3,1).getValue();
var secondData = activeSheet.getRange(lastRow,1).getValue();
var folder_Name = [data+ "," +secondData];
var folders = DriveApp.getFoldersByName(folder_Name);
while (folders.hasNext()) {
const folder = folders.next();
var id = folder.getId();
}
activeSheetFM.getRange(2,1).setValue(id);
var file = DriveApp.getFileById("1g25_24OTv_t5Qav2Q1hwEM_YBiPSaWWb");
var source_folder = DriveApp.getFolderById("1pqh74miSSy9WDSD3kpi02kkI6XDuXiuU");
var dest_folder = DriveApp.getFolderById(id);
var finalFile = file.makeCopy(data+ ',dest_folder);
}