Google sheets 如何强制新的谷歌电子表格刷新和重新计算?
为此编写了一些代码,但在新的附加组件中,这些代码不再适用。文件->电子表格设置->(选项卡)计算->重新计算(3个选项)Google sheets 如何强制新的谷歌电子表格刷新和重新计算?,google-sheets,Google Sheets,为此编写了一些代码,但在新的附加组件中,这些代码不再适用。文件->电子表格设置->(选项卡)计算->重新计算(3个选项) -关于变化 -在变化和每分钟 -每小时更换一次 这会影响现在、今天、RAND和RANDBETWEEN的更新频率 但是.. .. 它仅在函数参数(其范围、单元格)受此影响时更新。 来自我的示例 我用谷歌电子表格找出一个人的年龄。我有他的生日格式(dd.mm.yyyy)->这是瑞士使用的格式 =ARRAYFORMULA(IF(ISTEXT(K4:K), IF(TODAY() -
-关于变化
-在变化和每分钟
-每小时更换一次
这会影响现在、今天、RAND和RANDBETWEEN的更新频率 但是.. .. 它仅在函数参数(其范围、单元格)受此影响时更新。
来自我的示例
我用谷歌电子表格找出一个人的年龄。我有他的生日格式(dd.mm.yyyy)->这是瑞士使用的格式
=ARRAYFORMULA(IF(ISTEXT(K4:K), IF(TODAY() - DATE(YEAR(TODAY()), MONTH(REGEXREPLACE(K4:K, "[.]", "/")), DAY(REGEXREPLACE(K4:K, "[.]", "/"))) > 0, YEAR(TODAY()) - YEAR(REGEXREPLACE(K4:K, "[.]", "/")) + 1, YEAR(TODAY()) - YEAR(REGEXREPLACE(K4:K, "[.]", "/"))), IF(LEN(K4:K) > 0, IF(TODAY() - DATE(YEAR(TODAY()), MONTH(K4:K), DAY(K4:K)) > 0, YEAR(TODAY()) - YEAR(K4:K) + 1, YEAR(TODAY()) - YEAR(K4:K)), "")))
我今天使用的是TODAY()
,我进行了上述的重新计算设置。->但没有自动刷新:-(仅当我在函数要查找的范围内更改某些值时,它才会更新 为此,我写了一个谷歌脚本(工具->脚本编辑器…)
function onOpen() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheetMaster = ss.getSheetByName("Master");
var sortRange = sheetMaster.getRange(firstRow, firstColumn, lastRow, lastColumn);
sortRange.getCell(1, 2).setValue(sortRange.getCell(1, 2).getValue());
}
您需要为firstRow
,firstColumn
,lastRow
,lastColumn
当电子表格打开时,脚本激活,将一个单元格的内容再次写入同一单元格。这足以触发TODAY()
函数
请从Edward Moffett处查找有关该链接的更多信息。
致以最诚挚的问候,Christoph对我有效的方法是在第一列之前插入一列,然后立即删除它。
基本上,做一个会影响工作表中所有触发重新计算的单元格的更改。旧问题…不过,只需在工作表中的某个位置添加一个复选框。选中或取消选中该复选框将刷新单元格公式。当问题出现在IF条件的重新计算中时,我添加
和(ISDATE(NOW());条件)
以便强制单元格根据
如前所述,在电子表格设置的“计算”选项卡中设置了什么
这是因为NOW
是受计算设置影响的函数之一,并且ISDATE(NOW())
始终返回TRUE
例如,在我的一张工作表中,我使用以下条件检查是否已经创建了名为C1
的工作表:
=IF(ISREF(INDIRECT(C$1&"!A1")); TRUE; FALSE)
在本例中,C1=“二月”
,因此当创建具有此名称的工作表时,我希望条件变为TRUE
,但没有发生。为了强制更新,我更改了计算设置并使用:
=IF(AND( ISDATE(NOW()) ; ISREF(INDIRECT(C$1&"!A1")) ); TRUE; FALSE)
快速,但手动
更新
NOW()
,TODAY()
,RAND()
,或randbween()
公式
按Backspace键← 或删除任何空单元格,根据NOW()
、TODAY()
、RAND()
、或randbween()
(通常在整个电子表格的所有表格中)立即触发公式的重新计算
(如果手头没有空单元格,则可以删除已填充的单元格,然后使用Ctrl+z撤消该单元格。)
INDIRECT()
不幸的是,默认情况下公式不会像这样更新
更新INDIRECT()
公式
您可以将INDIRECT()
公式的(范围)单元格粘贴到其自身上,以更新该单元格:
了解大范围复制过程何时完成的技巧:
在复制范围之前复制一些单个单元格:丢失虚线边框的单个单元格将是您完成大复制的通知。我知道您正在寻找自动刷新;也许一些来到这里的人可能会对手动按钮的快速修复感到满意(如上面建议的复选框)。实际上,我刚刚偶然发现了一个与复选框类似的解决方案:选择要刷新的单元格,然后按CTRL键和“+”键。在Office 365 v16中似乎可以工作;希望它能为其他需要的人工作。插入“复选框”。每次勾选或取消勾选复选框时,工作表都会重新计算。如果将复选框的文本大小设置为2,颜色设置为几乎黑色,单元格阴影设置为黑色,则它将成为一个重新计算的按钮。现有答案中没有一个对我有效,但这种方法确实有效。 问题 我看到很多单元格显示
#REF!
。这些单元格是我使用“复制到>现有工作表”从另一个Google工作表文档复制的工作表中的单元格。如果我在任何单元格中按Enter键,它会正确重新计算,但我不想对数百万个单元格执行此操作
我的答案
我运行了这个recalcSheet()
脚本。每个单元格几乎需要0.5秒,速度非常慢,但比手动修复每个单元格要快
函数recalcSheet(){
var spreadsheet=SpreadsheetApp.getActiveSpreadsheet()
var sheet=spreadsheet.getSheetByName(“将您的工作表名称放在这里”);//https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet#getsheetbynamename
//var range=sheet.getSelection().getActiveRange();
//var范围=sheet.getRange('A6:D6');
var range=sheet.getDataRange();
重新校准范围(范围、电子表格);
}
函数范围(范围、电子表格){
//以下结构https://stackoverflow.com/a/52123839/470749
Logger.log('Range:'+Range.getA1Notation());
var numRows=range.getNumRows();
var numCols=range.getNumColumns();
var startRow=range.getRow();
var startCol=range.getColumn();
Logger.log('row:'+startRow);
Logger.log('col:'+startCol);
Logger.log('numRows:'+numRows);
Logger.log('numCols:'+numCols);
对于(var r=1;r不是真的,我指的是刷新和重新校准自动地从helped meThis得到的答案似乎是