x秒后如何在谷歌工作表中打乱数据? 脚本:Google Apps 脚本端:Code.gsHTML 和 Javascript 端:index.html

问题描述

我正在处理一个谷歌表,我需要在每 x 秒后洗牌我的记录,我正在做的是选择整个数据,然后转到 Data > Randomize Data 对其进行随机化。

我需要的是每 x 秒后自动随机化。应该怎么做才能做到这一点?谢谢。

解决方法

我相信你的目标如下。

  • 您希望通过提供特定间隔来随机化 Google 电子表格上的范围。

为了实现您的目标,我想提出以下 2 个示例脚本。

示例脚本 1:

在此示例脚本中,仅使用了 Google Apps 脚本。作为测试用例,在运行脚本之前,请将复选框设置为单元格“A1”。在这个脚本中,当脚本运行后勾选复选框时,脚本停止。

很重要的一点,在当前阶段,Google Apps Script 的最长执行时间为 6 分钟。 Ref 请注意这一点。

脚本:

function sample1() {
  const interval = 2; // 2 seconds. Please set here.

  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getActiveSheet();
  sheet.getRange("A1").uncheck();
  while (true) {
    sheet.getActiveRange().randomize(); // or SpreadsheetApp.getActiveSheet().getRange("A1:C10").randomize();
    Utilities.sleep(interval * 1000);
    SpreadsheetApp.flush();
    if (sheet.getRange("A1").isChecked()) {
      ss.toast("end");
      break;
    }
  }
}

示例脚本 2:

在当前阶段,Google Apps Script 的最长执行时间为 6 分钟。 Ref 所以,如果你想超过这个时间运行脚本,我想建议在侧边栏和对话框中使用 Javascript。

请将以下脚本复制并粘贴到脚本编辑器中。

Google Apps 脚本端:Code.gs

请运行openSidebar。这样,边栏在电子表格上打开。并且,当您点击“开始”按钮时,活动范围随机化interval。单击“结束”按钮时,脚本停止。

function openSidebar() {
  const html = HtmlService.createHtmlOutputFromFile("index");
  SpreadsheetApp.getUi().showSidebar(html);
}

function randomizeRange() {
  SpreadsheetApp.getActiveRange().randomize();
}
  • 比如,当你想随机化特定范围时,你也可以使用下面的脚本。在这种情况下,“A1:C10”是随机的。

      SpreadsheetApp.getActiveSheet().getRange("A1:C10").randomize();
    

HTML 和 Javascript 端:index.html

<input type="button" value="start" onclick="start()">
<input type="button" value="stop" onclick="stop()">

<script>
const interval = 2; // 2 seconds. Please set here.
let r;

const worker = _ => new Promise((resolve,reject) => google.script.run.withFailureHandler(e => reject(e)).withSuccessHandler(e => resolve(e)).randomizeRange());

function start() {
  r = setInterval(async () => await worker(),interval * 1000);
}

function stop() {
  clearInterval(r);
}
</script>

参考: