gpt4 book ai didi

javascript - 如何在谷歌应用程序脚本中获取特定列中的行号

转载 作者:行者123 更新时间:2023-11-30 14:33:04 24 4
gpt4 key购买 nike

在我的电子表格中有 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 apps 脚本的 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

最佳答案

  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 .

关于javascript - 如何在谷歌应用程序脚本中获取特定列中的行号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50873233/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com