简体   繁体   English

删除或忽略.getRange()返回的空单元格

[英]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)
}

Returns 返回 在此处输入图片说明

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? 这个答案怎么样?

Issue 1: 问题1:

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”列的最后一行最底部,那么此修改如何?

From: 从:

var sheetRange = sheet.getRange("F2:F").getValues();

To: 至:

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)

Issue 2: 问题2:

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. 如果sheetRangegetValues()检索的值,则它是二维数组。 And getRange("F2:F") is used for this. getRange("F2:F")用于此目的。 So how about this modification? 那么如何修改呢?

From: 从:

else if (i > 0 && sheetRange[i] <= 0 && sheetRange[i-1] <= 0)

To: 至:

else if (i > 0 && sheetRange[i][0] <= 0 && sheetRange[i-1][0] <= 0)

References: 参考文献:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM