Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何更改google sheets脚本中的设置范围,以便在单元格中选择它?_Javascript_Google Apps Script_Google Sheets - Fatal编程技术网

Javascript 如何更改google sheets脚本中的设置范围,以便在单元格中选择它?

Javascript 如何更改google sheets脚本中的设置范围,以便在单元格中选择它?,javascript,google-apps-script,google-sheets,Javascript,Google Apps Script,Google Sheets,首先,我根本不是一个编码员,只是一个善于用谷歌搜索使生活更轻松的老师。在我的出勤记录簿中,我用粗体标出了学生迟到的次数(如果有,他们会得到1分,如果缺席,他们会得到0分,以计算出勤率) 我发现了一个很棒的脚本,它可以让我在一个范围内计算粗体项目的数量。但是,范围已经设置好了,我不能根据需要在谷歌表单中为每个学生指定一个新的范围 我尝试将其更改为“function countColoredCells(countRange)”,但它不起作用,因为我假设在脚本的其余部分中还必须执行其他操作 我几乎没有

首先,我根本不是一个编码员,只是一个善于用谷歌搜索使生活更轻松的老师。在我的出勤记录簿中,我用粗体标出了学生迟到的次数(如果有,他们会得到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    
  }
}