[英]Google Sheets script - For each used cell in range 1, if cell value exists in range 2, get range 2 match's row number
[英]Google Sheets Scripts - For each cell in range, get row number where cell has specific value, copy row to first blank row in range
我來自 VB 背景,在為 Sheets 實現腳本解決方案時遇到了一些麻煩,我想 function 相當基本,但還不確定如何在 JS 中表達它。 目標是遍歷范圍內的每個單元格(表 1,Q3:Q1000),獲取該范圍內單元格值為“TRUE”的行號,復制/剪切表 1 上滿足的每一行的全部內容該限定條件(或簡單地存儲值並跳過復制/粘貼步驟),將值粘貼到單獨的工作表(Sheet2)上的第一個未使用的行,然后刪除 Sheet1 上的原始行。
到目前為止,我已經設法將這個粗略的 function 放在一起,它成功地找到了給定范圍內包含指定值的第一個單元格的行號,但如果在該范圍內多次出現該值,它將返回 NaN。 任何關於我做錯了什么的跡象都會有所幫助,謝謝。
function onEditTesting(e) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getSheetByName("Sheet1");
const range = "Q3:1000";
var whereTrue = "TRUE";
var range = sheet.getRange("Q3:Q1000");
var rangeValues = sheet.getRange(range).getValues();
var i = [];
for (var y = 0; y < rangeValues.length; y++) {
if(rangeValues[y] == whereTrue){
i.push(y);
}
}
var Row = Number(i)+Number(range.getRow());
}
function moveData() {
const ss=SpreadsheetApp.getActive();
const ssh=ss.getSheetByName('Sheet1');
const dsh=ss.getSheetByName('Sheet2');
const vs=ssh.getRange(3,1,ssh.getLastRow()-2,ssh.getLastColumn()).getValues();
let oA=[];
let d=0;
vs.forEach((r,i)=>{
if(r[16]=='TRUE') {
oA.push(r);
ssh.deleteRow(i+3-d++);
}
});
dsh.getRange(dsh.getLastRow()+1,1,oA.length,oA[0].length).setValues(oa);
}
這是使用onEdit() Simple Trigger的另一種方法。
function onEdit(e) {
var ss = e.source;
var cell = e.range;
var sourceSheet = ss.getActiveSheet();
var destinationSheet = ss.getSheetByName("Sheet2");
var col = cell.getColumn();
var row = cell.getRow();
var lastCol = sourceSheet.getLastColumn();
Logger.log("row: "+row+" maxCol: "+lastCol+" col: "+col+" val: "+cell.getDisplayValue()+" sheet: "+sourceSheet.getName());
//Check if modified cell is in column Q (index 17) in Sheet1 has a value of TRUE
if(sourceSheet.getName() == "Sheet1" && col == 17 && cell.getDisplayValue() == "TRUE"){
//Append current row to the destination sheet
var values = sourceSheet.getRange(row,1,1,lastCol).getValues();
Logger.log(values);
destinationSheet.appendRow(values.flat());
//Delete current row
sourceSheet.deleteRow(row);
}
}
rowContents
是一維數組,由於Range.getValues()返回一個二維數組,我使用了 array.flat()將二維數組轉換為一維數組之前(表 1):
之后(表 1):
之后(表 2):
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.