我試圖在 Apps Script 中找到一種方法,使用陣列方法(不使用表)來過濾來自選定欄位中包含文本資料的大型陣列的記錄。
新過濾的陣列中的記錄將僅包含那些在指定欄位中具有任何(文本)資料的記錄。
然后將過濾后的資料陣列復制到“Sheets”表中以供進一步使用。
使用“”作為條件或特定資料(例如“是”)查找具有空白欄位的記錄效果很好。
我的解決方法是使用“for”回圈來清除已復制陣列的表中的記錄。但是,這比“過濾”記錄方法需要更多時間。
該示例顯示了僅過濾在指定欄位中具有“空白”單元格的記錄的方法。我嘗試了很多可能的標準,以至于我已經忘記了我嘗試過的每個選項,但這里有一些我試圖找到具有非空白單元格的記錄的標準: "<>" !="" ! "" "!Null" ">0" "不為空" "!Empty"。
var Ss = SpreadsheetApp.getActiveSpreadsheet();
var DataSheet = Ss.getSheetByName("VolunteerListTbl");//Source Table of data
var LstRowNum = DataSheet.getLastRow();
var LstColNum = DataSheet.getLastColumn();
// "DataSheetRangeValues" is an array of entire dataset
var DataSheetRangeValues = DataSheet.getRange(3,1, LstRowNum , LstColNum).getValues();
var FilterCriteria = ""; //CASE: NO Coordinator assigned
var FilteredData = DataSheetRangeValues.filter(function(e){return e[1]===FilterCriteria});
var NewSheetName = "CustomSearch_Tbl"; //Each search gets a different 'Sheet' name
var C_SrchResSheet = Ss.getSheetByName(NewSheetName);
//Copy data from 'FilteredData' array to a new table 'NewSheetName'
C_SrchResSheet.getRange(3,1,FilteredData.length,LstColNum).setValues(FilteredData);
RecordsFound = FilteredData.length;
uj5u.com熱心網友回復:
嘗試這個:
function myfunk() {
const ss = SpreadsheetApp.getActive();
const sh = ss.getSheetByName("VolunteerListTbl");
const lr = sh.getLastRow();
const lc = sh.getLastColumn();
const vs = sh.getRange(3, 1, lr - 2, lc).getValues();//note the numrows param
const fvs = vs.filter(e => e[1] != "");//this does not seem consistent with the description in your question
const nsh = ss.getSheetByName("CustomSearch_Tbl");
nsh.getRange(3, 1, fvs.length, fvs[0].length).setValues(fvs);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/346521.html
