嘿,这是我第一次在这里发帖,通常我会在这里找到答案,但这次我不得不问。
所以我正在尝试使用月份名称创建12个文件夹,并在每个文件夹中创建31个文件,这些文件是现有电子表格文件的副本。
我成功编写了有效的脚本,但是在创建3-4个月之后停止并抛出“超过最长执行时间”,现在我做了一些阅读,并了解有5分钟的时间限制 - 以及你可以在下面的代码中看到我做事的方式并不是最有效的,现在我唯一的想法就是将原始文件数据保存在blob中,然后在创建新文件时从该blob中读取 - 这样就避免了大量的调用和使事情变得更快,但当我尝试创建文件(blob)时,我得到PDF作为输出,这不是我的意图。
function create_months(month_name)
{
var testingfolder = DocsList.getFolder("testing");
var targetFolder = testingfolder.createFolder(month_name);
var mainDoc = DocsList.getFileById('original file id');
for(var i=1;i<32;i++)
{
mainDoc.makeCopy(i).addToFolder(targetFolder);
var root = DocsList.getRootFolder();
var file = root.find(i);
file[0].removeFromFolder(root);
}
}
//array of months in hebrew
year = ['ינואר','פברואר','מרץ','אפריל','מאי','יוני','יולי','אוגוסט','ספטמבר','אוקטובר','נובמבר','דצמבר'];
function create(){
for(var i=0;i<=12;i++)
{
create_months(year[i]);
}
}
提前致谢:)
答案 0 :(得分:0)
您的代码似乎没问题,除了create
函数中的循环“错误1”(它应该是i < 12
,而不是<=
。如果您的脚本曾经有过最后,您undefined
上month_name
的{{1}}个create_months
。
如果你说3-4个月的工作,我建议你只做3个月的时间。如果你手动运行它。最简单的解决方案就是等待,然后再次运行,然后再运行,等等。
function create1stQuarter() {
for( var i = 0; i < 3; ++i )
create_months(year[i]);
}
function create2ndQuarter() {
for( var i = 3; i < 6; ++i )
create_months(year[i]);
}
function create3rdQuarter() {
for( var i = 6; i < 9; ++i )
create_months(year[i]);
}
function create4thQuarter() {
for( var i = 9; i < 12; ++i )
create_months(year[i]);
}
现在,如果你没有自己在脚本编辑器中运行它,或者你发现用户很难在电子表格菜单或其他地方点击4个itens。您可以通过自动设置触发器并在完成时自动将其删除来增强此功能。您还必须在脚本中跟踪您下一步必须创建的季度。这样简单的好地方是ScriptProperties
。
如果您正在使用触发器解决方案,我还建议您不要将时间间隔设置为低于10分钟,因为您可能会同时运行功能。如果您这样做,建议您使用LockService
来保证不会发生这种情况。
答案 1 :(得分:0)
在循环之外做你能做的事情,并且因为你已经拥有该文件而摆脱了查找。
var root = DocsList.getRootFolder();
for(var i=1;i<32;i++)
{
var daily = mainDoc.makeCopy(i);
daily.addToFolder(targetFolder);
daily.removeFromFolder(root);
}
这应该可以加快速度。