2016-02-04 5 views
0

У меня нет опыта работы с скриптами в Excel или Google Таблицах, поэтому я пытаюсь немного разветвиться и посмотреть, есть ли решение моей проблемы. Мы используем Google Таблицы для еженедельного календаря на нашем предприятии по ремоделированию кухни. Мы организуем недели слева направо и перечислим задания, которые мы сейчас работаем в этих столбцах. Я хотел бы автоматически скрыть все столбцы с датой старше 4 недель, поэтому, когда лист открывается, мы не начинаем с даты года назад. Я могу прятать эти столбцы вручную каждую неделю, но когда мне нужно вернуться назад и посмотреть предыдущие недели, я вынужден отобразить все thosecolumns, а затем выделить все столбцы, которые я хочу перекрыть. Наличие сценария кажется лучшим решением.Google Таблицы: скрытие столбцов на основе даты в строке 1

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

Спасибо!

Calendar

+0

Вопросы просят нас, чтобы рекомендовать или найти книгу, инструмент, библиотеку программного обеспечения, учебник или другие пределы участка ресурсы являются вне темы для переполнения стека. – Marcinek

ответ

0

Потому что у вас нет «базы данных, как» источник будет очень трудно, но вы можете попробовать создать очень сложный

QUERY() 

вы должны фильтровать даты на другом листе (и вы можете столкнуться с тупиком).

Поэтому я предлагаю использовать вид структуры this, и он также позволит вам создавать другие виды фильтров (или сводных таблиц) в будущем (ремонтируемые и масштабируемые).

0

С Apps Script через Tools->Script Editor вы можете создать меню с помощью onOpen() function. Функция в меню (например, hidePast), затем должна будет проверить заданное значение в каждом столбце (чтобы узнать, к какой дате относится этот столбец), а затем пометить его как скрытое или нет. Функция onOpen, потому что это «простой триггер», не может делать ничего, что требует «авторизации» (например, взаимодействия с нелокальными данными таблиц), отсюда и промежуточный метод. Создавая меню, вы можете упростить для любого пользователя, использующего электронную таблицу, авторизацию и активацию функции.

Пример:

/* @OnlyCurrentDoc */ 
function onOpen() { 
    SpreadsheetApp.getActive().addMenu("Date Tools", 
     [{name:"Hide Past", functionName:"hidePast"}, 
     {name:"Show All", functionName:"showAll"}]); 
} 
function showAll() { 
    var ss = SpreadsheetApp.getActive(); 
    var sheet = ss.getActiveSheet(); 
    sheet.unhideColumn(sheet.getDataRange()); 
    ss.toast("All columns unhidden."); 
} 
function hidePast() { 
    var ss = SpreadsheetApp.getActive(); 
    var sheet = ss.getActiveSheet(); 
    // Acquire the 1st row of all used columns as an array of arrays. 
    var datelist = sheet.getSheetValues(1, 1, 1, sheet.getLastColumn()); 

    // Drop the hours, minutes, seconds, etc. from today. 
    var now = new Date(); 
    var today = new Date(Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate())); 

    // Inspect the datelist and compare to today. Start from the rightmost 
    // column (assuming the dates are chronologically increasing). 
    var col = datelist[0].length; 
    while(--col >= 0) { 
     var then = new Date(datelist[0][col]); 
     if(then < today) { 
      break; 
     } 
    } 

    // Bounds check, and convert col into a 1-base index (instead of 0-base). 
    if(++col < 1) return; 

    // col now is the first index where the date is before today. 
    // Increment again, as these are 2-column merged regions (and 
    // the value is stored in the leftmost range). If not incremented, 
    // (i.e. hiding only part of a merged range), spreadsheet errors will occur. 
    sheet.hideColumn(sheet.getRange(1, 1, 1, ++col)); 
    ss.toast("Hid all the columns before today."); 
} 
Смежные вопросы