我有一个Google电子表格,可以为每月的工作旅行做一些简单的细胞参考和数学运算。我有一个函数读取A列中的值(通过工作表上的WEEKDAY()公式获得。如果是星期六(值5)或星期日(值6),它会使整行变黑。我需要它以特定方式格式化工作日(值0-4),并且仅当该行中的日期单元格为空时,才将该行重新格式化为标准空白。如何搜索数组(您可以看到)我是如何创建的)并在该数组中找到一个空值?我将复制粘贴数组值的示例日志(注意周期[])
function weekendClean() {
var ss = SpreadsheetApp.getActiveSpreadsheet()
var sheet = ss.getActiveSheet()
var range = sheet.getRange("A3:A33")
var value = range.getValues()
var sheetCheckRange = sheet.getRange(2,2)
var sheetCheck = sheetCheckRange.getValue()
if (sheetCheck == "Date") {
for (i = 0; i < value.length; i++) {
if (value[i] == 5 || value[i] == 6) {
var row = sheet.getRange((i + 3), 1, 1, 11)
var cell = sheet.getRange((i + 3), 3)
row.setBackground("Black")
row.setBorder(true, null, true, null, null, null)
//top, left, bottom, right, vertical, horizontal
cell.setValue("W")
} if (value[i] == 0 || value[i] == 1 || value[i] == 2 || value[i] == 3 || value[i] == 4) {
var section1 = sheet.getRange((i+3), 2, 1, 5)
var section2 = sheet.getRange((i+3), 8, 1, 3)
section1.setBackground("white")
section2.setBackground("white")
section1.setBorder(false, null, false, null, null, false)
section2.setBorder(false, null, false, null, null, false)
}
}
}
}
此外,请随意清理该代码并附上解释(特别是对于那些读取工作日要做的事情)
[15-09-01 17:54:04:051 PDT] [[1.0], [2.0], [], [4.0], [5.0], [6.0],
[0.0], [1.0], [], [3.0], [4.0], [5.0], [], [], [1.0], [], [3.0],
[4.0], [5.0], [6.0], [0.0], [1.0], [2.0], [3.0], [], [5.0], [6.0],
[0.0], [1.0], [2.0], []]
答案 0 :(得分:2)
这是你在你的情况下检索一个空数组的方法:
var x = [[1.0], [2.0], [], [4.0], [5.0], [6.0], [0.0], [1.0], [], [3.0], [4.0], [5.0], [], [], [1.0], [], [3.0], [4.0], [5.0], [6.0], [0.0], [1.0], [2.0], [3.0], [], [5.0], [6.0], [0.0], [1.0], [2.0], []];
function myFunction(x) {
for (var i = 0; i < x.length; i ++) {
if(x[i].length == 0){
// array is empty
Logger.log('empty');
} else {
//array not empty
Logger.log('not empty');
}
}
}
我也注意到了“;”你的陈述中遗漏了。你的脚本按原样运行?
干杯
答案 1 :(得分:1)
我解决了查找数组中哪个位置为空的问题,而是设置一个变量来引用循环中的每个单元格并检查它本身是否为空白。如果它看到它,它执行代码块。示例如下。
function onEdit() {
var ss = SpreadsheetApp.getActiveSpreadsheet()
var sheet = ss.getActiveSheet()
var range = sheet.getRange("A3:A33")
var value = range.getValues()
var sheetCheckRange = sheet.getRange(2,2)
var sheetCheck = sheetCheckRange.getValue()
if (sheetCheck == "Date") {
for (i = 0; i < value.length; i++) {
var row = sheet.getRange((i + 3), 1, 1, 11)
var sessionCell = sheet.getRange((i + 3), 3)
var dateCell = sheet.getRange((i+3), 2)
var section1 = sheet.getRange((i+3), 2, 1, 5)
var section2 = sheet.getRange((i+3), 8, 1, 3)
if (value[i] == 5 || value[i] == 6) {
row.setBackground("Black")
row.setBorder(true, null, true, null, null, null)
//top, left, bottom, right, vertical, horizontal
sessionCell.setValue("W")
} if (value[i] == 0 || value[i] == 1 || value[i] == 2 || value[i] == 3 || value[i] == 4) {
section1.setBackground("white")
section2.setBackground("white")
section1.setBorder(false, null, false, null, null, false)
section2.setBorder(false, null, false, null, null, false)
} if (dateCell.isBlank()) {
section1.setBackground("white")
section2.setBackground("white")
section1.setBorder(false, null, false, null, null, false)
section2.setBorder(false, null, false, null, null, false)
sessionCell.setValue("")
}
}
}
}
我还通过将函数重命名为需要单独的触发器 函数onEdit() 这也使复制电子表格更容易在公司内共享。使用名为'onEdit()'的函数,不需要每个用户授权和设置触发器。
答案 2 :(得分:0)
ArrayLib library能够为你做到这一点,它使得处理2D数组的过程变得更加简单。为此,您需要IndexOf函数,并使用-1来搜索所有列。
答案 3 :(得分:0)
与空
进行比较var x = [[1.0], [2.0], [], [4.0], [5.0], [6.0], [0.0], [1.0], [], [3.0], [4.0], [5.0], [], [], [1.0], [], [3.0], [4.0], [5.0], [6.0], [0.0], [1.0], [2.0], [3.0], [], [5.0], [6.0], [0.0], [1.0], [2.0], []];
function myFunction(x) {
for (var i = 0; i < x.length; i ++) {
if(x[i] == null){
// array is empty
Logger.log('empty');
} else {
//array not empty
Logger.log('not empty');
}
}
}