Активно пользуюсь Гуглодоксом, в том числе таблицами (их вариант Экселя). Возникла идея, за которую я вряд ли когда-то возьмусь из-за отсутствия времени. Поэтому предлагаю, кому хочется что-то сделать, но не знает что, реализовать следующую вещь.
Таблицы мне кажутся очень негибкими в плане формул. Сегодня пытался вывести день недели и получилось вот что:
Код:
|
=IF(WEEKDAY(A2;2)=1; "пн"; IF(WEEKDAY(A2;2)=2; "вт"; IF(WEEKDAY(A2;2)=3; "ср"; IF(WEEKDAY(A2;2)=4; "чт";
IF(WEEKDAY(A2;2)=5; "пт"; IF(WEEKDAY(A2;2)=6; "сб"; IF(WEEKDAY(A2;2)=7; "вс"))))))) |
В конце это не жабросмайлик (не смое страшное, что может быть), это конец формулы. Кроме этого, возникает еще ряд задач, совершенно неосуществимых (по крайней мере, в рамках моих знаний).
Предлагаю сделать свой табличный препроцессор, где формулы будут обычными JS выражениями, так как JS знают очень многие, а учить быдлоформулы не всем в кайф.
Каждая ячейка имеет свой адрес вида A[1] (может A1, то есть как обычная переменная?). Диапазоны можно задавать в таком виде: range(A[1], C[54]), то есть здесь каждый элемент массива имеет информацию о своём адресе, позволяя функции range создавать диапазон.
Встроенный функций тут может быть очень мало, весь остальной функционал может быть реализован встроенными средствами JS.
Вот пара гипотетических примеров, тупо вписываемых в нужную ячейку:
1. =range(A[1], C[54]).sum();
2. =function(){
switch(todayWeekDay()) {// допустим weekday определена где-то в программе,
// в виде модуля к теблицам, чтоб не писать каждый раз new Date().getDay()
case 1: return "Понедельник";
......
case 7: return "Воскресенье";
}
3. Какая-то сторонняя функция (модуль)
table.range(A[1], C[54]).forEach(function( cell ){
if( cell == 4 ) {
cell.node.style.color = 'red'; // node — ссылка на ячейку в таблице
}
});
В общем, я не знаю, предлагаю ли я что-то свежее и интересное, просто такой вещью сам бы пользовался, если бы она была где-то в облаке (например, использовала Google Fusion Tables, к которому я не ровно дышу).