Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google sheets 如何强制新的谷歌电子表格刷新和重新计算?_Google Sheets - Fatal编程技术网

Google sheets 如何强制新的谷歌电子表格刷新和重新计算?

Google sheets 如何强制新的谷歌电子表格刷新和重新计算?,google-sheets,Google Sheets,为此编写了一些代码,但在新的附加组件中,这些代码不再适用。文件->电子表格设置->(选项卡)计算->重新计算(3个选项) -关于变化 -在变化和每分钟 -每小时更换一次 这会影响现在、今天、RAND和RANDBETWEEN的更新频率 但是.. .. 它仅在函数参数(其范围、单元格)受此影响时更新。 来自我的示例 我用谷歌电子表格找出一个人的年龄。我有他的生日格式(dd.mm.yyyy)->这是瑞士使用的格式 =ARRAYFORMULA(IF(ISTEXT(K4:K), IF(TODAY() -

为此编写了一些代码,但在新的附加组件中,这些代码不再适用。

文件->电子表格设置->(选项卡)计算->重新计算(3个选项)
-关于变化
-在变化和每分钟
-每小时更换一次
这会影响现在、今天、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+C
  • Ctrl+V
  • 您可以在步骤1中使用Ctrl+A选择整个当前工作表。但是对于大型工作表,其他两个操作可能需要几秒钟的时间。
    了解大范围复制过程何时完成的技巧:
    在复制范围之前复制一些单个单元格:丢失虚线边框的单个单元格将是您完成大复制的通知。

    我知道您正在寻找自动刷新;也许一些来到这里的人可能会对手动按钮的快速修复感到满意(如上面建议的复选框)。实际上,我刚刚偶然发现了一个与复选框类似的解决方案:选择要刷新的单元格,然后按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得到的答案似乎是