【问题标题】:How get the row number in certain column in google apps script如何在谷歌应用程序脚本中获取特定列中的行号
【发布时间】:2018-06-15 09:58:18
【问题描述】:

在我的电子表格中,我有 12 张工作表。每张纸都以城市名称命名。它还以相应的名称出现在每个工作表的 A 列中。

为了本地化 vba 中的行号,我使用了这段代码。

Q = 0

 For Each Sheet In ThisWorkbook.Worksheets 

    //Result is the last sheet
   If Sheet.Name <> "Result" Then

    With Sheet      
        number = .Range("A:A").Find(Sheet.Name).Row + 1
    totalnumber = .Range("A" & Rows.Count).End(xlUp).Row

Q = Q + (number - totalnumber + 1) * 31
          //I use this for get the date from a month
          For i = 1 To 12
            If arr(i) = .Range("a2") Then    
               YY = Year(Now)
               MM = Month(CDate("01/" & i & "/" & YY))
               Exit For
            End If
          Next
      End With
   End If
Next

我需要此代码,格式为 google 应用程序脚本的 javascript。

我试过了

var Hc = SpreadsheetApp.getActiveSpreadsheet();
var Hn= SpreadsheetApp.getActiveSheet().getName();

number = Hc.getRange('A:A'), Find(Hn), Row + 1;
totalnumber = Hc.getRange('A' & Rows.Count), Hc.End(xlUp), Hc.Row

【问题讨论】:

  • 到目前为止您尝试过什么?向我们展示您的 JavaScript 代码
  • 完成了,我试过了。

标签: javascript google-apps-script google-sheets


【解决方案1】:
  1. 首先,你需要一个函数:

    function myFunction() {
      // next code will be written here, line by line
    }
    
  2. 然后,您需要打开电子表格。

    var ss = SpreadsheetApp.openById("1lqLHXt15SKamuGTnIjQoAAiWuuxEJOUcY1ZdamxCk_0"); // you can actually use this id. Link below the post.
    

    从现在开始,ss 将成为我们的电子表格

  3. 那么你需要得到你所有的床单

    var allMySheets = ss.getSheets();
    

    allMySheets 现在是 array - 每个元素都是我们电子表格中的一个工作表。

  4. 现在我们需要浏览每张纸。有various ways to iterate in Javascript,但在本例中我们将使用forEach 方法:

    allMySheets.forEach(function(sheet){
      //                         ^ note
      // next code will be written here, line by line
    })
    

    它的作用是为allMySheets 中的每个元素调用内部函数,并将该函数作为参数提供该元素。从这里开始,sheet 就是我们的工作表。

  5. You can do all sorts of stuff on a Sheet object。我们需要它的名字使用getName:

    var sheetName = sheet.getName();
    
  6. 我们还需要包含数据的范围:

    var dataRange = sheet.getDataRange();
    
  7. 以及实际值:

    var dataValues = dataRange.getValues();
    
  8. dataValues 现在是一个二维数组,看起来像这样:

    [
      ["Column 1", "Column 2", "Column 3"],
      ["Some val", "Some val2", 15],
      [3,8,0],
    ]
    

    并转换为您在该表中看到的实际表格:

    +----------+-----------+----------+
    | Column 1 | Column 2  | Column 3 |
    +----------+-----------+----------+
    | Some val | Some val2 |       15 |
    | 3        | 8         |        0 |
    +----------+-----------+----------+
    

    我们需要循环这个。我们将使用两个for 循环。第一个代表行,另一个代表列:

    for (var i=0;i<dataValues.length;i++){
      var rowArray = dataValues[i];
      for (var j=0;j<rowArray.length;j++){
        var columnValue = rowArray[j];
      }
    }  
    

    如果i 为 0,则表示我们在第 1st 行,如果是第 2nd 行,依此类推,因为大多数编程语言中的数组,JavaScript包括在内,都是基于 0 的索引。

    同样适用于列。 j0 意味着我们在第一列。

    这是相同的可视化

              j = 0      j = 1      j = 2
          +----------+-----------+----------+
    i = 0 | Column 1 | Column 2  | Column 3 |
          +----------+-----------+----------+
    i = 1 | Some val | Some val2 |       15 |
    i = 2 | 3        | 8         |        0 |
          +----------+-----------+----------+
    
  9. 足够的理论。回到我们的需求,我们关心包含工作表名称的第一列。也就是说,如果j0,我们需要它的数据。这意味着:

    if (j===0) {
      // we are at first column
      // let's check if the value is our sheetName:
    
      if (columnValue === sheetName){
        // if we got here, means we have the needed row. 
        var rowNumber = i + 1; // remember that in array, i being 0 meneans row one
        Logger.log(rowNumber);
    
        // now you can do whatever you want to this number.
      }
    }
    

    或者,另一种方法(我推荐这种方法,因为使用同一行中的其他列值更容易:

    if (rowArray[0] === sheetName){
      // We're at the right row 
      var rowNumber = i+1;
    
      // Do something with columnValue
    
    }
    

就是这样。这是整个代码:

function myFunction() {
  var ss = SpreadsheetApp.openById("1lqLHXt15SKamuGTnIjQoAAiWuuxEJOUcY1ZdamxCk_0");
  var allMySheets = ss.getSheets();
  allMySheets[0].getRange(1, 1, allMySheets[0].getLastRow(), allMySheets[0].getLastColumn()).getValues()
  allMySheets.forEach(function(sheet){
    var sheetName = sheet.getName();
    var dataRange = sheet.getDataRange();
    var dataValues = dataRange.getValues();
    for (var i=0;i<dataValues.length;i++){
      var rowArray = dataValues[i];
      for (var j=0;j<rowArray.length;j++){
        var columnValue = rowArray[j];

        if (rowArray[0] === sheetName){
          // We're at the right row 
          var rowNumber = i+1;
          Logger.log("Row number: %s, sheet name: %s, column value: %s", rowNumber, sheetName, columnValue);
          // Do something with columnValue

        }

      }
    }
  })
}

这里是the spreadsheet with the code embedded

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多