【发布时间】:2015-06-10 15:56:18
【问题描述】:
我有一个简单的脚本设置,它使用基于脚本的 VLookup 根据 Google 表单条目发送电子邮件以获取联系电子邮件。在某些情况下,Google 表单会将输入到表单字段中的较长数字转换为科学记数法。我一直在使用的一种解决方法是在数字前输入撇号 - 出于某种原因,这会将单元格格式化为纯文本。我想找到一个不需要这个额外步骤的解决方案。
工作表有一个带有单个字段 eGCs 的表单。 eGCs 字段可以包含字母和数字的任意组合,并且可以是多行字符串。该脚本向用户 onFormSubmit 发送一封电子邮件,电子邮件正文中包含 eGCs 字段条目。当我尝试提交一个非常长的只有数字的字符串并且表单输入变量被转换为科学计数法时,就会出现问题。
我需要用户在 eGCs 字段中输入的内容与他们在 Responses 1 表和发送的电子邮件正文中输入的内容完全相同。代码如下:
function onFormSubmit(e) {
var eGCs = e.values[1];
var email = Session.getActiveUser().getEmail();
//Replace the Google Sheets formatted line breaks with HTML line breaks so they display properly in the email:
eGCs = eGCs.replace(/\n/g, '<br>');
//Send the email:
var subject = "This is only a test";
var body = eGCs;
MailApp.sendEmail(email, subject, body, {htmlBody: body})
return
}
如果我提交
6110523527643880
...进入表单,数字变为科学计数法格式,并在工作表和发送的电子邮件中显示为6.11052E+15。如果我提交一个多行字符串,例如:
6110523527643880
6110523527643880
6110523527643880
...然后脚本工作正常并且表单字段条目未转换(可能是因为 Google 不再将其视为数字)。无论表单条目是单行还是多行,我都需要它与输入的内容完全相同。
这是我的example sheet / script / form。它应该是公开的,所以请随意测试它。
【问题讨论】:
-
转换它的是表格还是电子表格?您是否尝试过将格式更改为电子表格中的格式?
-
嗨斯宾塞 - 我不确定。如果这有帮助,此人正在处理的问题与此相同:productforums.google.com/forum/m/#!msg/docs/dMIAKVtuKW0/… 我怀疑在此过程中,Google 正在将单元格改回“自动”格式而不是“纯文本”格式。我在电子表格中将整列设置为“纯文本”格式,但这似乎无关紧要。我尝试使用那些 cmets 中某人建议的脚本,但仍然没有运气。
-
我创建了一个虚拟表,以便您自己查看它的运行情况。将其添加到顶部的原始帖子中。
-
向前勾号使单元格内容成为文本 - 这是 Excel、Lotus 1-2-3 甚至 VisiCalc 中的标准符号。但是,您真正的问题是表格中的单元格格式,完全独立于表单。您可以让触发函数使用
Range.setNumberFormats()应用适当的格式。向您的 cmets 发送关于通过提交更改格式的信息...关闭!提交表单会插入一个具有自动格式设置的新行。 -
感谢您的意见,莫格兹达。您复制的线程底部的解决方案在这种情况下不起作用,因为正如您所说,正在将新行添加到不保留应用于列其余部分的格式的工作表中。至于您的 setNumberFormats() 解决方案,我可以在 onFormSubmit 触发器发送电子邮件之前将其应用于新创建的行吗?或者我是否需要在链中进一步向上或向下移动其中一个触发器才能使其起作用?不幸的是,我不确定我是否有足够的 JavaScript 经验来实现这一点而无需指导。
标签: google-apps-script google-sheets google-docs google-forms