【问题标题】:Javascript "for" loop of cells data comparison in Google SheetsGoogle表格中单元格数据比较的Javascript“for”循环
【发布时间】:2016-04-17 16:45:37
【问题描述】:

我刚开始使用 js,我正在尝试在 Google Sheets 中制作一个脚本:

https://docs.google.com/spreadsheets/d/1mNBThO2gBpvqQxrLE_hDxLuV--cTc42K8q37ZQG9TCc/edit?usp=sharing

function makeVariants() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("VARIANTSOK");
var righe = sheet.getLastRow();
var lastColumn = sheet.getLastColumn();
var lastCell = sheet.getRange(righe, lastColumn);
Logger.log(lastCell.getValue());
for (i=0; i<righe; i++) {
if (sheet.getRange(righe[i], 2, 1, 1) = sheet.getRange(righe[i-1], 2, 1, 1)) {righe[i].clear();}
}
}

如何循环使B列“B3”中的第二个单元格与上面的“B2”单元格进行比较,如果相同则删除?

我试图获取最后一行,将最后一行加 1 并与上面的行进行比较,最终被删除。我很难把它放在一个循环中。

在附表B11和B10中,B8、B6、B4和B3应该被删除。

【问题讨论】:

    标签: javascript loops for-loop google-apps-script google-sheets


    【解决方案1】:

    这里错的太多了,无法详细分析。我在下面添加了简短的 cmets,但这是一种正确的方法来做你想做的事情。

    function makeVariants() {
      var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("VARIANTSOK");
      var colValues = sheet.getRange(1, 2, sheet.getLastRow(), 1).getValues();
      for (var i = colValues.length - 1; i >= 1; i--) {
        if (colValues[i-1][0] == colValues[i][0]) {
          sheet.getRange(i+1, 2).clear();
        }
      }
    }
    

    此脚本获取 B 列中的值,然后循环遍历它们从下到上,因此删除不会影响后续比较。例如,如果一个循环

    a
    a
    a
    b
    

    从上到下,结果会是

    a
    
    a
    b
    

    第三个 a 没有被删除,因为它与前一个被清除的单元格不匹配。从下往上循环时,结果正确:

    a
    
    
    b
    

    脚本中的一些错误

    • a = b 是分配,而不是比较。阅读a == ba === b
    • sheet.getLastRow(); 返回一个数字,所以 righe[i] 没有意义
    • getRange 返回一个指向范围的指针,而不是该范围内的值。所以拿这个来比较是没有意义的。将getValue 应用于单个单元格范围以获取其值。更好的是,使用getValues 同时获得一堆,就像我在上面所做的那样。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-25
      • 2016-05-27
      • 1970-01-01
      • 2017-07-14
      • 2023-03-28
      相关资源
      最近更新 更多