首先,我根本不是编码人员,只是一位在谷歌搜索中使生活变得更加轻松的老师。在我的出勤书中,我加粗了一个学生迟到的时间(为了计算出勤率,他们会得到1(如果存在)和0(如果不存在)。
我发现了一个很棒的脚本,可以让我计算一个范围内的粗体项目数。但是,范围已设置,我无法根据需要在每个学生的Google表格中指定新范围。
我尝试将其更改为“ function countColoredCells(countRange)”,但由于我认为在脚本的其余部分中还有其他事情要做,因此它不起作用。
我几乎没有或几乎没有编码知识,并且会真的感谢您为解决此问题提供的帮助!
function countboldcells() {
var book = SpreadsheetApp.getActiveSpreadsheet();
var sheet = book.getActiveSheet();
var range_input = sheet.getRange("C3:S3");
var range_output = sheet.getRange("N3");
var cell_styles = range_input.getFontWeights();
var count = 0;
for(var r = 0; r < cell_styles.length; r++) {
for(var c = 0; c < cell_styles[0].length; c++) {
if(cell_styles[r][c] === "bold") {
count = count + 1;
}
}
}
range_output.setValue(count);
}
答案 0 :(得分:0)
range_input
是硬编码的。这是不令人满意的,因为它不允许在逐个学生的基础上进行分析。要解决此问题,您需要遍历每个学生的数据,并对每个学生进行“粗体显示”。
让我们假设“ C3:S3”是单个学生的范围。我们还假设其他学生的数据包含在随后的每一行中,并且有两个标题行。
要做的事情:
ALast
。 range_input
。 注意:
使用range_output
(行,列)为每一行计算目标范围(getRange
。可以通过将值保存到数组中,并在单个过程中更新所有值来完成此操作,但是我最好保留OP所采用的方法,而不要使事情复杂化。如果有很多学生并且代码花费的时间太长,那么按数组更新计数将更加有效。
使用range_input
(行,列,numRows,numColumns)定义输入范围(getRange
)。
function so54260768() {
// Setup spreadsheet and target sheet
var book = SpreadsheetApp.getActiveSpreadsheet();
var sheet = book.getActiveSheet();
// get the number of students in Column A
var Avals = book.getRange("A1:A").getValues(); // assuming rows one and two are headers
var Alast = Avals.filter(String).length;
//Logger.log("DEBUG: The last row on A = " + Alast);// DEBUG
// number of columns in the data range
var NumberofColumns = 17;
// get the data for all students
var range_input = sheet.getRange(3, 3, Alast - 2, NumberofColumns); // the first two rows are headers
var cell_styles = range_input.getFontWeights();
// start loop though each row - one row per student
for (z = 0; z < Alast - 2; z++) {
// set the bold counter to zero
var count = 0;
//loop through the cells in this row; count the cells that are bold
for (var i = 0; i < NumberofColumns; i++) {
if (cell_styles[z][i] === "bold") {
count = count + 1;
}
}
//Logger.log("DEBUG: row="+(z+3)+", count="+count);//DEBUG
var range_output = sheet.getRange(z + 3, 14).setValue(count); //. row, column
}
}