【问题标题】:apps script getValue contents only应用程序脚本仅获取值内容
【发布时间】:2020-11-04 21:42:52
【问题描述】:

我有以下工作正常:

function phototable() {
  var ss = SpreadsheetApp.openById('####');
  var lastRow = ss.getLastRow();
  ss.getRange('H'+lastRow)
  .setValue('=VLOOKUP("Form Responses_Images/"&B'+lastRow+',importrange("https://docs.google.com/spreadsheets/d/####/edit","Form Responses!U:Z"),4,false)');
}

但是,我不想将公式复制到 H 列中,而只是实际值。所以我尝试了:

ss.getRange('H'+lastRow)
  .getValue('=VLOOKUP("Form Responses_Images/"&B'+lastRow+',importrange("https://docs.google.com/spreadsheets/d/###/edit","Form Responses!U:Z"),4,false)')
  .copyTo('H'+lastRow,{contentsOnly:true});

但这并没有在 H 列中插入任何内容。有什么想法吗?

【问题讨论】:

    标签: google-apps-script google-sheets


    【解决方案1】:

    修改点:

    • 关于I have the following that works fine:,当我看到上面的脚本时,我认为getValue出现了错误。因为getValue 没有参数。我以为getValuesetValue
    • copyTo('H'+lastRow,{contentsOnly:true}),第一个参数是 thr 范围对象。
    • 为了在脚本中将公式的结果复制为字符串,需要使用flush

    当以上几点反映到你的脚本中时,它变成如下。

    修改脚本:

    function phototable() {
      var ss = SpreadsheetApp.openById('####');
      var lastRow = ss.getLastRow();
      var range = ss.getRange('H'+lastRow);
      range.setValue('=VLOOKUP("Form Responses_Images/"&B'+lastRow+',importrange("https://docs.google.com/spreadsheets/d/###/edit","Form Responses!U:Z"),4,false)');
      SpreadsheetApp.flush();
      range.copyTo(range, {contentsOnly:true});
    }
    

    注意:

    • 在您的脚本中,ss 是电子表格的第一个选项卡。请注意这一点。

    参考资料:

    【讨论】:

      【解决方案2】:

      问题/说明:

      您有两种方法可以用公式的值更新 H 列中的单元格:

      1. 如果你想用它的值更新 H 中的单元格,那么获取该值并将其设置回来:

        range.setValue(range.getValue());
        
      2. 使用copyTo() 方法:

        range.copyTo(range, {contentsOnly:true});
        

      作为奖励信息,如果源范围和目标范围不在同一个电子表格文件中,则不能使用copyTo()

      • 由于此过程发生得非常快,因此最好使用 flush() 来完成待处理的工作表更改。

      解决方案:

      function phototable() {
        var ss = SpreadsheetApp.openById('####').getSheetByName('Sheet1');
        var lastRow = ss.getLastRow();
        var range = ss.getRange('H'+lastRow);
        range.setValue('=VLOOKUP("Form Responses_Images/"&B'+lastRow+',importrange("https://docs.google.com/spreadsheets/d/####/edit","Form Responses!U:Z"),4,false)');
        SpreadsheetApp.flush();
        range.setValue(range.getValue());
        // range.copyTo(range, {contentsOnly:true}); // choose this or the previous line
      }
      

      Sheet1修改为要应用此操作的工作表名称。

      • 另外,在应用任何功能之前选择特定工作表是一种更好的做法。要按名称获取工作表,请使用 getSheetByName()

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-01-01
        • 2021-11-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多