【问题标题】:Google apps script - Mapping arraysGoogle 应用程序脚本 - 映射数组
【发布时间】: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


【解决方案1】:

我有一个可以做我想做的工作的功能。简而言之: 我必须在新列中创建订单列的副本,以便所有值都对齐。从技术上讲,这不是 JS 答案,但它是最简单的并且遵循良好的电子表格规则。

function rmZeroOrderPS(item){
    var source = SpreadsheetApp.openById("<sheetId>"); //This sheet
    var varsTest = source.getSheetByName('vars');
    var imported = varsTest.getDataRange().getValues();
    var i=-1;
    while (i <= imported.length){ 
      if(item[8]!= 0) {return [item[0],item[8]]};      
    i+=1;    
    };

【讨论】:

    猜你喜欢
    • 2012-10-03
    • 1970-01-01
    • 2021-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多