[英]Removing or Ignoring Empty Cells Returned by .getRange()
So I have a column of data in a sheet, that I am iterating over with an apps script function. 因此,我在工作表中有一列数据,我正在使用应用程序脚本函数进行迭代。
The problem is that my sheet has a number of empty cells at the end, which are rendered as []
when I use .getRange()
. 问题是我的工作表的末尾有许多空单元格,当我使用
.getRange()
时,它们呈现为[]
。
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("AUD Data");
var sheetRange = sheet.getRange("F2:F").getValues();
function logRange() {
Logger.log(sheetRange)
}
I want to get all these blank cells at the end, out of my cell array, as it is messing with results when I loop over this array. 我想从单元格数组中获取所有这些空白单元格的末尾,因为当我遍历此数组时,它会弄乱结果。
Have tried filter() and isNaN but those solutions didn't work. 尝试过filter()和isNaN,但是这些解决方案不起作用。
Ideally I would like to remove the empty arrays, before looping, but a way of ignoring them in a condition would be fine too. 理想情况下,我想在循环之前删除空数组,但是在某种情况下忽略它们的方法也可以。
I find it interesting that even though these empty cells are displaying as empty arrays, Apps Script seems to treat them as having a value. 我发现有趣的是,即使这些空单元格显示为空数组,Apps Script似乎也将它们视为具有值。 My conditions should ignore imo... eg.
我的条件应该忽略imo ...例如。
else if (i > 0 && sheetRange[i] <= 0 && sheetRange[i-1] <= 0)
How can an empty array be treated as a number? 空数组如何被视为数字?
NOTE: I can fix this by deleting the empty rows in the sheet, but would rather do this with code. 注意:我可以通过删除工作表中的空行来解决此问题,但宁愿使用代码来解决此问题。
How about this answer? 这个答案怎么样?
In your spreadsheet, if the last row of all columns is the same or the last row of the column "F" is most bottom, how about this modification? 在您的电子表格中,如果所有列的最后一行相同或“ F”列的最后一行最底部,那么此修改如何?
var sheetRange = sheet.getRange("F2:F").getValues();
var sheetRange = sheet.getRange(2, 6, sheet.getLastRow() - 1, 1).getValues();
Or if the last row of the column "F" is different from the last row of other columns, how about the following modified script? 或者,如果“ F”列的最后一行与其他列的最后一行不同,那么下面的修改脚本怎么样?
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("AUD Data");
var sheetRange = sheet.getRange("F2:F").getValues();
for (var i = sheetRange.length - 1; i >= 0; i--) {
if (sheetRange[i][0]) {
sheetRange.splice(i + 1, sheetRange.length - (i + 1));
break;
}
}
Logger.log(sheetRange)
Or if you want to also remove the empty elements of the middle of array, how about the following script? 或者,如果您还想删除数组中间的空元素,那么下面的脚本怎么样?
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("AUD Data");
var sheetRange = sheet.getRange("F2:F").getValues().filter(String);
Logger.log(sheetRange)
About else if (i > 0 && sheetRange[i] <= 0 && sheetRange[i-1] <= 0)
, from your script, I thought that you might use 2 dimensional array is used for this situation. 关于
else if (i > 0 && sheetRange[i] <= 0 && sheetRange[i-1] <= 0)
,从您的脚本来看,我认为您可能会使用2维数组来处理这种情况。 If sheetRange
is the value retrieved by getValues()
, it is 2 dimensional array. 如果
sheetRange
是getValues()
检索的值,则它是二维数组。 And getRange("F2:F")
is used for this. 而
getRange("F2:F")
用于此目的。 So how about this modification? 那么如何修改呢?
else if (i > 0 && sheetRange[i] <= 0 && sheetRange[i-1] <= 0)
else if (i > 0 && sheetRange[i][0] <= 0 && sheetRange[i-1][0] <= 0)
If I misunderstood your question and this was not the direction you want, I apologize. 如果我误解了您的问题,而这不是您想要的方向,我深表歉意。
All of the cases in the filter should be eliminated with a simple truthy statement, but this will explicitly check to make sure none of those conditions happen. 过滤器中的所有情况都应通过一个简单的真实陈述来消除,但这将显式检查以确保所有这些情况都不会发生。
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("AUD Data");
var sheetRange = sheet.getRange("F2:F").getValues();
sheetRange = sheetRange.filter(sheet => sheet != null && sheet != 'undefined' && sheet.trim() != '');
function logRange() {
Logger.log(sheetRange)
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.