arrays - getDisplayValues 未返回二维数组
问题描述
我正在编写一个脚本,该脚本根据行和列的交集更新 Google 表格中的单元格。我通过遍历唯一教师姓名列表来找到该行。当我找到名称时,我在变量“row”中捕获它的行号。然后,我遍历一系列作为日期的列标题以查找特定日期,并将其列号捕获为变量“列”。但是,当我查看代码中每个对象的结构时,“名称”对象显示为 [[Person1]、[Person2]、...、[PersonX]],而“日期”对象显示为 [[date1 ,日期2,...,日期X]]。我可以很好地遍历名称对象,但日期对象不是那么多,我怀疑这是由于结构造成的。
我知道 getDisplayValues 返回一个字符串,当我需要从单元格中获取日期并将其命名为“dateValue”时,它可以在我的代码的另一个区域正常工作。但是,当我在下面代码的“日期”对象中查找该 dateValue 时,这就是我的代码失败的地方。
这是代码示例:
function updateTracker(){
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var teacherName = sheet.getRange('F7').getDisplayValue();
var dateValue = sheet.getRange('N7').getDisplayValue();
var tracker = SpreadsheetApp.openById('AAAbbbCCCxxxYYYzzz111222333');
var tab = tracker.getSheetByName('Tracker');
var names = tab.getRange(1, 4, tab.getLastRow(), 1).getDisplayValues();
var dates = tab.getRange(1, 1, 1, tab.getLastColumn()).getDisplayValues();
for (var i in names) {
if (names[i][0] === teacherName) {
var row = parseInt(i+1);
}
}
for (var j in dates){
if (dates[0][j] === dateValue) {
var column = parseInt(j+1);
}
}
var cell = tab.getRange(row, column).setValue('x');
}
我在 getRange 期望 (number, number) 的最后一行出现错误,但它得到 (number, null)。
关于编辑代码的任何建议?
解决方案
逻辑:
在 的情况下 [[Person1], [Person2],..., [PersonX]]
,您迭代“外部”数组。外部数组中有X
元素。每个元素本身都是一个数组(“内部”) like [Person1]
,每个石灰只有 1 个原始元素Person1
。
而“日期”对象显示为[[date1, date2,..., dateX]]
. 外部数组中只有 1 个元素,[date1, date2,..., dateX]
并且该数组包含许多元素,例如date1
.
解决方案:
您应该在日期数组中迭代内部数组:
for (var j in dates[0]){//note `[0]`
使用for...in
迭代数组也被认为是不好的做法。改用for...of
:
let column = null, j = 0;
for (const date of dates[0]){
j++;
if (date === dateValue) {
column = parseInt(j+1);//also bad to declare var in a block. Moved declaration outside
}
}
参考:
推荐阅读
- react-native - 导出保存状态
- c# - 检查 Id 是否在 Crystal Report 中的字符串数组中
- php - 如何在 laravel 中不再次调用模型的情况下获取更新的字段
- java - jaxb 我们如何传递一个空白的命名空间
- highcharts - Highstock 随机 %d 不正确
- reactjs - 删除后具有正确索引的reactjs映射
- nlp - 使用 SpaCy 时下载“模型”有什么意义?
- go - time.After 在指定时间后没有被触发
- verilog - 最大迭代次数/时钟周期
- vba - 使用 Option Explicit 的 MS Access VBA 给出“变量未定义”错误,但适用于不同的数据库