【发布时间】:2018-03-06 19:03:57
【问题描述】:
我有一个函数在为每个单元分配它时可以完美运行,但是当我尝试使用 map() 函数创建一个数组时,单元值没有被正确读取。有人可以帮忙吗?
我已尝试阅读此内容,这可能与 Google 表格 map() 函数无法处理某些场景有关,因为所有计算都是在服务器端完成的?不确定。
无论如何,我正在尝试从一列中读取日期,并查看另一列中是否有折扣,并根据日期和折扣令牌“DSC”,返回百分比折扣值:25% 或 30如果在 2 个日期之间,则为 %。
第三列中没有 30% 值的图片
以下是分配给范围的工作函数(分配给每个单元格)和非工作 map() 函数的代码,然后是 Google 表格链接:
// ==================================== Using .map
/**
@customfunction
*/
function Disc_Perc_Map (input1, input2){ // input1 is product ID column, input2 is Date
var Date_1_a = Date.parse(String("1/3/2017")) ;// put start date of discount change here
var Date_1_b = Date.parse(String("1/4/2017")) ;// put end date of discount change here
var Disc_Def = .25;
var Disc_1 = .30;
if (input1.map){ // Checks if array
return input1.map(Disc_Perc_Map); // added along with added brace at end
} else {
// Main part of code
if (String(input1).indexOf(",") >-1) { // if there are commas
Cell_Array = input1.split(",");
Cell_Len = input1.split(',').length;
var Date_Num = Date.parse(String(input2));
if (Date_Num >= Date_1_a && Date_Num <= Date_1_b){
return Disc_1;
} else {
return Disc_Def;
}
} else { // if there are NO commas
return "";
//Cell_Len = 1;
}
}
}
// ==================================== without using .map
/**
@customfunction
*/
function Disc_Perc_No_Map(input1, input2) { // input1 is product ID column, input2 is Date
var Date_1_a = Date.parse(String("1/3/2017")) ;// put start date of discount change here
var Date_1_b = Date.parse(String("1/4/2017")) ;// put end date of discount change here
var Disc_Def = .25;
var Disc_1 = .30;
// Main part of code
if (String(input1).indexOf(",") > -1) { // if there are commas
Cell_Array = input1.split(",");
Cell_Len = input1.split(',').length;
var Date_Num = Date.parse(String(input2));
if (Date_Num >= Date_1_a && Date_Num <= Date_1_b){
return Disc_1;
} else {
return Disc_Def;
}
} else { // if there are NO commas
return "";
//Cell_Len = 1;
}
}
Link to example Google Sheets:
任何帮助都非常感谢。
【问题讨论】:
-
Google Apps 脚本不是 JavaScript,尽管它与大约 2007 年或 2008 年的 JavaScript 非常、非常、非常相似。您确定数组具有
map函数(在 2009 年添加)吗? -
显然,在您自己的代码中,您可以使用任何您喜欢的缩进策略,但是当要求其他人花时间帮助您时,请花时间以合理、一致的方式格式化和缩进代码,可读的方式。
-
谢谢 TJ。我对这一切都很陌生。对不起格式。不完全确定我在格式方面做错了什么。如果允许,我会将标签更新为 Google Apps 脚本。
-
关于您确定数组是否具有映射功能的问题......不知道如何回答。我可以让 Map 函数在一个范围内作为数组工作。但是当尝试从地图函数中的另一个单元格 读取 时,我遇到了问题。再说一次,我是新手,所以......我可能会遗漏一些明显的东西。
-
当您在 Disc_Perc_Map 的第一行设置断点(通过单击脚本编辑器中的行号),在调试模式下执行脚本(通过使用错误而不是播放符号)时会发生什么,然后使用“Step Into”逐行推进。这应该可以让您看到传递到哪里的内容,以及数组的外观等。执行这种调试任务对于确定脚本或程序如何出错是非常宝贵的。
标签: arrays function google-apps-script google-sheets