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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/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 apps script 如何使用Google脚本用粘贴值覆盖单元格函数_Google Apps Script_Google Sheets - Fatal编程技术网

Google apps script 如何使用Google脚本用粘贴值覆盖单元格函数

Google apps script 如何使用Google脚本用粘贴值覆盖单元格函数,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我有一个进行实时计算的数据库,但一旦当天添加到数据库中的新数据得到处理,我实际上只想在这些单元格上复制+粘贴值,以便公式的结果是固定的,不能再更改 我当前使用的脚本是: function myFunction() { var sh = SpreadsheetApp.getActiveSpreadsheet(); var ss = sh.getActiveSheet(); var r = ss.getRange(1,2,ss.getLastRow()); var vals = r.

我有一个进行实时计算的数据库,但一旦当天添加到数据库中的新数据得到处理,我实际上只想在这些单元格上复制+粘贴值,以便公式的结果是固定的,不能再更改

我当前使用的脚本是:

function myFunction() {
  var sh = SpreadsheetApp.getActiveSpreadsheet();
  var ss = sh.getActiveSheet();
  var r = ss.getRange(1,2,ss.getLastRow());
  var vals = r.getValues();
  for(var i =0;i<vals.length;i++){
      ss.getRange(i+1,2).setValue(ss.getRange(i+1,2).getValue());
  }
}
函数myFunction(){
var sh=SpreadsheetApp.getActiveSpreadsheet();
var ss=sh.getActiveSheet();
var r=ss.getRange(1,2,ss.getLastRow());
var vals=r.getValues();
对于(var i=0;i
function myFunction(){
var sh=SpreadsheetApp.getActive();
var ss=sh.getActiveSheet();
var rg=ss.getRange(1,2,ss.getLastRow());
var vals=rg.getDisplayValues();
对于(var i=0;i
function myFunction(){
var sh=SpreadsheetApp.getActive();
var ss=sh.getActiveSheet();
var rg=ss.getRange(1,2,ss.getLastRow());
var vals=rg.getDisplayValues();
对于(var i=0;i尝试以下方法:

function myFunction() {
    var sh = SpreadsheetApp.getActive();
    var ss = sh.getActiveSheet();
    var rg = ss.getRange(1,2,ss.getLastRow());

    var vals     = rg.getValues();   // get values
    var formulas = rg.getFormulas(); // get formulas

    // merge values & formulas
    var data = formulas.map((row,row_index) => 
                    row.map((cel, cel_index) => 
        { return (cel) ? cel : vals[row_index][cel_index] }));    

    rg.setFormulas(data);            // output
}
更正版本:

function copy_values_and_formulas() {
    var sh = SpreadsheetApp.getActive();
    var ss = sh.getActiveSheet();
    var rg = ss.getRange(1,2,ss.getLastRow());
    
    var vals     = rg.getValues();   // get values
    var formulas = rg.getFormulas(); // get formulas
    
    // merge values & formulas
    var data = vals.map((row, row_index) => 
                row.map((cel, cel_index) => 
        { return (cel == 0) ? formulas[row_index][cel_index] : cel }));

    rg.setFormulas(data);            // output
}
试试这个:

function myFunction() {
    var sh = SpreadsheetApp.getActive();
    var ss = sh.getActiveSheet();
    var rg = ss.getRange(1,2,ss.getLastRow());

    var vals     = rg.getValues();   // get values
    var formulas = rg.getFormulas(); // get formulas

    // merge values & formulas
    var data = formulas.map((row,row_index) => 
                    row.map((cel, cel_index) => 
        { return (cel) ? cel : vals[row_index][cel_index] }));    

    rg.setFormulas(data);            // output
}
更正版本:

function copy_values_and_formulas() {
    var sh = SpreadsheetApp.getActive();
    var ss = sh.getActiveSheet();
    var rg = ss.getRange(1,2,ss.getLastRow());
    
    var vals     = rg.getValues();   // get values
    var formulas = rg.getFormulas(); // get formulas
    
    // merge values & formulas
    var data = vals.map((row, row_index) => 
                row.map((cel, cel_index) => 
        { return (cel == 0) ? formulas[row_index][cel_index] : cel }));

    rg.setFormulas(data);            // output
}

感谢您的回复。这仍然删除了数据集下单元格中的公式。我已设置了一个示例数据集。在此情况下,我希望修复B1:B13中的计算,但将公式保留在B14:B中。抱歉,我没有链接到此网站的电子表格。好的。根据书面解释,您有什么想法。列中的所有单元格B的公式为:如果(A1=”,“”和(1+1))在单元格B1的情况下,A1:A13包含数据,因此B1:B13有结果2。我想要实现的是将结果“2”固定为B1:B13,但保留B14:B中的公式。有什么想法吗?感谢您的回答。这仍然从数据集下的单元格中删除了公式。我已设置了一个示例数据集。在这方面,我希望修复在B1:B13中计算,但将公式保留在B14:B中。抱歉,我没有链接到此网站的电子表格。好的。根据书面解释,你有什么想法。B列中的所有单元格都有公式=IF(A1=”,“”,SUM(1+1))对于单元格B1,A1:A13包含数据,因此B1:B13有结果2。我想要实现的是将结果“2”固定为B1:B13,但保留B14:B中的公式。有什么想法吗?您好。这似乎不会改变工作表上的任何内容。您可以在这里看到我的示例工作表:左侧的列表是在脚本之前如何显示的正在运行。右边的表格是>>>之后的结果,任何有结果的单元格都将“修复”,而没有结果的单元格仍将显示公式。如果有任何想法,都将不胜感激。这看起来像是一种蛮力,因为您的链接上写着“拒绝访问”(使用公共链接很有意义)。我已更改了行
var=data…
,希望有帮助。请再试一次。完美!!感谢您的帮助:)我已成功地运行了此代码,但我收到错误
的大多数时间都超过了最长执行时间。
。我想知道这是否是因为数据集太大(10列,刚刚超过3200行),因此我将getRange更改为
var rg=ss.getRange(3100,12,ss.getLastRow(),10)
因此脚本的工作范围从第3100行开始,但这并没有解决问题。你有什么想法吗?据我所知,你做得很好。GAS有限制:看起来你已经超过了其中的一些限制。是的,100行x 10列看起来与大数据不完全一样。但我会尝试处理50或1行0行只是为了看看它是如何运行的。如果运行顺利,您可以执行循环并在几个步骤中处理所有数据。您好。这似乎不会改变工作表上的任何内容。您可以在此处看到我的示例工作表:左侧的列表是脚本运行之前的显示方式。右侧的表是>>>任何具有结果的单元格之后的结果t将“修复”,而没有结果的单元格将继续显示公式。如果您有任何想法,我们将不胜感激。由于您的链接显示“拒绝访问”(使用公共链接是有意义的)。我已更改了行
var=data…
,希望有帮助。再试一次。非常好!!感谢您的帮助:)我已经成功地运行了这段代码,但是我收到错误的大部分时间都超过了最大执行时间。我想知道这是否是因为数据集太大(10列,3200多行),所以我将getRange更改为
var rg=ss.getRange(3100,12,ss.getLastRow(),10)
因此脚本的工作范围从第3100行开始,但这并没有解决问题。你有什么想法吗?据我所知,你做得很好。GAS有限制:看起来你已经超过了其中的一些限制。是的,100行x 10列看起来与大数据不完全一样。但我会尝试处理50或1行0行只是为了查看它的运行情况。如果运行良好,您可以执行循环并在几个步骤中处理所有数据。