希望我能简洁地解释一下 . 对于我对Sheets和脚本缺乏了解的人来说,这是一个问题 .
所以我每天都有一张使用此脚本的工作表:
function recordHistory() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("History");
var source = sheet.getRange("A2:C2");
var values = source.getValues();
values[0][0] = new Date();
sheet.appendRow(values[0]);
var cells = sheet.getRange("A2:A980");
cells.setNumberFormat("dd/MM/yyyy");
};
它从另一个工作表中获取数据并将其附加到列A,B,C(日期,金额,%) . 列D-G包含跟踪B&C随时间的绝对值和%变化的公式 . 目前我每天都去手动复制那些公式,但是必须有一种自动化的方法吗?推测可能的方法包括以下内容:
1)在脚本中添加一些东西以复制前一天的公式 . 这家伙写的东西可能有所帮助,但我对编码知之甚少,甚至无法理解如何将其整合到我现在的脚本中:http://googlescripts.harryonline.net/copy-formulas-down
2)编辑脚本以附加到列A-C,忽略其他列中的任何内容 . 然后我可以填写D-G中的公式(使用IF(isblank ...))并将它们留在那里 . 但是,如果我现在这样做,脚本会在D-G列中的所有内容之后的最底部的新行中添加新数据 .
3)编辑脚本并使用数组公式?我终于找到了一个按照自己的条件工作的数组公式 . 但遗憾的是,脚本仍然像上面的问题2一样起作用 . 即它将新数据添加到电子表格最底部的新行中,感知所有现有行由数组公式填充,即使它们返回的是空白单元格 .
关于如何使上述任何一个成为现实的任何想法,或任何完全不同的解决方案,都非常感谢!干杯
1 回答
我的理解是这样的 .
您希望将从另一个工作表获得的值粘贴到A列的第一个空行(因为如果A有值,则B和C也具有值) . 这也应该每天自动完成一次 .
此函数将第一个空行作为A列的整数(数字)返回 .
您的新代码应如下所示
对于每天一次的自动问题 .
要通过脚本编辑器中的对话框创建触发器,请按照下列步骤操作:
从脚本编辑器中,选择“编辑”>“当前项目的触发器” .
单击指示:未设置触发器的链接 . 点击这里,马上添加一个 .
在“运行”下,选择要触发的功能名称 . (应该是记录历史记录)
在“事件”下,选择“时间驱动”
选择每天触发的一个,以及您希望它触发的那一天 .
该脚本将以您指定的小时间隔每天自动运行您指定的功能 .
该脚本将查找A列的第一个空行,并将该行的A,B和C列的值设置为'values [0]'中的任何值 .
这样您还可以使用您想要的任何公式填充剩余的列,而不会覆盖它们或将值附加到工作表的底部 .
请注意,我指定的getFirstEmptyRow函数(我使用的)是快速但相当愚蠢 . 例如,如果中间有空行则不会考虑 . 这将使其覆盖最后一个条目(如果只有一个间隙) .
如果A列中始终存在值,那么这不是问题,如果存在间隙,请使用下面的代码 .