在我的电子表格中,我有一个正在运行的脚本,它使用getLastRow()
函数作为其逻辑的重要部分。
自从我在其中一个列中应用了数组公式后,getLastRow()
函数无法正常工作。似乎数组公式是"应用"一直到工作表底部,即使其他列中没有其他值,因此getLastRow()
返回有数组公式的最后一行,而不是实际的非空行。 / p>
编写一个缓慢的函数来检查哪些单元格为空对我来说不是一个选项,因为脚本运行时会耗尽这些东西(它有数万行)。
有没有人对解决方法有任何建议?
以下是ARRAYFORMULA
:
=ArrayFormula(IF(A2:A="",,WEEKNUM(A2:A, 2)))
答案 0 :(得分:2)
ARRAYFORMULA()
ARRAYFORMULA
正确使用INDEX/COUNTA
(以确定所需的最后一行)可确保公式仅填充到所需的行而不是伪装
假设您的数据之间没有空白,
=ARRAYFORMULA(WEEKNUM(A2:INDEX(A2:A,COUNTA(A2:A)),2))
答案 1 :(得分:0)
另一种解决方案是使用
sheet.getRange("location of array formula").setValue('');
然后计算lastRow
var lastRow = sheet.getLastRow();
然后替换arrayformula
sheet.getRange("location of array formula").setFormula('the formula');
答案 2 :(得分:0)
这是一个函数,可用于确定lastRow
值的“真” lastColumn
和Sheet
值。它将处理杂乱的ArrayFormula()
和合并的单元格。
function getSheetBoundaries2(sheet) {
var dim = { lastColumn: 1, lastRow: 1 };
sheet.getDataRange().getMergedRanges()
.forEach(function (e) {
var lastColumn = e.getLastColumn();
var lastRow = e.getLastRow();
if (lastColumn > dim.lastColumn) dim.lastColumn = lastColumn;
if (lastRow > dim.lastRow) dim.lastRow = lastRow;
});
var rowCount = sheet.getMaxRows();
var columnCount = sheet.getMaxColumns();
var dataRange = sheet.getRange(1, 1, rowCount, columnCount).getValues();
for (var rowIndex = rowCount; rowIndex > 0; rowIndex -= 1) {
var row = dataRange[rowIndex - 1];
if (row.join('').length > 0) {
for (var columnIndex = columnCount; columnIndex > dim.lastColumn; columnIndex -= 1) {
if (("" + row[columnIndex - 1]).length > 0) dim.lastColumn = columnIndex;
}
if (dim.lastRow < rowIndex) dim.lastRow = rowIndex;
}
}
return dim;
}