Google Sheets:单元格文本格式数字超300万欧元时自动发邮件问题
解决Google Sheets带格式文本数字转数值并触发邮件提醒的问题
核心思路
要处理这些带欧元符号、千分位分隔符的文本,最可靠的方式是用正则提取数字相关内容,再统一格式转换为JavaScript可识别的数值,具体逻辑:
- 先移除文本里的非数字/非分隔符(比如€、空格)
- 替换千分位的
.为空,把小数点的,替换为.,得到标准数字字符串 - 转换为数值类型后再做大小判断
修改后的完整代码
function FetchValue() { // 注意:原代码取D2:D整列,getValue()只会返回第一个单元格值,这里直接指定D2更精准 var CurrentValueRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Quelle_Datawrapper").getRange("D2"); var CurrentValueText = CurrentValueRange.getValue().toString(); // 文本转数值处理 // 第一步:移除所有非数字、非点、非逗号的字符 var cleanedText = CurrentValueText.replace(/[^0-9.,]/g, ''); // 第二步:替换千分位的点,把逗号换成小数点 var numericStr = cleanedText.replace(/\./g, '').replace(/,/g, '.'); var CurrentValue = parseFloat(numericStr); // 检查数值是否超过300万,同时过滤非数值情况 if (!isNaN(CurrentValue) && CurrentValue > 3000000) { // 获取邮箱地址,原代码用getValues()返回二维数组,改用getValue()直接拿字符串 var emailRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Tabellenblatt3").getRange("B1"); var emailAddress = emailRange.getValue(); // 发送邮件,把数值转回德语区欧元格式,显示更友好 var message = 'In Kürze steht ein Objekt zum Preis von ' + CurrentValue.toLocaleString('de-DE', {style: 'currency', currency: 'EUR'}) + ' zur Versteigerung.'; var subject = 'Zwangsversteigerung - Objekt für mehr als drei Millionen Euro'; MailApp.sendEmail(emailAddress, subject, message); } }
关键修改点说明
- 单元格范围修正:原代码取整列
D2:D,getValue()仅返回第一个单元格值,直接指定D2更符合需求 - 文本转数值逻辑:两次正则替换兼容你列出的所有格式(带/不带千分位、带/不带空格的欧元符号)
- 邮箱获取优化:改用
getValue()直接获取字符串,无需额外toString()转换 - 错误防护:加入
!isNaN(CurrentValue),避免单元格为空或格式错误时触发代码报错 - 邮件内容优化:用
toLocaleString把数值转回德语区的欧元格式,邮件显示更规范
扩展:监控整列单元格
如果需要监控D2:D整列的所有单元格,可以循环遍历处理:
function FetchAllValues() { var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Quelle_Datawrapper"); // 仅取有内容的行,避免遍历空单元格 var range = sheet.getRange("D2:D" + sheet.getLastRow()); var values = range.getValues(); var emailAddress = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Tabellenblatt3").getRange("B1").getValue(); values.forEach(function(row) { var text = row[0].toString(); var cleanedText = text.replace(/[^0-9.,]/g, ''); var numericStr = cleanedText.replace(/\./g, '').replace(/,/g, '.'); var value = parseFloat(numericStr); if (!isNaN(value) && value > 3000000) { var message = 'In Kürze steht ein Objekt zum Preis von ' + value.toLocaleString('de-DE', {style: 'currency', currency: 'EUR'}) + ' zur Versteigerung.'; var subject = 'Zwangsversteigerung - Objekt für mehr als drei Millionen Euro'; MailApp.sendEmail(emailAddress, subject, message); } }); }
内容的提问来源于stack exchange,提问作者SandraLie
相关产品推荐
相关产品推荐

