【发布时间】:2016-08-08 02:25:14
【问题描述】:
我有一个输入股票代码的电子表格。我希望它们始终全大写,无论它们是如何输入的。这似乎需要一些脚本,因为除非存在第二个列副本,否则无法使用函数执行此操作,这是不可接受的。
我有一个可行的解决方案,但有一个关键问题。代码如下:
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());
}
}
效果很好,我可以根据需要添加尽可能多的选项卡和列来格式化。不幸的是,它还将单元格内的 FORMULAS 大写,这破坏了使用 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:它与数据验证无关,因为它在根本没有验证的简单列上的行为方式相同。如果我之前输入的值已经是小写的,那么再次以小写输入将不会激活脚本。但是,如果我用大写字母输入值,然后用小写字母重新输入,脚本会将其大写。也许一些与脚本何时触发有关的奇怪情况......?
【问题讨论】:
-
关于编辑,我不清楚场景。您是否在编辑脚本之前或之后输入了未更改的电子表格值?
-
您的回答中的场景是正确的,我将在今天稍后进行探讨。
标签: javascript google-apps-script google-sheets uppercase