Скрипт Google Sheet для скрытия столбцов по дате - PullRequest
1 голос
/ 17 октября 2019

По сути, я пытаюсь сделать именно то, что было сделано в этом вопросе , но с колонками вместо строк. Когда я запускаю скрипт там как есть, он работает нормально. Но просто переключение всех ссылок на столбцы на строки (и наоборот) не работает для меня, по некоторым причинам, и я не могу понять, что не так.

Для справки вот что у меня есть:

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); 
    }

Ответы [ 2 ]

1 голос
/ 17 октября 2019

Когда ваш скрипт модифицируется, как насчет этой модификации? Пожалуйста, подумайте об этом как об одной из нескольких модификаций.

Точки модификации:

  • В вашей ситуации значения, полученные из диапазона SpreadsheetApp.getActiveSheet().getRange(row + ':' + row), равны [[column1, column2, column3,,,]].
    • В этом случае длина цикла for составляет 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].
  • В вышеописанном измененном сценарии проверяются все строки столбца. Если вы хотите проверить конкретные столбцы, скажите мне.

Ссылка:

Если это был не тот результат, который вы хотите, я прошу прощения.

0 голосов
/ 17 октября 2019
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);
    }
  }); 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...