以下のコードで、私は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はnullです。
私は何が間違っているのですか?
実際、[["", ""], ["", ""]].filter(String)
配列全体を返します。なぜ、交換を参照してくださいするにはfilter
でmap
:
[["", ""], ["", ""]].map(String) // [",", ","]
これらは、コンマ付きの真の文字列です。
範囲の最初の列が空でないことでテキストをフィルタリングする正しい方法は、次のようになります。
range.getValues().filter(function(row) {return row[0]})
(0の値が偽であるという通常の警告が適用されますが、そこで数値0が発生するようには見えず、列はテキストです。文字列「0」は真実です。)
(また、ここでは「null」は正しい用語ではありません。AppsScriptは空のセルに対して空の文字列「」を返します。これはとは異なりますnull
)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加