- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的电子表格中有 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
最佳答案
首先,您需要一个函数:
function myFunction() {
// next code will be written here, line by line
}
然后,您需要打开电子表格。
var ss = SpreadsheetApp.openById("1lqLHXt15SKamuGTnIjQoAAiWuuxEJOUcY1ZdamxCk_0"); // you can actually use this id. Link below the post.
从现在开始,ss
将成为我们的电子表格
然后你需要得到所有的床单
var allMySheets = ss.getSheets();
allMySheets
现在是 array - 每个元素都是我们电子表格中的一张表。
现在我们需要浏览每张工作表。有various ways to iterate in Javascript , 但我们将在本例中使用 forEach
方法:
allMySheets.forEach(function(sheet){
// ^ note
// next code will be written here, line by line
})
它所做的是为 allMySheets
中的每个元素调用内部函数,并将该元素作为参数提供给该函数。从这里开始,sheet
就是我们的工作表。
You can do all sorts of stuff on a Sheet
object .我们需要使用 getName
来命名它:
var sheetName = sheet.getName();
我们还需要包含数据的范围:
var dataRange = sheet.getDataRange();
实际值:
var dataValues = dataRange.getValues();
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 的索引。
同样适用于列。 j
为 0
表示我们在第一列。
下面是同样的东西的可视化
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 |
+----------+-----------+----------+
足够的理论。回到我们的需求,我们关心包含工作表名称的第一列。也就是说,如果 j
是 0
,我们需要它的数据。这意味着:
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
}
}
}
})
}
关于javascript - 如何在谷歌应用程序脚本中获取特定列中的行号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50873233/
我是一名优秀的程序员,十分优秀!