[英]Google Sheets - How can I find the first row number containing specific text, and then clear/delete all content to end?
我目前正在導入一堆數據,然后將其拆分為多個列,然后嘗試清除或刪除任何錯誤的行(它是包含一堆廢料行的原始數據導入)。
到目前為止,我已經導入,拆分和排序了數據。 現在我正在嘗試根據A列中的值找到行號,然后選擇表格末尾的所有行來刪除或清除內容。
我已將我的所有數據分成我需要的列(A:J)並進行排序,以便所有相關數據都位於頂部(它是一個可變數據集)所以現在我只是想找到包含“----------------------”的第一行,因為這將是我的第一個“垃圾”行。
outputrange.setValues(output);
pull1.deleteRows(1, 40);
pull1.getRange(2, 1, pull1.getLastRow()-1,
pull1.getLastColumn()).activate().sort({column:2, ascending: true});
var removalValues = range.getValues()
for (var j=0; j<removalValues.length; j++) {
var rowArray = removalValues[j];
for (var k=0; k<rowArray.length; k++) {
var columnValue = rowArray[k];
if (rowArray[0] === "----------------------") {
var rowNumber = i;
pull1.getRange(rowNumber, 1, 1, pull1.getLastColumn()).activate()
}
}
}
我已嘗試上面的代碼循環並找到正確的單元格引用,並暫時突出顯示該行,以確保它正常運行。 目前這部分代碼進程但是沒有做任何事情。 真的,我只需要能夠查看A列中的數據並查找匹配數據的內容,然后為我返回行號,以便將其應用於其他公式。
編輯:我使用一些額外的資源更新了我的代碼,並提出了以下內容。 它似乎工作正常,但我不確定它是否是最有效的解決方案:
var outputrange = pull1.getRange(startRow, 1, LR-startRow+1, 10)
outputrange.setValues(output);
pull1.deleteRows(1, 40);
pull1.getRange(2, 1, pull1.getLastRow()-1,
pull1.getLastColumn()).activate().sort({column:2, ascending: true});
var rangeData = pull1.getDataRange();
var lastColumn = rangeData.getLastColumn();
var lastRow = rangeData.getLastRow();
var searchRange = pull1.getRange(1,1,lastRow-1,lastColumn-1);
var removalValues = searchRange.getValues();
for (j=0; j < lastColumn-1; j++) {
for (k=0; k < lastRow-1; k++) {
if(removalValues[k][j] === "----------------------") {
pull1.getRange(k+1, 1, pull1.getLastRow(), 10).deleteCells(SpreadsheetApp.Dimension.ROWS);
}
}
}
找到指定的文本然后刪除所述文本下面的所有行。
使用textFinder
查找文本,然后將結果行傳遞給deleteRows()
。
function findAndClear() {
var sh = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var lastRow = sh.getLastRow() + 1;
var range = sh.getRange(1, 1, lastRow);
//find specified text and return row number
var row = range.createTextFinder('----------------------').findNext().getRow();
//calculate number of rows to delete
var delRows = lastRow - row;
//delete rows
sh.deleteRows(row, delRows);
}
首先,抱歉,但我已經廢棄了您正在使用的腳本。 沒有必要讓列中的所有值然后循環遍歷每個值,它過於復雜和緩慢。
使用textFinder
要快得多,沒有循環遍歷數組,只是在A列中找到第一次出現的字符串並獲取行號。
如果您確實想要保留包含字符串的行,請使用:
sh.deleteRows(row + 1, delRows);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.