Javascript 如何在电子表格中重新排序和设置新排序数组的数组和值?

Javascript 如何在电子表格中重新排序和设置新排序数组的数组和值?,javascript,google-apps-script,Javascript,Google Apps Script,我从一张表中提取数据作为数组,然后将其放入另一张表中,但值的顺序需要不同 如果源数组searchData其中[1,2,3,4,5,6,7]我需要将值pastearray按[7,1,7,4,3,0,2,7,5]的顺序放入第二页。我有三个问题,一个是顺序改变了,第二个是粘贴数组中有重复的值(即第7个值),第三个是从搜索数据中提取的几个值是空的/空白的,在这种情况下是7 我这样做是为了一个班级项目。我只是在学习数组,但仍然无法完全掌握如何操作它们。我已经尝试过1D,2D,3D转换,至少我认为这就是我正

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

如果源数组
searchData
其中
[1,2,3,4,5,6,7]
我需要将值
pastearray
[7,1,7,4,3,0,2,7,5]
的顺序放入第二页。我有三个问题,一个是顺序改变了,第二个是
粘贴数组
中有重复的值(即第7个值),第三个是从
搜索数据
中提取的几个值是空的/空白的,在这种情况下是7

我这样做是为了一个班级项目。我只是在学习数组,但仍然无法完全掌握如何操作它们。我已经尝试过1D,2D,3D转换,至少我认为这就是我正在做的…不确定我是否正确。我已经验证了脚本中除了最终的
pasteRange.setValues(pasterarray[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"]
我已尝试删除“null”值或将其保留在中。我尝试过直接获取一行值并设置它们,只要我不尝试重新排列它们,效果就很好

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); 
         }
    }
  }
}
函数onEdit(e){
如果(e.range.geta1表示法()='F3'&&
e、 range.getSheet().getName()=='班级信息和花名册'){
var ss=SpreadsheetApp.getActiveSpreadsheet();
var paste2=ss.getSheetByName(“类信息和花名册”);
var tclimport=ss.getSheetByName(“TeacherClassListImport”);
var classID=e.range.getValue();//获取类id值
Logger.log(classID);
paste2.getRange(6,1,31,10).clearContent();//清除所有旧信息以防万一
//访问所有类的列表
var lr=tclimport.getLastRow();
var searchData=tclimport.getRange(1,1,lr,7).getValues();//使所有类的数组可用
//Logger.log(searchData);
//查找具有该类ID的行
对于(var i=0;i
我相信你会因为我的代码太初级而畏缩,但它的工作方式是我理解的……除了最后的
setValues()

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


非常感谢您的帮助。

您的
粘贴范围
为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:语言艺术6 C3:未定义D3:A/4 E3:6 F3:67513 G3:Layton,B H3:未定义I3:blayton@eduac.org是否仍要将未定义的值设置为空白或“”呢?你帮了大忙!我仍然需要帮助,让未定义的显示为空白,但我想我终于得到了[]。一个集合用于整个数组的外边缘,另一个集合用于每行,行中的每个单元格都被除,我知道这对你们大多数人来说是基本的,但这对我来说是一个颠覆,LOL。感谢你们帮助我理解这一点。@JLBJones使用
|
像这样:
[searchData[I][7]| |]
来提供“作为默认值。再次感谢!你是知识的财富。祝你好运!