【发布时间】:2021-08-07 05:43:16
【问题描述】:
我想编写一个脚本,允许我仅突出显示(背景颜色)选定范围内的某些单元格,例如,即使我选择了整个表格,也只突出显示第 2 列和第 2 行中的单元格。
例如:
For each cell in selected range {
If selected cell[i][j] is within allowed range {
cell background color = green
};
};
我要完成的代码:
function BackgroundColor() {
var spreadsheet = SpreadsheetApp.getActive();
var sheet = spreadsheet.getActiveSheet();
var range = sheet.getActiveRange();
var cells = range.getValues();
var numRows = range.getNumRows();
var numCols = range.getNumColumns();
for (var i = 0; i < numRows; i++) {
for (var j = 0; j < numCols; j++) {
if (range.getValues()[i][j] == '') {
range.setBackground('#00B050').setFontColor('#ffffff')
}
}
}
range.setValues(cells);
};
我能够在 VBA 中实现它:
Sub cmdGreen()
Dim Cel As Range
Dim GreenArrayCount As Integer
Dim InteriorColor As Long, FontColor As Long
Dim GreenArray() As Variant
Dim BodyRange As String
InteriorColor = VBA.RGB(0, 176, 80) 'interior in green
FontColor = VBA.RGB(255, 255, 255) 'font in white
GreenArray = Array("COLUMN 2", "ROW 2")
BodyRange = ActiveSheet.ListObjects(1).DataBodyRange.Address
For Each Cel In Application.Selection.Cells
If Not Intersect(Cel, Range(BodyRange)) Is Nothing Then
For GreenArrayCount = LBound(GreenArray) To UBound(GreenArray)
If (ActiveSheet.ListObjects(1).HeaderRowRange(Cel.Column).Value _
= GreenArray(GreenArrayCount) Or _
ActiveSheet.ListObjects(1).DataBodyRange(Cel.Row - 1, 1).Value _
= GreenArray(GreenArrayCount)) Then
Cel.Interior.Color = InteriorColor
Cel.Font.Color = FontColor
End If
Next GreenArrayCount
End If
Next Cel
End Sub
有人可以帮帮我吗?
【问题讨论】:
-
请多谈谈“允许范围”。我们应该如何知道哪些单元格颜色为绿色?
-
在我的示例中,如附图所示 (i.stack.imgur.com/wCJhe.png),允许的范围是 COLUMN 2 和 ROW 2。如果选择了此范围内的单元格,则只能着色。
-
“允许范围”是否总是 R2 和C2?如果是这种情况,则不需要所有代码。只需将范围设置为 R2 和 C2,然后设置背景。
-
在这个例子中,是的。但我想阻止人们将单元格的背景设置在这个范围之外。这是一个可共享的工作表。
-
我添加了一个等效的 VBA 代码,它在 Excel 中也是如此。这就是我想要的,但对于 Google 表格。
标签: loops google-apps-script google-sheets range highlight