【问题标题】:How do I reorder and array and setValues of the newly ordered array into my spreadsheet?如何重新排序数组并将新排序数组的值设置到我的电子表格中?
【发布时间】:2019-08-02 04:06:53
【问题描述】:

我从一张表中提取数据作为数组,然后将其放入另一张表中,但值的顺序需要不同。

如果源数组searchData where [1,2,3,4,5,6,7] 我需要将值pastearray[7,1,7,4,3,0,2,7,5] 的顺序放入第二张表中。我有三个问题,一是顺序变了,二是pastearray里面有重复的值(也就是第7个值),三是searchData里面拉出来的几个值都是null/空白,在本例中为 7s。

我正在为一个班级项目做这个。我只是在学习数组,但仍然无法完全掌握如何操作它们。我已经尝试过 1D、2D、3D 转换,至少我认为这就是我正在做的……不确定我是否正确。我已经验证除了最终的pasteRange.setValues(pastearray[0]); 之外,脚本中的所有其他内容都有效。

我的日志显示pastearray 包含:

[[null], [Language Arts 6], [null], [A/1], [6.0], [67511.0], [Layton, B], [blayton@acedu.org]]

我也试过了:

["Language Arts 6", "A/1", "6.0", "67511.0", "Layton, B", "blayton@questac.org"]

我尝试删除“空”值或将它们保留在其中。我尝试直接抓取一行值并设置它们,只要我不尝试重新排列它们就可以正常工作。

function onEdit(e){
  if(e.range.getA1Notation() == 'F3' && 
      e.range.getSheet().getName() == 'Class Information and Roster') {

    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var paste2 = ss.getSheetByName("Class Information and Roster");
    var tclimport = ss.getSheetByName("TeacherClassListImport");

    var classID = e.range.getValue();//Get class id value

    Logger.log(classID);

    paste2.getRange(6,1,31,10).clearContent();//clear all old info just in case

    //access the list of all classes


    var lr = tclimport.getLastRow();
    var searchData = tclimport.getRange(1,1,lr,7).getValues(); //make an array of all the classes available

    //Logger.log(searchData);

    //Find the row with that class ID
    for (var i = 0; i < searchData.length; i++) {
      if(searchData[i][0]==classID){
        Logger.log(i+1);
        //Logger.log(searchData);


        var pastearray = [[searchData[i][7]],[searchData[i][1]], [searchData[i][7]], [searchData[i][4]], [searchData[i][3]], [searchData[i][0]], [searchData[i][2]], [searchData[i][7]], [searchData[i][5]]];
        Logger.log(pastearray);

      //Copy in info from class ID list
        var pasteRange = paste2.getRange(3,1,1,9);

        pasteRange.setValues(pastearray); 
         }
    }
  }
}

我相信你会畏缩看着我的代码,因为它是如此简陋,但它按照我理解的方式工作......除了最后的setValues()

此代码的想法是您在单元格 F3 中输入一个班级 ID 号。 OnEdit 触发脚本在工作表“TeacherClassListImport”中查找有关该班级的详细信息,复制这些值并以不同的顺序返回第 3 行中的值班级名称、时间段、级别、班级 ID、教师姓名和教师电子邮件。除非有更好的方法,否则它将用相同的类 ID 覆盖相同的单元格 F3。第 7 个是空/空白单元格。我不确定它是否必须存在,除了适当的间距以适合模板。

非常感谢任何帮助。

【问题讨论】:

    标签: javascript google-apps-script


    【解决方案1】:

    您的pasteRange 长 1 行,宽 9 列。 您的pastearray 长 9 行,宽 1 列。

    你有

    var pastearray = [
      [searchData[i][7]], [searchData[i][1]], [searchData[i][7]],
      [searchData[i][4]], [searchData[i][3]], [searchData[i][0]],
      [searchData[i][2]], [searchData[i][7]], [searchData[i][5]]
    ];
    

    但你的范围想要

    var pastearray = [[
      searchData[i][7], searchData[i][1], searchData[i][7],
      searchData[i][4], searchData[i][3], searchData[i][0],
      searchData[i][2], searchData[i][7], searchData[i][5]
    ]];
    

    【讨论】:

    • 谢谢,谢谢!我知道这与那些 [ ] 有关,但无法找出正确的组合。我想我尝试了除那个之外的所有组合。现在它正在工作并设置这些值... A3: 未定义 B3:Language Arts 6 C3:undefined D3:A/4 E3:6 F3:67513 G3:Layton, B H3:undefined I3:blayton@eduac。 org 有没有办法让 undefined 值设置为空白或“”?你太有帮助了!
    • 我仍然可以使用帮助来让 undefined 显示为空白,但我想我终于得到了 [ ]。一组用于整个数组的外边缘,另一组用于每一行,行中的每个单元格仅除以 ,我知道这对你们大多数人来说是基本的,但这对我来说是一个革命,哈哈。感谢您帮助理解这一点。
    • @JLBJones 像这样使用||[searchData[I][7] || ""] 提供“”作为默认值。
    • 再次感谢您!你是知识的财富。给你最好的!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-27
    • 1970-01-01
    • 2011-06-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多