Google Apps Script onEdit触发邮件未显示表格格式化价格问题排查
问题原因与修复方案
你的问题出在获取新价格值的方式上:e.value返回的是单元格存储的原始数值(不带任何格式的纯数字),而不是表格中显示的带千位分隔符的格式化文本。
修复步骤:
把代码中使用e.value的地方,替换成获取单元格的显示文本——也就是用户在表格里看到的带格式内容。我们可以用e.range.getDisplayValue()来实现这一点,它会直接返回单元格格式化后的字符串。
修改后的完整代码:
function sendEmail(e) { var thisSheet = e.source.getActiveSheet(), cols = [14], ind = cols.indexOf(e.range.columnStart); if (thisSheet.getName() !== 'SheetPrice' || ind == -1) return; var headers = thisSheet.getRange(1, 1, 1, 6).getValues()[0], thisRow = thisSheet.getRange(e.range.rowStart, 1, 1, 6).getDisplayValues()[0], vehicle = thisRow[3], vehicle2 = thisRow[4], body = "", i = 0; while (i < 6) { body += headers[i] + '- ' + thisRow[i] + '\n'; i++; } if (ind == 0 && e.value) { var recipients = "email@email.com", subject = "⚫ Price updated ► " +vehicle +" "+vehicle2; // 替换为getDisplayValue()获取格式化后的价格文本 var formattedNewPrice = e.range.getDisplayValue(); body += "New Price ► "+ formattedNewPrice + "\n\nabc limited" ; } MailApp.sendEmail(recipients, subject, body, {name: "abc limited"}); }
为什么这样改?
e.value:仅返回单元格的原始数据(比如纯数字1500000),完全忽略表格设置的千位分隔符等格式。e.range.getDisplayValue():返回单元格在界面上显示的格式化字符串,和你在表格里看到的样式完全一致(比如15,00,000)。
修改后,邮件里的新价格就会和表格显示的格式保持统一了。
内容的提问来源于stack exchange,提问作者Miyer
相关产品推荐
相关产品推荐

