[英]Get a value and row number in selected range with gaps between cells?
我需要在 Google 工作表腳本中獲取超出選定范圍的值和行號。
最初的問題是我試圖使用此腳本獲取選定范圍的值和行號:
sheet = ss.getActiveSheet(),
sheetvalues = sheet.getActiveRange().getValues();
for (i=0; i<sheetvalues.length; i++) {
mr = sheet.getActiveRange().getRow()+i;
}
但我發現,如果您使用 filer 和 select 范圍,那么所有隱藏單元格也將成為活動范圍的一部分,但我只需要那些在過濾范圍內的單元格。 我決定最好的方法是 select 單元格一個一個地分開。通過我無法獲得值和行索引,因為它僅將最后一個選定的單元格計為活動范圍。
我相信你的目標如下。
在這種情況下,我認為可以使用getSelection
的方法。 並且,為了確認行,使用getActiveRangeList
。 當這反映到示例腳本時,它變成如下。
當您使用此腳本時,首先請 select 像您的示例圖像一樣的單元格並運行該腳本。
function myFunction() {
// 1. Retrieve the selected ranges.
const selection = SpreadsheetApp.getSelection();
// 2. Retrieve the selected row numbers.
const selectedRows = selection.getActiveRangeList().getRanges().flatMap(r => {
const row = r.getRow();
const temp = [];
for (let i = 0; i < r.getNumRows(); i++) {
temp.push(row + i);
}
return temp;
}).sort((a, b) => a - b);
// 3. From data range, retrieve the row numbers except for the selected row numbers.
const sheet = selection.getActiveSheet();
const range = sheet.getDataRange();
const rowNumbers = [];
for (let r = 1; r <= range.getNumRows(); r++) {
if (!selectedRows.includes(r)) rowNumbers.push(r);
}
console.log(rowNumbers); // Here, you can see the retrieved row numbers at the log.
// 4. Retrieve the row values of the retrieved row numbers.
// If you want to retrieve the row values of "rowNumbers", you can also the following script.
const allValues = range.getValues();
const values = rowNumbers.map(n => allValues[n]);
console.log(values); // Here, you can see the values of row numbers at the log.
}
作為使用所選范圍的重點,例如,當依次選擇第 3 行、第 1 行、第 2 行的單元格時,范圍列表返回單元格的順序。 所以在這個示例腳本中,檢索到的行號是排序的。
例如,在運行上面的腳本時,當數據范圍為“ A1:C5”時,並且選擇單元格“ A1”,“ A3”和“ A5”時2, 4
的行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.