如何在一个Google工作表电子表格中的多个列范围内运行我的隐藏/显示列脚本?

时间:2017-11-30 22:47:49

标签: javascript google-apps-script google-sheets

我没有在javascript中编写程序,但我设法找到了在线下面的脚本,这允许我隐藏一系列列。问题是我需要能够在一个工作表中为多个范围的列重复此操作。所以我可以用一个按钮隐藏/显示C-AG列,并用另一个按钮单独隐藏/显示列AI-BJ(并且这个数字可以持续多个月)。这适用于包含大量数据的约会,因此我可以轻松隐藏和显示每个月的约会。

请参见下图,此演示了该功能。 (第一张图片显示1月份显示,第二张图片显示1月隐藏。)

Spreadsheet before running hide script -

Spreadsheet after running hide script

请同时查看此脚本放入工具栏的自定义菜单图像。在这个菜单中有两个按钮,第一个是Show C-AG,第二个是Hide C-AG。

Custom menu created by script

这是允许我隐藏/显示一系列列(C-AG)并且运行良好但仅限于一组列(一个月)的脚本:

 function onOpen() {
    var menu = [{name: "Show C-AG", functionName: "showColumns"}, {name: "Hide C-
    AG", functionName: "hideColumns"}]
    SpreadsheetApp.getActiveSpreadsheet().addMenu("Custom", menu);
}

  function showColumns() {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sheet = ss.getActiveSheet();
    sheet.showColumns(3,31);   // C-AG, 31 columns starting from 3rd 
}

  function hideColumns() {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sheet = ss.getActiveSheet();
    sheet.hideColumns(3,31);  // C-AG, 31 columns starting from 3rd 
}

提前感谢您对此提供任何帮助,如果我的问题太模糊,请随时告诉我如果有必要添加更多信息/说明,请向您致歉。

3 个答案:

答案 0 :(得分:0)

如果您不想为每个月创建一个自定义菜单选项,并且要显示一个功能而另一个要隐藏每个月的列,则必须使用参数并设置一种方法来设置和获取这些参数并将它们发送到你的职能部门。

一种方法是使用电子表格中的单元格来设置月份。另一种方法是使用对话框/侧边栏来执行此操作。如果您使用纯文本输入字段或使用下拉菜单,单选按钮等,将会选择您。

答案 1 :(得分:0)

这应该适合你一段时间。您所要做的就是输入要隐藏和显示的所有列号。在脚本编辑器中运行onOpen函数是有帮助的,这样您就可以对其进行授权。

中间函数showMyCols和hideMyCols只需编写一个函数来进行显示和隐藏,它们使您不必担心如何设置参数。

function onOpen(){
  SpreadsheetApp.getUi().createMenu('MyTools')
      .addItem('Show', 'showMyCols')
      .addItem('Hide', 'hideMyCols')
      .addToUi();
}

function showMyCols(){
  showhideCols('3,4,5,6,7,8,9,10',true);
}

function hideMyCols(){
  showhideCols('3,4,5,6,7,8,9,10',false);
}

function showhideCols(colscsv,show){
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getActiveSheet();
  if(!colscsv){
    var resp=SpreadsheetApp.getUi().prompt('Enter Column Numbers separated by commas.', SpreadsheetApp.getUi().Button.OK);
    var cA=resp.getResponseText().split(',');
  }else{
    var cA=colscsv.split(',');
  }
  for(var i=0;i<cA.length;i++){
    if(show){
      sh.showColumns(cA[i]);
    }else{
      sh.hideColumns(cA[i]);
    }
  }
}

答案 2 :(得分:0)

感谢帮助,我真的很感激,我最终捏造了Cooper发布的代码。我知道这很麻烦,但它对我需要的东西很有用。再次感谢!

function onOpen(){
  SpreadsheetApp.getUi().createMenu('MyTools')
      .addItem('HideJanuary', 'hideCols1')
      .addItem('HideFebruary', 'hideCols2')
      .addItem('HideMarch', 'hideCols3')
      .addToUi();
}

function hideCols1(){

showhideCols('3,4,5,6,7,8,9,10,11,12,13,14,15
,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33',false);
}

function hideCols2(){

showhideCols('35,36,37,38,39,40,41,42,43,44,45,
46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62',false);
}

function hideCols3(){

showhideCols('64,65,66,67,68,69,70,71,72,73,74,75,
76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94',false);
}

function showhideCols(colscsv,show){
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getActiveSheet();
  if(!colscsv){
    var resp=SpreadsheetApp.getUi().prompt('Enter Column Numbers separated by 
commas.', SpreadsheetApp.getUi().Button.OK);
    var cA=resp.getResponseText().split(',');
  }else{
    var cA=colscsv.split(',');
  }
  for(var i=0;i<cA.length;i++){
    if(show){
      sh.showColumns(cA[i]);
    }else{
      sh.hideColumns(cA[i]);
    }
  }
}