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