【问题标题】:Script to refresh importHTML with a checkbox in Google Sheets使用 Google 表格中的复选框刷新 importHTML 的脚本
【发布时间】:2021-03-03 23:53:41
【问题描述】:

背景

我正在构建一个包含各种经济指标的大型电子表格,由于 Google 财务功能中缺少商品价格,我必须使用 importHTML 从商业内幕人士的一系列表格中获取数据。但是,我不希望 importHTML 函数经常自动刷新,因为我不希望它在不需要时在后台运行。每当我单击复选框时,我一直试图让它刷新数据,并且脚本会自动取消选中该复选框。

我想构建一个功能,通过复制单元格的内容,删除内容,然后将内容重新粘贴到同一单元格中来刷新导入命令。 (或通过任何其他更简单的命令系列)因此,在谷歌表格中,公式看起来像这样:

=RefreshImport(input1, input2, input3, inputx)

=RefreshImport(B3, C3, D3)

底部是它的外观示例。 input1 之后的所有输入都是可选的。因此,目标是能够将其放入电子表格中的 IF 语句中,并“刷新”输入单元格的内容。

当前脚本

由于我是 javascript 新手,所以我求助于宏来试图弄清楚,但我希望有一个依赖于复选框的 IF 语句。

function RefreshCheckmark() {
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getRange('Q6').activate();
  spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
  spreadsheet.getActiveRange().setFormula('=importhtml("https://markets.businessinsider.com/commodities", "table", 2)');
  spreadsheet.getRange('Q12').activate();
  spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
  spreadsheet.getActiveRange().setFormula('=importhtml("https://markets.businessinsider.com/commodities", "table", 3)');
  spreadsheet.getRange('Q21').activate();
  spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
  spreadsheet.getActiveRange().setFormula('=importhtml("https://markets.businessinsider.com/commodities", "table", 4)');
  spreadsheet.getRange('Q29').activate();
  spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
  spreadsheet.getActiveRange().setFormula('=importhtml("https://markets.businessinsider.com/commodities", "table", 5)');
  spreadsheet.getRange('Y4').activate();
  spreadsheet.getCurrentCell().setValue('FALSE');
};

使用此宏,我尝试在实际工作表中创建一个 IF 语句,但由于没有权限,因此无法正常工作。 (即使我允许它)这是我尝试在工作表中使用的 IF 语句:(Y4 是带有复选框的单元格)

=IF(Y4 = TRUE, RefreshCheckmark(), "刷新脚本")

所以,现在我很难将宏转换为我在背景部分中描述的函数。我整天都在搞砸它,我的想法已经用完了。

【问题讨论】:

    标签: google-apps-script google-sheets import


    【解决方案1】:

    我相信你的目标和你目前的情况如下。

    • 您希望在选中复选框时运行函数RefreshCheckmark()
    • RefreshCheckmark() 的脚本运行良好。
    • 复选框位于单元格“Y4”中。

    修改点:

    • 很遗憾,自定义函数不能使用setValue。我认为您的问题wouldn't work because it doesn't have permission to. 的原因。 Ref
    • 为了在勾选复选框时使用setValue的方法,在这个答案中,我想建议使用OnEdit触发器。 当以上几点反映到脚本中时,就变成了如下。

    示例脚本:

    请将以下脚本复制并粘贴到脚本编辑器并保存项目。并且,请勾选“Y4”复选框。这样,脚本 onEdit() 将由 OnEdit 简单触发器自动运行,并且您的脚本 RefreshCheckmark() 也会运行。

    function onEdit(e) {
      const sheetName = "Sheet1";  // Please set the sheet name which has the checkbox at the cell "Y4".
      const range = e.range;
      if (range.getSheet().getSheetName() != sheetName || range.getA1Notation() != "Y4" || !range.isChecked()) return;
    
      RefreshCheckmark();  // This is your script.
    }
    

    注意:

    • 在此答案中,它假定您的 RefreshCheckmark() 脚本可以正常工作。

    参考资料:

    【讨论】:

    • @Aerials 感谢您检查和编辑它。另外,感谢您一直以来的支持。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-01
    • 2022-01-18
    • 1970-01-01
    • 2022-10-24
    • 1970-01-01
    • 2022-11-16
    • 1970-01-01
    相关资源
    最近更新 更多