Google apps script 使用OneEdit脚本切换列的格式
我不熟悉谷歌应用程序的脚本。这是我的脚本,我正在尝试编写一个脚本,其中一个复选框切换列的格式(公制/英制单位)。它只适用于第一种情况,而不适用于第二种情况。我不知道为什么(e.value==true/false)看起来不起作用Google apps script 使用OneEdit脚本切换列的格式,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我不熟悉谷歌应用程序的脚本。这是我的脚本,我正在尝试编写一个脚本,其中一个复选框切换列的格式(公制/英制单位)。它只适用于第一种情况,而不适用于第二种情况。我不知道为什么(e.value==true/false)看起来不起作用 function onEdit (e) { var Name = SpreadsheetApp.getActiveSheet().getName(); Logger.log(Name) if (e.range.getA1Notation() === 'C19'
function onEdit (e) {
var Name = SpreadsheetApp.getActiveSheet().getName();
Logger.log(Name)
if (e.range.getA1Notation() === 'C19' && e.value == 'TRUE') {
SpreadsheetApp.getActiveSheet().getRange("K2:K89").setNumberFormat("0.00oz")
}
else if (e.range.getA1Notation() === 'C19' && e.value == 'FALSE'){
SpreadsheetApp.getActiveSheet().getRange("K2:K89").setNumberFormat("0.00g")
}}
下面是一个代码片段,用于根据复选框输入更改列的格式:
if (e.range.getA1Notation() == 'C19')
{
if (e.value == 'TRUE') {
SpreadsheetApp.getActiveSheet().getRange("K2:K59").setNumberFormat("000.00lb");
}
else
{
SpreadsheetApp.getActiveSheet().getRange("K2:K59").setNumberFormat("000.00oz");
}
}
if (e.range.getA1Notation() == 'C18'){
if (e.value == 'TRUE') {
SpreadsheetApp.getActiveSheet().getRange("L2:L59").setNumberFormat("##0.00gr");
}
else
{
SpreadsheetApp.getActiveSheet().getRange("L2:L59").setNumberFormat('##0.00"%"');
}
}
这允许更改colsK
和L
的格式。这只是为了说明,您还需要重新计算公制/英制重量等
我猜您遇到的主要问题是(e.value==true)
应该是(e.value==true)
此外,您可能需要使用SpreadsheetApp.getActiveSheet()
而不是SpreadsheetApp.getActiveSpreadSheet()
注意:通过实验,我发现复选框返回的值似乎是字符串
'TRUE'
和'FALSE'
,而不是布尔值。因此,如果(e.value)不能像您预期的那样测试布尔值true
等。我愿意接受上级的纠正,但是(e.value==“TRUE”)
表格是我唯一可以使用的表格 第一种情况是(e.value==true),它成功地将格式更改为“0.00oz”,但在(e.value==false)的情况下不起作用。使用电子表格中的getRange
和不包含工作表规范的字符串意味着这将仅格式化第一张工作表,即使您编辑了不同的工作表。您可以从编辑触发器的事件对象中获取编辑过的工作表,或者在我测试它时,从getActiveSheet
中,SpreadsheetApp.getActiveSheet().getName()
成功地返回我当前编辑的工作表的正确名称。所以我希望,SpreadsheetApp.getActiveSheet().getRange
可以工作。我还尝试将电子表格的名称附加到以下范围:“&name&”!K2:K89“
但这似乎也不起作用。嘿,谢谢你的回复!它现在起作用了。你是对的-复选框的值没有返回布尔值。我尝试了(e.value==true)和(e.value==true),但它只对(e.value='true'起作用)。非常感谢!最后一件事,我的脚本似乎只适用于一个电子表格,我不知道为什么。如果我使用Logger.log(SpreadsheetApp.getActiveSheet().getName())
它获取正确的活动工作表,但不设置列的格式。好的,太好了。如果您接受答复,这样问题就可以结束,这对每个人都有好处。单击答复左上角投票向上/向下箭头下的勾号。如果您愿意,也可以向上投票。这两个都不是必须的,我应该添加!关于仅工作o有一张工作表,我不太清楚,但是你应该习惯使用查看->日志-
和查看->执行脚本-/code>来检查你的代码是否有错误。一般来说,谷歌工作表可能脾气暴躁,有时执行缓慢。如果问题仍然存在,我建议一个新问题,我明天(澳大利亚时间)会看一看如果没有人回答。