【发布时间】:2019-11-24 02:45:00
【问题描述】:
我正在开展一个项目,我将多列/行库存表转换为多行/2 列格式以进行订单拣选。 我有一个用于选择适当库存表的开关和一个从库存 DataRange() 复制导入信息的 map() 函数。
但是,并非所有数据都在一致的列中。我想做的是找到一个表达式,如果它映射的列具有零或“”值,则该表达式将 下一个列映射到。
除非你需要,否则我不会给你完整的代码,但希望只是重要的部分。 这就是我所拥有的:
var source = SpreadsheetApp.openById("1xixIOWw2yGd1aX_2HeguZnt8G_UfiFOfG-W6Fk8OSTs"); //This sheet
var srcSht = SpreadsheetApp.getActive();
var sourceMenu = srcSht.getRange('A1');//This is the cell cotaining the dropdown
var menuTest = sourceMenu.getValue();
// Variable for the vars sheet. If it doesn't exist, create it
var varsTest = source.getSheetByName('vars');
if (!varsTest){source.insertSheet('vars');}
var importedA1 = varsTest.getDataRange().getA1Notation();
varsTest.clearContents();
var t1Imp = '=ImportRange("test1_Id", "Stock!A1:F11")';
var varsData = varsTest.getRange('A1');// This is the cell we fill with the importRange formula
varsData.setValue(t1Imp);
var imported = varsTest.getDataRange().getValues();
var newOrder = imported.map(function(item) {
if (item[4] !== NaN){return [[item[0]],[item[4]]];};
if (item[4] === NaN){return [[item[0]],[item[3]]];};}
var orderRange = source.getSheetByName('Sheet1').getRange(10,1,newOrder.length, newOrder[0].length);
orderRange.setValues(newOrder);
Logger.log("\t" + newOrder);
Logger.log(newOrder): [(省略时间戳)] items1,order,caramel,6,c&c,2,mint,3,PB,0,,,items2,,caramel,,strawberry,,mint,,PB,
它似乎跳过了 if 语句,或者我告诉它我的意思是将索引测试为 NaN,这显然永远不会是真的。
我还尝试将“NaN”替换为“未定义”。结果相同。我试图找到 item[4].Values,但它给了我一个错误。我也尝试了使用 filter() 而不是 map() 的相同逻辑,但它复制了整个数据集。
我将这些值提取到工作簿中的新“vars”工作表中(以尽量减少对 Web 服务的调用): test1 将它们减少到第一列和最后一列,然后输出: test
“测试”表中第二组项目的“订单”列中的单元格为空白。该订单列的值应该在该数组的 item[3] 中,但我无法让脚本确定空白单元格是空白的。
我是 Google Apps Script 和 JS 的新手,但我正在观看大量的 tuts 并边做边学。如果我找到解决方案,我会发布它。
感谢 StackOverflow,如果没有这个社区,我不可能学到这么多东西!
【问题讨论】:
-
欢迎来到 SO!为了发布问题,您应该携带最少的信息作为输入样本和预期的输出样本(如果需要),您尝试了什么以及您的研究。在这种情况下,没有样品很难帮助您。
-
感谢您的回复。从那以后,我一直在使用 Google 应用脚本编写该项目,并将根据我遇到的当前问题修改这篇文章。
-
我可以问你关于你的问题吗? 1.
it takes this:的值是你期望的输出吗?如果是这样,您能否提供imported的输入值? 2. 我认为当您提供包含您期望的输入和输出值的示例电子表格时,它将帮助用户思考解决方案。 -
@Tanaike 感谢您的回复!澄清一下,我得到并期望的输出是第二个样本。首先是进口的价值。我将用真正的电子表格替换这些块。
-
我添加了示例输入“test1”和输出“test”的完整源代码和截图
标签: javascript arrays google-apps-script google-sheets google-apps-script-editor