Google Sheets 宏不会 copy/paste 更正随机生成的值
Google Sheets Macro won't copy/paste correct randomly generated value
我有一个 sheet,它有一个从列表中随机选择一个名字的公式。我创建了一个分配给 button/image 的宏,它将随机生成的值复制到另一个单元格中,但它复制的值不是它产生的值。比如A1中的公式生成"John",我想把那个值复制到B1中,让B1中包含"John",明文没有公式。
我的问题是 B1 中的最终结果不会是 "John",而是与列表不同的名称(纯文本无公式)。我最好的猜测是 运行 宏在实际复制我想要的内容之前使公式重新计算几次,因此复制和粘贴的内容不是所需的结果。我怎样才能让宏正确复制它在 运行 之前显示给我的值?
我使用的 "Run" 按钮图像附带的宏是:
var spreadsheet=SpreadsheetApp.getActive();
spreadsheet.getRange('A1').copyTo(spreadsheet.getRange('B1'),SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
A1中的公式为:
=index(A3:A8,randbetween(1,6))
这会随机生成 A3:A8 中的六个名字之一。
在成功的结果中,当 A1 包含 "John" 时,单击按钮会将 "John" 粘贴到 B1 中。然后 A1 将重新计算为不同的名称。如果 A1 包含 "Steve",单击该按钮将粘贴 "Steve",依此类推。目前它将随机粘贴任何名称。
(可能)不可能让 RANDBETWEEN 和宏一起很好地发挥作用,但一种解决方法是使用宏生成随机数并将它们粘贴到电子表格中。然后您可以使用该粘贴的数字作为随机确定的来源,除非您再次 运行 宏,否则它不会重新计算。这使您可以在其他宏中使用该特定的随机结果。在我的例子中,我使用 INDIRECT 让我使用随机数作为单元格引用的一部分,从而选择一个随机名称。这是我用于随机数的宏:
function getRandomInt(max) {
return Math.floor(Math.random() * Math.floor(max))+1;
};
建立这个函数后,你可以将它放入其他宏中作为getRandomInt(5),或者任何你想要的最大数字。我添加了“+1”以防止结果为零,但设置最大值仍然可以正常工作。
我有一个 sheet,它有一个从列表中随机选择一个名字的公式。我创建了一个分配给 button/image 的宏,它将随机生成的值复制到另一个单元格中,但它复制的值不是它产生的值。比如A1中的公式生成"John",我想把那个值复制到B1中,让B1中包含"John",明文没有公式。
我的问题是 B1 中的最终结果不会是 "John",而是与列表不同的名称(纯文本无公式)。我最好的猜测是 运行 宏在实际复制我想要的内容之前使公式重新计算几次,因此复制和粘贴的内容不是所需的结果。我怎样才能让宏正确复制它在 运行 之前显示给我的值?
我使用的 "Run" 按钮图像附带的宏是:
var spreadsheet=SpreadsheetApp.getActive();
spreadsheet.getRange('A1').copyTo(spreadsheet.getRange('B1'),SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
A1中的公式为:
=index(A3:A8,randbetween(1,6))
这会随机生成 A3:A8 中的六个名字之一。
在成功的结果中,当 A1 包含 "John" 时,单击按钮会将 "John" 粘贴到 B1 中。然后 A1 将重新计算为不同的名称。如果 A1 包含 "Steve",单击该按钮将粘贴 "Steve",依此类推。目前它将随机粘贴任何名称。
(可能)不可能让 RANDBETWEEN 和宏一起很好地发挥作用,但一种解决方法是使用宏生成随机数并将它们粘贴到电子表格中。然后您可以使用该粘贴的数字作为随机确定的来源,除非您再次 运行 宏,否则它不会重新计算。这使您可以在其他宏中使用该特定的随机结果。在我的例子中,我使用 INDIRECT 让我使用随机数作为单元格引用的一部分,从而选择一个随机名称。这是我用于随机数的宏:
function getRandomInt(max) {
return Math.floor(Math.random() * Math.floor(max))+1;
};
建立这个函数后,你可以将它放入其他宏中作为getRandomInt(5),或者任何你想要的最大数字。我添加了“+1”以防止结果为零,但设置最大值仍然可以正常工作。