使用下面的代码,我有一个Google表格,我正在尝试从不同的部分创建数组。
function onFormSubmitTest(e) {
//Open spreadsheet based on URL
var ss = SpreadsheetApp.openByUrl('sheetnamehere');
//Set as Active
SpreadsheetApp.setActiveSpreadsheet(ss);
//Set Tabs as Variables
var Rsheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Emailer");
var Lsheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Unique Databases");
//----Set last Rows as Variables----
// Gets Values from different sections
var formResponses = Rsheet.getRange("N3:N").getValues();
var databaseNames = Lsheet.getRange("A2:B").getValues();
var developerNames = Lsheet.getRange("F2:F").getValues();
// Filters to ranges that have values, ignores null
var lastRvalues = formResponses.filter(String);
var lastLvalues = databaseNames.filter(String);
var lastDvalues = developerNames.filter(String);
// Sorts arrays for faster indexing
var lastR = lastRvalues.sort();
var lastL = lastLvalues.sort();
var lastD = lastDvalues.sort();
// Unique Databases
var currentDatabases = lastL;
// Current Developers
var currentDevelopers = lastD
在“唯一数据库”选项卡上,工作表上有100行,其中只有28行具有数据。如果我有下面的代码,我可以看到它只有28个预期值:
var databaseNames = Lsheet.getRange("A2:A").getValues();
然而,当我添加另一列时,我得到100个值,绝大多数是[“”,“”]。应该注意,28个值是关键的>值对,所以如果A:A中有一个值,则B:B中将有一个值。如果在A:A中为null,则B:B为空。
我做错了什么?
答案 0 :(得分:1)
确实,[["", ""], ["", ""]].filter(String)
返回整个数组。要了解原因,请将filter
替换为map
:
[["", ""], ["", ""]].map(String) // [",", ","]
这些是真正的字符串,带有逗号。
通过范围第一列的无效来过滤文本的正确方法是
range.getValues().filter(function(row) {return row[0]})
(关于0值为假的常见警告适用,但看起来你不会遇到数字0,列是文本。字符串" 0"是真的。)
(另外," null"这里不是正确的术语,Apps脚本返回空字符串""表示空单元格,与null
不同)