我有一张超过4000行和30列的大表。 如果少于x“空”行,我试图自动向表单添加新行。空行仅由包含公式定义,但数据列A为空。
检查行是否为空我检查A列,因为您必须在A列中输入数据。添加新行后,脚本应该在新行之前复制/粘贴最后一行,因此它们包含公式也是如此。
这是脚本(PREVIOUS VERSION):
function addRowsItems() {
var ss = SpreadsheetApp.getActive();
var sh = ss.getSheetByName('items');
var freeRows = 300; // Number of empty Rows after last Entry
var lRow = sh.getLastRow(), lCol = sh.getLastColumn(), range = sh.getRange(lRow,1,1,lCol);
var startRow = lRow-freeRows;
if(startRow < 0) {
startRow = 1; }
var values = sh.getRange("A" + startRow + ":A").getValues();
var maxIndex = values.reduce(function(maxIndex, row, index) {
return row[0] === "" ? maxIndex : index;
}, 0);
var maxIndex = maxIndex + startRow;
var space = lRow - maxIndex;
var addLines = freeRows - space;
if(space < freeRows) {
sh.insertRowsAfter(lRow, addLines);
range.copyTo(sh.getRange(lRow+1, 1, addLines, lCol), {contentsOnly:false});
}
}
这是在一张包含较少数据的新工作表中。 但是在主表中使用它有超过4000行数据我得到了一些时间。该脚本会添加新行,但在能够复制/粘贴之前会超时。
为什么要花这么多时间?有没有更简单的方法来实现这一目标?
所以这是实际版本。单元格B1包含范围A:A的COUNBLANK
。
function addRowsItems() {
var ss = SpreadsheetApp.getActive();
var sh = ss.getSheetByName('items');
var freeRows = 307; // Number of empty Rows after last Entry
var lRow = sh.getMaxRows(), lCol = sh.getMaxColumns(), range = sh.getRange(lRow,1,1,lCol);
var space = sh.getRange("B1").getValues();
var addLines = freeRows - space;
if(space < freeRows) {
sh.insertRowsAfter(lRow, addLines);
range.copyTo(sh.getRange(lRow+1, 1, addLines, lCol), {contentsOnly:false});
}
}
答案 0 :(得分:1)
尝试 android:onValueChange="@{(picker,oldv,newv) -> viewModel.onValChange(oldv, newv)}">
函数返回范围内的空单元格数。包含文本,数字,错误等的单元格不计算在内。返回空文本的公式将被计算在内。