我实质上是在尝试完全完成this question中的操作,但是要使用列而不是行。当我按原样运行脚本时,它工作正常。但是出于某种原因,仅仅将所有对列的引用切换为行(反之亦然)对我来说是行不通的,而且我无法弄清楚出了什么问题。
仅供参考,这是我的目的
function onOpen()
{
var ui = SpreadsheetApp.getUi();
ui.createMenu('My Tools')
.addItem('Hide Columns','hideColumnsDate')
.addToUi();
}
function hideColumnsDate(row)
{
var row = (typeof(row) !== 'undefined') ? row : '1';
var day = 86400000;
var today = new Date().getTime();
var rng = SpreadsheetApp.getActiveSheet().getRange(row + ':' + row);
var rngA = rng.getValues();
for(var i = 0; i < rngA.length ;i++)
{
if(isDate(rngA[i][0]) && (((today - new Date(rngA[i][0]).getTime())/day) > 7 ))
{
SpreadsheetApp.getActiveSheet().hideColumns(i + 1);
}
}
}
function isDate (x)
{
return (null != x) && !isNaN(x) && ("undefined" !== typeof x.getDate);
}
答案 0 :(得分:1)
修改脚本后,如何进行修改?请认为这只是几种修改之一。
SpreadsheetApp.getActiveSheet().getRange(row + ':' + row)
范围检索的值是[[column1, column2, column3,,,]]
。
rngA[0].length
。rngA[i][0]
修改为rngA[0][i]
。for(var i = 0; i < rngA.length ;i++)
{
if(isDate(rngA[i][0]) && (((today - new Date(rngA[i][0]).getTime())/day) > 7 ))
至:
for(var i = 0; i < rngA[0].length ;i++)
{
if(isDate(rngA[0][i]) && (((today - new Date(rngA[0][i]).getTime())/day) > 7 ))
var rngA = rng.getValues();
修改为var rngA = rng.getValues()[0];
,然后将rngA[i][0]
修改为rngA[i]
。如果这不是您想要的结果,我表示歉意。
答案 1 :(得分:0)
function hideColumnsDate(row) {
var row=row||1;
var ss=SpreadsheetApp.getActive();
var sh=ss.getActiveSheet();
var rg=sh.getRange(row,1,1,sh.getLastColumn());
var vA=rg.getValues()[0];
var today=new Date().valueOf();
vA.forEach(function(e,i){
var rowdate=new Date(e).valueOf();
if(((today-rowdate)/86400000)>7) {
sh.hideColumns(i+1);
}
});
}