Javascript 如何更改google sheets脚本中的设置范围,以便在单元格中选择它?
首先,我根本不是一个编码员,只是一个善于用谷歌搜索使生活更轻松的老师。在我的出勤记录簿中,我用粗体标出了学生迟到的次数(如果有,他们会得到1分,如果缺席,他们会得到0分,以计算出勤率) 我发现了一个很棒的脚本,它可以让我在一个范围内计算粗体项目的数量。但是,范围已经设置好了,我不能根据需要在谷歌表单中为每个学生指定一个新的范围 我尝试将其更改为“function countColoredCells(countRange)”,但它不起作用,因为我假设在脚本的其余部分中还必须执行其他操作 我几乎没有编码方面的知识,如果能帮我解决这个问题,我将不胜感激Javascript 如何更改google sheets脚本中的设置范围,以便在单元格中选择它?,javascript,google-apps-script,google-sheets,Javascript,Google Apps Script,Google Sheets,首先,我根本不是一个编码员,只是一个善于用谷歌搜索使生活更轻松的老师。在我的出勤记录簿中,我用粗体标出了学生迟到的次数(如果有,他们会得到1分,如果缺席,他们会得到0分,以计算出勤率) 我发现了一个很棒的脚本,它可以让我在一个范围内计算粗体项目的数量。但是,范围已经设置好了,我不能根据需要在谷歌表单中为每个学生指定一个新的范围 我尝试将其更改为“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);
}
函数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计数=0;
对于(var r=0;r 现有脚本中的输入范围是硬编码的。这并不令人满意,因为它不允许逐个学生进行分析。要解决这个问题,您需要遍历每个学生的数据,并为每个学生执行“countbold”
让我们假设“C3:S3”是单个学生的范围。我们还假设其他学生的数据包含在随后的每一行中,并且有两个标题行
要做的事:
- 计算学生数据的行数-参考变量
ALast
李>
- 一次性获取所有学生的数据。为什么?因为这比一次获取一行数据更有效-请参阅下面讨论的
range\u input
李>
- 循环遍历每一行数据(即按学生循环-使用“for”循环)李>
- 计算粗体单元格并更新每个学生的结果-使用大多数现有代码李>
注意:
目标范围(range\u output
)是使用getRange
(行、列)为每一行计算的。这可以通过将值保存到一个数组中,并在一个进程中更新所有值来实现,但我认为最好保留OP已经采取的方法,而不要使问题过于复杂。如果有很多学生,并且代码运行时间太长,那么按数组更新计数会更有效
输入范围(range\u input
)是使用getRange
(行、列、numRows、numColumns)定义的
- 行=3,数据的第一行
- 第3列,第C列
- numRows=计算值(ALast减去两行标题)
- numColumns=C列到S列(包括)17(分配给变量)
功能so54260768(){
//设置电子表格和目标表
var book=SpreadsheetApp.getActiveSpreadsheet();
var sheet=book.getActiveSheet();
//获取A列中的学生人数
var Avals=book.getRange(“A1:A”).getValues();//假设第一行和第二行是标题
var Alast=Avals.filter(String).length;
//Logger.log(“调试:A=“+Alast)”上的最后一行;//调试
//数据范围中的列数
var NumberofColumns=17;
//获取所有学生的数据
var range_input=sheet.getRange(3,3,Alast-2,NumberofColumns);//前两行是标题
var cell_styles=range_input.getFontWeights();
//每行开始循环-每名学生一行
对于(z=0;z
您是要计算粗体单元格还是彩色单元格?
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
}
}