我有一个WooCommerce商店,它与Zapier连接到谷歌电子表格。在这个文件中,我跟踪销售等。其中一些列包含--很明显--价格,例如除增值税之外的价格等等。然而,由于某些原因,定价值作为字符串存储在我的电子表格中,比如18.21
。
为了能够使用这些值自动计算,我需要将这些特定列中的值转换为以逗号作为分隔符的数字。我对Google脚本很陌生,但通过阅读其他帖子等,我成功地“编写”了以下脚本,这几乎完成了任务:
function stringIntoNumber() {
var sheetActive = SpreadsheetApp.openById("SOME_ID");
var sheet = sheetActive.getSheetByName("SOME_SHEETNAME");
var range = sheet.getRange("R2:R");
range.setValues(range.getValues().map(function(row) {
return [row[0].replace(".", ",")];
}));
}
只要只有在列R中可以找到带点的值,脚本就能正常工作。当属于范围的值更改为带有逗号的值时,脚本会给出错误:
TypeError,找不到函数替换。
发布于 2018-03-17 02:09:44
发生此错误是因为.replace
是一个字符串方法,不能应用于数字。一个简单的解决方法是确保参数始终是字符串,有一个.toString()
方法。
在你的代码中尝试
return [row[0].toString().replace(".", ",")];
发布于 2019-01-04 12:01:51
发布于 2018-03-17 02:11:38
电子表格的区域设置为使用逗号分隔小数位的国家。然而,Zapier似乎使用了点,因此google将从Zapier获得的数据解释为字符串,因为它不能将其解释为有效的数字。
如果您将区域设置更改为United States
(在File/Spreadsheet settings
下),则它将正确工作。但你可能不想这样做,因为它会引起其他问题。
您得到了一个TypeError,因为类型是number
而不是string
。在调用replace
之前,可以使用if语句检查类型。此外,您应该将类型转换为'number‘,以确保它将独立于您的地区设置正确工作。
range.setValues(range.getValues().map(function(row) {
if(typeof row[0] === "string") return [Number(row[0].replace(",", "."))];
else return row;
}));
在本例中,我将,
转换为.
,而不是反过来,因为向number
的转换需要.
。
https://stackoverflow.com/questions/49334243
复制