thr*_*mon 8 javascript arrays indexof google-sheets google-apps-script
我正在为Google Docs Spreadsheet编写一个脚本来读取导演列表,如果它们尚未出现在阵列中,则将它们添加到阵列中.
但是,对于包含在数组中的元素,我似乎无法使indexOf返回除-1之外的任何内容.
谁能告诉我我做错了什么?或者指出一个更简单的方法吗?
这是我的脚本:
function readRows() {
var column = SpreadsheetApp.getActiveSpreadsheet().getRangeByName("Director");
var values = column.getValues();
var numRows = column.getNumRows();
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];
var directors = new Array();
for (var i = 0; i <= numRows - 1; i++) {
var row = values[i];
if (directors.indexOf(row) == -1) {
directors.push(row);
} else {
directors.splice(directors.indexOf(row), 1, row);
}
}
for (var i = 2; i < directors.length; i++) {
var cell = sheet.getRange("F" + [i]);
cell.setValue(directors[i]);
}
};
Run Code Online (Sandbox Code Playgroud)
当您使用getValues()检索Google Apps脚本中的值时,您将始终处理2D Javascript数组(按行然后列编制索引),即使相关范围是一列宽.所以在您的特定情况下,以及扩展+ RobG的示例,您的values数组实际上看起来像这样:
[['fred'], ['sam'], ['sam'], ['fred']]
所以你需要改变
var row = values[i];
Run Code Online (Sandbox Code Playgroud)
至
var row = values[i][0];
Run Code Online (Sandbox Code Playgroud)
另外,值得注意的是,您可以使用Sheets原生的电子表格函数来实现此功能(直接键入电子表格单元格):
=UNIQUE(Director)
这将在命名范围内容Director发生变化时动态更新.话虽如此,您可能有充分的理由想要使用Google Apps脚本.
| 归档时间: |
|
| 查看次数: |
24958 次 |
| 最近记录: |