1

我有以下工作正常:

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)');
}

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

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 列中插入任何内容。有什么想法吗?

4

2 回答 2

2

修改点:

  • 关于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是电子表格的第一个选项卡。请注意这一点。

参考:

于 2020-11-04T21:58:35.120 回答
1

问题/解释:

您有 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()
于 2020-11-04T21:56:24.457 回答