我当前正在导入一堆数据,然后将其分成多个列,然后尝试清除或删除任何错误的行(这是一个原始数据导入,其中包含一堆废料行(。
到目前为止,我已经有数据导入,分开&分类。现在,我正在尝试根据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);
参考:
-
textFinder
文档