我有一个电子表格,可以输入股票代码。我希望它们始终全部大写,无论它们如何输入。这似乎需要一些脚本,因为除非存在该列的第二个副本,否则无法使用函数来执行此操作,这是不可接受的。
我有一个有效的解决方案,但有一个关键问题。代码如下:
function OnEdit(e) {
var ss = e.source.getActiveSheet(),
sheets = ['Trades', ''],
ind = sheets.indexOf(ss.getName());
if (ind === 0 && e.range.rowStart > 1 && e.range.columnStart >= 1 ) {
e.range.setValue(e.value.toUpperCase());
}
}
它工作得很好,并允许我添加任意数量的选项卡和列以进行格式化。不幸的是,它还将单元格内的公式大写,这破坏了使用importhtml()
函数,因为它将所请求的 URL 大写。
那么,有人知道一种方法可以完全执行上述代码的操作,但不触及单元格内的实际公式,而只触及它们输出的文本吗?
编辑:感谢@ocordova 的评论,我认为我有一些东西可以很好地完成这项工作。不幸的是,它的行为很奇怪......它在某些列上部分起作用,而在其他列上根本不起作用。这是我当前的代码(为了清楚起见,与之前的代码略有不同):
function onEdit(e){
var activeSheet = e.source.getActiveSheet(),
sheets = ['NEW Trades', ''],
sheetIndex = sheets.indexOf(activeSheet.getName());
if (sheetIndex === 0 && e.range.rowStart > 1 && e.range.columnStart >0 && e.range.getFormula() == '') {
e.range.setValue(e.value.toUpperCase());
}
}
任何人都知道为什么某些列中的某些单元格会按预期大写,而同一列中的其他单元格不会,而其他列在任何地方都不会大写?
编辑2:我的问题似乎与数据验证有关或与之冲突。我试图大写的列由另一张纸上的值列表提供。如果该值之前以小写形式存在,然后我将数据验证应用于该列,则脚本不会将该值大写。但是,如果我从数据验证列表中选择适当的大写选项,然后以小写形式重新键入相同的值,则脚本会启动并大写。非常奇怪和令人困惑。我对这场冲突的看法可能是错误的,但在我看来,情况就是如此。
编辑3:它与数据验证无关,因为它在根本没有验证的简单列上的行为方式相同。如果我之前输入的值已经是小写形式,那么再次以小写形式输入将不会激活脚本。但是,如果我以大写字母输入值,然后以小写形式重新输入,则脚本会将其变为大写。也许与脚本触发时有关的一些奇怪的情况......?