Google apps script 使用GoogleApps脚本对行进行分组

Google apps script 使用GoogleApps脚本对行进行分组,google-apps-script,google-sheets,google-sheets-macros,Google Apps Script,Google Sheets,Google Sheets Macros,我正在编写代码,用户可以在其中自动生成课程和子主题的模板。每节课将有10个子主题 我还需要按课程和主题对行进行分组 但是,我无法按课程和主题对行进行分组。尝试使用宏录制器,但生成多个课程时代码不起作用 编辑:工作代码更新如下 操作代码非常接近目标。这个答案的主要变化是: 当主题代码使用“点”分隔符时,GoogleSheets将结果值视为一个数字;这会在显示“1.10”时产生问题。我把分隔符改成了破折号。毫无疑问,使用toString还有另一种潜在的方法——但这是一种快速而简单的方法 课程分组很简

我正在编写代码,用户可以在其中自动生成课程和子主题的模板。每节课将有10个子主题

我还需要按课程和主题对行进行分组

但是,我无法按课程和主题对行进行分组。尝试使用宏录制器,但生成多个课程时代码不起作用

编辑:工作代码更新如下


操作代码非常接近目标。这个答案的主要变化是:

当主题代码使用“点”分隔符时,GoogleSheets将结果值视为一个数字;这会在显示“1.10”时产生问题。我把分隔符改成了破折号。毫无疑问,使用toString还有另一种潜在的方法——但这是一种快速而简单的方法

课程分组很简单;10个主题,每个主题7行=70行

通过引用当前单元格的位置(可以在工作表的任何位置),主题分组变得复杂。我通过使用row变量简化了这一点,OP已经正确地增加了row变量

编辑 对格式的两个小更改

sheet.getRangerow,col.setValueLesson+i.setHorizontalAlignmentcenter; 将课程编号居中放置在列中

表。getRangerow,col。setNumberFormat@.setValuei+.+j.setHorizontalAlignmentcenter; 返回“点”分隔符,但使第十个主题显示为1.10,etc credit@Tanaike。也将使列中的文本居中


操作代码非常接近目标。这个答案的主要变化是:

当主题代码使用“点”分隔符时,GoogleSheets将结果值视为一个数字;这会在显示“1.10”时产生问题。我把分隔符改成了破折号。毫无疑问,使用toString还有另一种潜在的方法——但这是一种快速而简单的方法

课程分组很简单;10个主题,每个主题7行=70行

通过引用当前单元格的位置(可以在工作表的任何位置),主题分组变得复杂。我通过使用row变量简化了这一点,OP已经正确地增加了row变量

编辑 对格式的两个小更改

sheet.getRangerow,col.setValueLesson+i.setHorizontalAlignmentcenter; 将课程编号居中放置在列中

表。getRangerow,col。setNumberFormat@.setValuei+.+j.setHorizontalAlignmentcenter; 返回“点”分隔符,但使第十个主题显示为1.10,etc credit@Tanaike。也将使列中的文本居中


我能问一下你的问题吗?1.图像是什么?你能解释一下吗?2.如果你的形象是当前的情况,你能提供你期望的结果吗?因为我无法理解分组行的内容,包括课程和主题。这是因为我的英语水平差。对此我深表歉意。你的问题看起来很像by@kman. 我不认为这只是一个共同关联?图片是最终解决方案看起来像@Tanaike@tedinoz-是的,链接的帖子是我的。但是,我正在使用我的工作帐户。@哈丹,我建议你从另一篇文章中采纳任何有价值的评论,并将其包含在你的问题中,然后删除另一篇文章。任何人在这个问题上投入任何精力都没有意义。我能问一下你的问题吗?1.图像是什么?你能解释一下吗?2.如果你的形象是当前的情况,你能提供你期望的结果吗?因为我无法理解分组行的内容,包括课程和主题。这是因为我的英语水平差。对此我深表歉意。你的问题看起来很像by@kman. 我不认为这只是一个共同关联?图片是最终解决方案看起来像@Tanaike@tedinoz-是的,链接的帖子是我的。但是,我正在使用我的工作帐户。@哈丹,我建议你从另一篇文章中采纳任何有价值的评论,并将其包含在你的问题中,然后删除另一篇文章。任何人也没有必要把精力投入其中。@Tanaike在OP的编辑中,“点”分隔符用于主题名称。这会导致第十个主题显示为1.1和2.1,而不是1.10或2.10,或者至少在我的系统上是这样。在仍然使用“点”分隔符的情况下,您是否发现了改进第十个主题显示的方法。例如,对单元格使用setNumberFormat如何?由此,1.10可以用作1.10。示例脚本是SpreadsheetApp.getActiveSheet.getRangeA1。setNumberFormat@.setValue1.10. 在这种情况下,1.10作为文本放在活动工作表的单元格A1中,而不使用顶部字母的单引号。我对你问题的理解正确吗?我对你问题的理解正确吗?完全地参考我的编辑@哈丹,塔奈克的建议创造了一个值得考虑的编辑。谢谢你们两位:我已经为我的专栏实现了数字格式,这里不包括。我正在为模板添加更多功能。W
完成后,我将共享最终代码和工作表。@Tanaike在OP的编辑中,“点”分隔符用于主题名称。这会导致第十个主题显示为1.1和2.1,而不是1.10或2.10,或者至少在我的系统上是这样。在仍然使用“点”分隔符的情况下,您是否发现了改进第十个主题显示的方法。例如,对单元格使用setNumberFormat如何?由此,1.10可以用作1.10。示例脚本是SpreadsheetApp.getActiveSheet.getRangeA1。setNumberFormat@.setValue1.10. 在这种情况下,1.10作为文本放在活动工作表的单元格A1中,而不使用顶部字母的单引号。我对你问题的理解正确吗?我对你问题的理解正确吗?完全地参考我的编辑@哈丹,塔奈克的建议创造了一个值得考虑的编辑。谢谢你们两位:我已经为我的专栏实现了数字格式,这里不包括。我正在为模板添加更多功能。完成后将共享最终代码和工作表。
  function shiftrowgroupdepth() {
  var spreadsheet = SpreadsheetApp.getActive();
  var sheet = spreadsheet.getActiveSheet();


  // start from row 6 and column 2
  var row = 6;
  var col = 2;

  //Ask user for the no. of lessons
  var shlen = Browser.inputBox("Enter no of lessons", Browser.Buttons.OK_CANCEL);

  for (var i = 1; i <= shlen; i++) {

   sheet.getRange(row,col).setValue("Lesson " + i);
   row++;

    Logger.log(spreadsheet.getCurrentCell().getRow())
   sheet.getRange(row, 1, 70, sheet.getMaxColumns()).activate()
  .shiftRowGroupDepth(1);

   // Add sub-topics (1.1, 1.2 ....)

   for (var j=1;j<=10;j++){

     sheet.getRange(row,col).setValue(i+"."+j);
     sheet.getRange(row+1, 1, 6, sheet.getMaxColumns()).activate()
    .shiftRowGroupDepth(1);

     row=row+7;

     }    


  }
};
function so5774532602() {

  var ss = SpreadsheetApp.getActive();
  var sheetname = "OPSheet";
  var sheet = ss.getSheetByName(sheetname);
  var row = 6;
  var col = 2;

  //Ask user for the no. of lessons
  var shlen = Browser.inputBox("Enter no of lessons", Browser.Buttons
    .OK_CANCEL);

  for (var i = 1; i <= shlen; i++) {

    sheet.getRange(row, col).setValue("Lesson " + i);

    // add grouping
    // Logger.log("DEBUG: i = "+i+", lesson range = "+sheet.getRange(+(row + 1), 2, 70, 1).getA1Notation());
    sheet.getRange(+(row + 1), 2, 70, 1).activate()
      .shiftRowGroupDepth(1);

    row++;

    // Add sub-topics (1.1, 1.2 ....)        leave 6 blank rows below each sub-topic. Then, group those blank rows

    for (var j = 1; j <= 10; j++) {
      // Logger.log("DEBUG: i = "+i+", j = "+j+", row = "+row+", col = "+col); // new
      sheet.getRange(row, col).setValue(i + "-" + j);

      // add grouping
      // Logger.log("DEBUG: range details: row = "+(row + 1) +",column = 1"+"number of rows = "+6+", number of columns = 1");
      // Logger.log("DEBUG: topic range = "+sheet.getRange(+(row + 1), 2, 6, 1).getA1Notation());
      sheet.getRange(+(row + 1), 2, 6, 1).activate()
        .shiftRowGroupDepth(1);

      row = row + 7;

    }
  }
}