根据条件将单元格值从一个 google sheet 复制到另一个

Copy cell values from one google sheet to another based on condition

我的 Google sheets

脚本有问题

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

因此,我们设置了一个 Google 表单,它的答案填充了 sheet 中的 "Master" 选项卡。然后我们为每个管理员设置一个选项卡,我们的想法是我们可以编写一个函数,根据 "administrator assigned" 框(下面代码中的 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);
    }
  }
}

大多数情况下,我似乎无法弄清楚使 select 成为包含 "Miranda" 关键字的行的位。一旦我把它记下来,我认为这只是使用 .getRange() 函数从 columnD 和 columnE 中提取值的问题。

我的 JavaScript 有点生疏,这是我第一次为应用程序脚本编写一些东西。所以我有可能做错了:)

欢迎提出任何建议

方法getSheetValuesreturns"Object[][] — a two dimension array of values"。因此,其条目应按 values[i][j] 进行访问,其中 i 是距范围左上角的行偏移量,j 是列偏移量。特别是,您的 Miranda 比较应该是

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

另注:与JavaScript 数组索引不同,Sheets 中的行号和列号均以 1 开头。在 getSheetValues 中传递 (0, 20, 0, -1); 表示您可能算错了。

最后,我建议使用 .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();