自动将 Google 表格中单元格内容大写的脚本?

2024-04-20

我有一个电子表格,可以输入股票代码。我希望它们始终全部大写,无论它们如何输入。这似乎需要一些脚本,因为除非存在该列的第二个副本,否则无法使用函数来执行此操作,这是不可接受的。

我有一个有效的解决方案,但有一个关键问题。代码如下:

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:它与数据验证无关,因为它在根本没有验证的简单列上的行为方式相同。如果我之前输入的值已经是小写形式,那么再次以小写形式输入将不会激活脚本。但是,如果我以大写字母输入值,然后以小写形式重新输入,则脚本会将其变为大写。也许与脚本触发时有关的一些奇怪的情况......?


如果单元格包含公式时不想大写,可以使用以下方法获取公式() https://developers.google.com/apps-script/reference/spreadsheet/range#getFormula()并检查单元格是否包含公式。

返回范围左上角单元格的公式(A1 表示法),如果单元格为空或不包含公式,则为空字符串.

代码应该如下所示:

if (ind === 0 && e.range.rowStart > 1 && e.range.columnStart >= 1  && e.range.getFormula() == '') {
  e.range.setValue(e.value.toUpperCase());
}

EDIT:

如果我理解正确,那么您输入的值完全相同,例如:如果单元格中的值是México,然后删除全部或部分字符并立即键入México同样,在这种情况下,旧值和新值是相同的,并且OnEdit()不会被解雇。另一个例子是,如果您更改值的格式,那就是另一种类型的事件。

如果您想知道如何考虑该事件,您可以使用可安装在更改触发器上 https://developers.google.com/apps-script/guides/triggers/events#change:

function triggerOnChange(e) {
  MailApp.sendEmail('john.d[email protected] /cdn-cgi/l/email-protection', 'Testing triggerOnChange', JSON.stringify(e));
}

然后在脚本编辑器菜单中:Resources -> Current Project Triggers -> Add a new trigger -> ['triggerOnChange', 'From spreadsheet', 'On change']

关于如何更改公式结果的大小写,我认为@Rubén 有正确的想法,但只有当公式包含时它才有效UPPER()在第一个字符中,而且因为您正在使用公式IMPORTHTML() using UPPER()会破坏它,也许还会破坏一些其他函数,例如数组公式,除非您使用INDEX():

=INDEX(UPPER(IMPORTHTML(url, query, index)))

另一种选择可能是正则表达式,但考虑到所有组合,我认为这有点冒险。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

自动将 Google 表格中单元格内容大写的脚本? 的相关文章

随机推荐

  • $scope.$on 在角度服务中的 $rootScope.$broadcast 之后不触发

    这可能是重复的问题 但我找到的解决此问题的方法在我的情况下不起作用 这就是我发布该问题的原因 我已经关注了service appRoot service MyService function rootScope var Messenger
  • Win32 API C++ 菜单栏

    我正在尝试学习一些基本的 win32 api 我看到将项目添加到菜单栏教程中提到使用类似以下内容 hMenubar CreateMenu hMenu CreateMenu AppendMenuW hMenu MF STRING IDM FI
  • Vaadin 更改默认会话过期通知?

    瓦丁7 6 2 如何更改默认的会话过期通知 消息和通知类型 要更改会话过期消息 您需要创建自己的SystemMessagesProvider 您在其中定义它 例如 在 Servlet 部署中 您可以执行以下操作 WebServlet url
  • Hibernate 3.6:SQL 方言中的 registerFunction 不起作用

    我放弃并询问社区 在我的项目中 我使用 Hibernate 3 6 4 Final 和自定义 sql 方言 public class ServiceAppMySQL5InnoDBDialect extends MySQL5InnoDBDia
  • Bash 脚本使用 FreeTDS 建立连接、交互、不退出(只是挂起)

    我在脚本中使用 FreeTDS 将记录插入 MSSQL 数据库 这USEandINSERT命令有效 但是exit命令没有 它挂起 我尝试过重定向stdoutbutcat抱怨 我想我会用Expect http www nist gov mel
  • 未能向 master 发送加入请求

    我使用的是elasticsearch版本1 3 0 重启数据节点后 无法检测到主节点 我收到错误failed to send join request to master 在错误日志中 app101 dGRBqTFTQfae76IFCjsM
  • strtolower() 用于 unicode/多字节字符串

    我的页面中有一些非英语 外语文本 但是当我尝试将其变为小写时 它的字符会转换为包含问号的黑色菱形 a echo b strtolower a returns 我已在元标记中设置了字符集 但这并没有解决问题 我该怎么做才能将字符串转换为小写而
  • vim 中项目列表的智能硬包装

    我喜欢 vim 而且我真的很喜欢在写文字时将它们硬包装起来 Tim Pope 的 markdown 插件很棒 并且构建得当我尝试硬包装项目列表时它可以正确完成工作 好吧 这就是我所说的正确完成工作的意思 here I write a lon
  • iPhone 就像在 Silverlight ListBox 上滚动一样

    我需要一个具有类似 iPhone 功能的 Silverlight 列表框 也就是动画滚动 点击拖动滚动 在鼠标释放事件之后 滚动将根据拖动的 速度 继续进行一段时间 我搜索过 没有找到提供此功能的控件供应商 那么问题是我应该如何构建它 我需
  • 如何使用 rvest R 从谷歌新闻中获取头条新闻?

    我想使用 R 中的 rvest 从谷歌新闻中获取头条新闻 到目前为止我已经做到了这一点 library rvest url read html https www google com search hl en tbm nws authus
  • 根据其他字段 javax.validation 的条件进行选项的字段验证

    如果存在另一个字段 我需要执行字段验证 它可以是值之一 import javax validation class Person NotBlank private String name private Long groupId Valid
  • Windows 在 PATH 中搜索可执行文件的相对顺序是什么?

    如果我有a com a cmd a bat and a exe我的文件中的 PATH 如果我只调用该命令 Windows 会选择哪一个a 这是微软官方指定的吗 我只是想包裹我的gvim exe可执行文件 n 但是我的gvim bat似乎既不
  • Elasticsearch 过滤器/计算嵌套字段

    我有带有嵌套字段的文档 如下所示 results id 1234 name asdf id 5678 name jkl ip 1 2 3 4 嵌套字段的映射如下所示 results type nested properties id typ
  • PDO 最后插入 ID 总是正确的吗?

    我有以下代码 我想问的是这个 想象一下 当两个人同时加载页面时 是否存在其他人的查询在检索到最后一个 ID 之前插入 从而混淆 ID 的危险 不 这种情况是不可能的 方法 db gt lastInsertId 返回此数据库连接的最后插入的
  • 将一个 XML 包含在另一个 XML 中并使用 python 解析它

    我想将一个 XML 文件包含在另一个 XML 文件中并用 python 解析它 我正在尝试通过 Xinclude 来实现它 有一个 file1 xml 看起来像
  • 捕获 Exception 对象是否安全

    我使用依赖于异常的 Java 库 简化代码如下 try val eventTime eventTimeString as Date catch case e Exception gt logger error s Can t parse e
  • pandas,根据某些列值和 NAN 组合行

    所以我有一个 pandas 数据框 如下所示 id 1 id 2 value1 value2 1 2 100 NAN 1 2 NAN 101 10 20 200 NAN 10 20 NAN 202 10 2 345 345 我想要一个像这样
  • 比较 YUI 和 Ext JS [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何收到 SalesForce 中新潜在客户的通知? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我希望在 Salesforce 中创建新潜在客户时收到通知 Salesforce 中是否有类似 web
  • 自动将 Google 表格中单元格内容大写的脚本?

    我有一个电子表格 可以输入股票代码 我希望它们始终全部大写 无论它们如何输入 这似乎需要一些脚本 因为除非存在该列的第二个副本 否则无法使用函数来执行此操作 这是不可接受的 我有一个有效的解决方案 但有一个关键问题 代码如下 functio