根据条件将单元格值从一张google工作表复制到另一张

时间:2016-12-29 23:51:59

标签: javascript google-apps-script google-sheets spreadsheet

我的Google表格脚本存在问题

我从事教育工作,基本上我们有一些老师想要在需要将学生转介给管理员时使用表格。

因此,我们设置了Google表单,并且它的答案填充了表单中的“主”标签。然后我们为每个管理员设置了一个标签,我们可以根据“管理员分配”框的内容(下面代码中的ColumnT)编写一个移动数据的函数

我需要实现功能的第一点是处理该部分的代码,这是我能够提出的(重要的评论,以便您可以希望看到我的思考过程):

//Get the active spreadsheet and store in a variable
function importStudName() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
//Get"Master" spreadsheet and store in a variable
var master_sheet = ss.getSheetByName("Master");
//Get "Miranda" spreadhseet and store in a variable
var miranda_sheet = ss.getSheetByName("Miranda");
//Column T
var columnT = master_sheet.getSheetValues(0, 20, 0, -1);
//Column D
var columnD = master_sheet.getSheetValues(0, 4, 0, -1);
//Column E
var columnE = master_sheet.getSheetValues(0, 4, 0, -1);
//Loop through Column T and find every value that = "Miranda"
    for(var i = 0; i <= columnT; i++) {
        if (columnT[i] === "Miranda") {
          //Set a variable to hold the last row in the "Miranda" sheet
            var miranda_row = (miranda_sheet.getLastRow() + 1);
          //Make the row with the "Miranda" string active

          //Set a variable that concatenates the Column D and Column E variables (from "master" sheet) into a string

          //Copy the new variable to the "Miranda" sheet
            .copyValuesToRange(miranda_sheet, 1, 1, miranda_row, miranda_row);
    }
  }
}

大多数情况下,我似乎无法找出能够选择其中包含“Miranda”关键字的行的位。一旦我解决了这个问题,我认为这只是使用.getRange()函数从columnD和columnE中提取值。

我的JavaScript有点生疏,这是我第一次为应用脚本编写内容。所以我可能会犯这个错误:)

欢迎任何建议

1 个答案:

答案 0 :(得分:2)

方法getSheetValues返回“Object [] [] - 一个二维数组值”。因此,其条目应以values[i][j]的形式访问,其中i是距离范围左上角的行偏移量,j是列偏移量。特别是,您的Miranda比较应该是

if (columnT[i][0] === "Miranda")

另一个评论:与JavaScript数组索引不同,表格中的行号和列号以1开头。在(0, 20, 0, -1);中传递getSheetValues表示您可能会错误地计算内容。

最后,我建议您使用.getRange(...).getValues()代替getSheetValues()。首先,您可以将A1表示法传递给getRange,例如

var valuesT = sheet.getRange("T1:T").getValues();

获取T列中的所有值。如果最好不在底部获取一堆空单元格,可以使用

var lastRow = sheet.getLastRow();
var valuesT = sheet.getRange("T1:T" + lastRow).getValues();