Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.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 我需要帮助创建一个脚本,隐藏谷歌表中的列,如果在范围内的单元格是空的_Javascript_Google Apps Script_Google Sheets - Fatal编程技术网

Javascript 我需要帮助创建一个脚本,隐藏谷歌表中的列,如果在范围内的单元格是空的

Javascript 我需要帮助创建一个脚本,隐藏谷歌表中的列,如果在范围内的单元格是空的,javascript,google-apps-script,google-sheets,Javascript,Google Apps Script,Google Sheets,我正在尝试创建一个脚本,该脚本将隐藏区域中单元格为空的列(条件) 下面是我的表格,你可以看到有12个角色。我基本上想隐藏角色4以后未使用的任何列,例如,3行中没有值 我有一个脚本可以工作(见下文),但如果角色1、2和3为空,它也会隐藏它们。我希望脚本仅从角色4(F列)开始工作。我需要在脚本中更改什么才能使其工作 另外,我使用了其他帖子中的代码来组合这些内容,所以代码中可能有我不需要的行,我对谷歌脚本还是很陌生的 function hidecolumns() { var sh = Sprea

我正在尝试创建一个脚本,该脚本将隐藏区域中单元格为空的列(条件)

下面是我的表格,你可以看到有12个角色。我基本上想隐藏角色4以后未使用的任何列,例如,3行中没有值

我有一个脚本可以工作(见下文),但如果角色1、2和3为空,它也会隐藏它们。我希望脚本仅从角色4(F列)开始工作。我需要在脚本中更改什么才能使其工作

另外,我使用了其他帖子中的代码来组合这些内容,所以代码中可能有我不需要的行,我对谷歌脚本还是很陌生的

function hidecolumns() {
  var sh = SpreadsheetApp.getActiveSpreadsheet();
  var ss = sh.getSheetByName("Project Team Resources");
  var r = ss.getRange("C5:N10");
  var data = r.getValues();
  var rData, cData, x;
  cData = data[0].map(function (col, c) {
    return data.map(function (row, r) {
        return data[r][c];
      });
  });
  Logger.log(cData.length);
  Logger.log(data.length);
  for(var i=0;i<cData.length;i++){
    if(cData[i].filter(String).length==0)
      ss.hideColumns(i+3)
  }
}
函数hidecolumns(){
var sh=SpreadsheetApp.getActiveSpreadsheet();
var ss=sh.getSheetByName(“项目团队资源”);
var r=ss.getRange(“C5:N10”);
var data=r.getValues();
变量rData、cData、x;
cData=数据[0]。映射(函数(列,c){
返回data.map(函数(行,r){
返回数据[r][c];
});
});
Logger.log(cData.length);
Logger.log(数据长度);
对于(变量i=0;i解释:
您的目标是隐藏除范围中前三列之外的空列

  • 实现这一点的一种方法是迭代所需范围内的所有列,并检查它们是否至少包含一个非空值(
    length>0
    )。如果长度为
    0
    ,则表示此列中的所有值都为空,然后将其隐藏

  • 更详细地说,我使用循环遍历每一列。每一列由一个简单的表达式给出:

    data.map(d=>d[col])
    其中
    col
    取值
    0,1,2,…

  • 如果非空数组的长度为
    0
    ,则打开非空值并仅隐藏列

  • 由于数据范围从第三列
    C
    开始,因此我将隐藏列
    col+3
    。注意这一点,因为它取决于输入范围

  • 最后,您的目标是保持前3列(角色1、2、3)固定不隐藏,无论它们是否包含值。为此,请在
    if
    条件中添加一个额外条件,以检查列是否大于
    2
    col>2

解决方案:

function hidecolumns() {
  var sh = SpreadsheetApp.getActiveSpreadsheet();
  var ss = sh.getSheetByName("Project Team Resources");
  var data = ss.getRange("C5:N10").getValues();
  data[0].forEach((_,col)=>{                 
     if(data.map(d => d[col]).filter(e=>e!='').length==0 && col>2){
       ss.hideColumns(col+3);
     }
  });
}