【发布时间】:2017-10-25 20:53:52
【问题描述】:
我有一个函数:
function reNameThisSheet() {
var active = SpreadsheetApp.getActiveSheet();
active.setName(active.getRange('A2').getValue());
}
我通过在脚本编辑器中按运行按钮手动触发,执行它需要半分钟以上(32 - 33 秒)=在所需工作表上获得所需名称。
我在复制电子表格中的最后一张工作表之后运行这个函数,在运行这个函数之前我运行另一个函数,它根据工作表索引设置 A2 中的值。
根据活动工作表的工作表索引将值设置为A2的函数是一个原生公式:
=indirect("Category!B" & (ReturnSheetIndex()-1))
其中包括自定义公式 ReturnSheetIndex():
function ReturnSheetIndex() {
var sheetIndex = SpreadsheetApp.getActiveSheet().getIndex();
Logger.log(sheetIndex);
return sheetIndex;
}
我手动触发此功能,以便我在脚本管理器中指向它并单击保存,从而立即设置 A2 中的值。
在 A2 中的值立即设置后,函数 reNameThisSheet() 需要很长时间才能重命名通过复制最后一张表创建的表。
所有这些都发生在电子表格中: https://docs.google.com/spreadsheets/d/151TbRey12wGrbdfcGI14U50b5dNcJaHCX2UKRVv6teA/edit?usp=sharing
另外的测试给出了以下结果:
当我关闭电子表格并再次打开它时,它甚至无法正确加载由复制过程创建的工作表:(
挂断了……
使用公式创建的工作表的标题:
=CONCATENATE(indirect("Category!C" & (1+findCell()))," od ", TEXT(MIN(E5:E),"dd.mm.yyyy") ," do ", TEXT(MAX(E5:E),"dd.mm.yyyy") ," :")
甚至没有出现:(
错误:正在加载数据...出现在每张纸的第一行并保持不变:(
我认为功能有问题:
function findCell() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Category");
var sheet1 = ss.getActiveSheet();
var dataRange = sheet.getDataRange();
var values = dataRange.getValues();
var student = sheet1.getRange("A2").getValue();
for (var i = 0; i < values.length; i++) {
var row = "";
for (var j = 0; j < values[i].length; j++) {
if (values[i][j] == student) {
row = values[i][j+1];
return i;
}
}
}
}
在使用重复创建的工作表的第 1 行中创建标题时包含此内容。
但有趣的是:如果我在重新打开电子表格后尝试复制最后一张工作表,一切正常。
只有在关闭和重新打开之前创建的工作表存在不加载函数 findCell() 的问题。
任何想法为什么会这样将不胜感激。谢谢。
【问题讨论】:
-
我创建了一个副本,它对我来说运行得非常快,也许可以尝试一下
-
出了点问题。请重新加载。计算时出错;某些公式可能无法成功计算。撤消上一次更改,然后重试。解雇。无法加载文件尝试再次加载或发送错误报告
-
当我按照您的建议制作副本并尝试复制最后一张纸时出现此错误。但是在重新加载复制的电子表格后,一切看起来都很好......我不明白任何解释都将非常感激。谢谢。
-
您是否尝试关闭复制的电子表格并再次打开?这样做并浏览工作表,您会发现工作表不是应有的样子......标题是错误的,A5 =sort(过滤器......的公式结果......也是错误的......都是因为功能没有正确重新计算的 findCell() ???
-
电子表格有多大?如果它有很多表格和公式,那么这可能就是为什么它似乎需要很长时间
标签: performance google-apps-script google-sheets custom-controls customization