#google-apps-script #google-sheets
#google-apps-script #google-sheets
Вопрос:
У меня есть 2 основные функции, которые я хочу запустить за один раз test_FolderMaker();
, и copyfile();
проблема в том, что ошибка гласит «нет папки» и test_FolderMaker();
не создает папку при первом запуске и copyfile();
не будет запускаться без папки, созданной первой основной функцией, но при втором запуске она запускается, и ошибка не выполняется.функция работает. Это то, что у меня есть на данный момент:
function new_Patient_Record(){
var folder_Maker = test_FolderMaker();
if (folder_Maker = true){
(copyfile()
);}
}
function test_FolderMaker()
{
var t = new Date();
var ids = false;
var res = createFoldersTasks_(ids);
Logger.log(res);
Logger.log('Time to run the script = ' (new Date() -t) ' ms.');
}
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,2,1,1).getValue();
var secondData = activeSheet.getRange(lastRow,3,1,1).getValue();
var folder_Name = [data ", " secondData];
var folders = DriveApp.getFoldersByName(folder_Name);
var dest_folder;
if (folders.hasNext()) {
dest_folder = folders.next();
} else {
throw new Error("No folder.")
}
activeSheetFM.getRange(2,4,1,1).setValue(dest_folder.getId());
var Checkup_Form = DriveApp.getFileById("106-03HR1uYZPIYX-9bOFxpcpLjo-qolnus13Dqtyr2k");
var VDH_Form = DriveApp.getFileById("1ZwSvFIzIppGVw29XPAs5o7cgnrbvS3uE8e-nz2fFrDk");
var excel_File = DriveApp.getFileById("1Xidcg8jPA9fFJeH02NlXvMhBmkIQi-9-");
var final_Excel_File = excel_File.makeCopy(data ', ' secondData ' ' Utilities.formatDate(new Date(), Session.getScriptTimeZone(), 'yyyy-MM-dd') ' ' excel_File.getName());
final_Excel_File.moveTo(dest_folder);
var final_VDH_Form = VDH_Form.makeCopy(data ', ' secondData ' ' Utilities.formatDate(new Date(), Session.getScriptTimeZone(), 'yyyy-MM-dd') ' ' VDH_Form.getName());
final_VDH_Form.moveTo(dest_folder);
var final_Checkup_Form = Checkup_Form.makeCopy(data ', ' secondData ' ' Utilities.formatDate(new Date(), Session.getScriptTimeZone(), 'yyyy-MM-dd') ' ' Checkup_Form.getName());
final_Checkup_Form.moveTo(dest_folder);
}
Когда я разделяю их оба запуска, это действительно работает, поэтому я думаю, что с функцией что-то не так new_Patient_Record()
. Спасибо
function createFoldersTasks_(ids)
{
var t = new Date();
getSettings_();
var d1 = CCC_.STR_DELIMEER1;
var d2 = CCC_.STR_DELIMEER2;
var allids = CCC_.STR_IDS_FOLDERMAKER.split(d2);
var allFolderIds = CCC_.STR_FOLDERIDS_FOLDERMAKER.split(d2);
var allFolderPaths = CCC_.STR_PATHS_FOLDERMAKER.split(d2);
if (ids) { var taskIds = ids.split(d1); }
else { var taskIds = allids; }
// loop tasks
var folderMaker = {}, index;
var delim = CCC_.STR_PATHDELIM_FOLDERMAKER;
for (var i = 0; i < taskIds.length; i )
{
index = allids.indexOf(taskIds[i]);
folderMaker.names = allFolderPaths[index].split(delim);
folderMaker.folderId = allFolderIds[index];
createFolderByTask_(folderMaker);
}
return 0;
}
Комментарии:
1. Попробуйте поставить
Utilities.sleep(500)
послеvar folder_Maker = test_FolderMaker();
2. Кроме того, что
createFoldersTasks_()
делать?3. Utilities.sleep(500) не помогает, createFoldersTasks_() — это серия функций, которые создают папки, которые я получил в Интернете. позвольте мне обновить его.
4. Часто при последовательном запуске нескольких функций рекомендуется разделять их с помощью SpreadsheetApp.flush();
5. Всякий раз, когда функции выполняют большую запись в электронную таблицу, например, setValues();