Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   Идея: Табличный процессор с JS (https://javascript.ru/forum/offtopic/24790-ideya-tablichnyjj-processor-s-js.html)

FINoM 14.01.2012 04:06

Идея: Табличный процессор с JS
 
Активно пользуюсь Гуглодоксом, в том числе таблицами (их вариант Экселя). Возникла идея, за которую я вряд ли когда-то возьмусь из-за отсутствия времени. Поэтому предлагаю, кому хочется что-то сделать, но не знает что, реализовать следующую вещь.

Таблицы мне кажутся очень негибкими в плане формул. Сегодня пытался вывести день недели и получилось вот что:
Код:

=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, к которому я не ровно дышу).

FINoM 14.01.2012 04:16

В яваскрипте, тем более, все числа, строки и прочее являются объектами:
//создание объекта одной ячейки:
var node = querySelector( 'table tr:nth-child($col) td:nth-child($row)'.replace( '$col', col ).replace( '$row', row ) );
var cell = new Number( value );
cell.node = node;
cell.address = [col, row];

trikadin 14.01.2012 04:24

Цитата:

Сообщение от FINoM
Предлагаю сделать свой табличный препроцессор, где формулы будут обычными JS выражениями, так как JS знают очень многие, а учить быдлоформулы не всем в кайф.

Тут либо охуевать от написания своего интерпретатора JS, либо охуевать от проблем с безопасностью. Извините.

А быдлоформулы скопированы из excel'я, и понятны большинству бухгалтерья, которое нифига не знает JS.

FINoM 14.01.2012 04:27

Цитата:

Сообщение от trikadin
А быдлоформулы скопированы из excel'я, и понятны большинству бухгалтерья, которое нифига не знает JS.

Вопрос в гибкости. Мне формулы кажутся крайне не гибкими.
Цитата:

Сообщение от trikadin
Тут либо охуевать от написания своего интерпретатора JS, либо охуевать от проблем с безопасностью. Извините.

Эм?
Для убирания проблем, связанных с кукисами и прочим, можно каждый документ вешать на отдельный домен.

trikadin 14.01.2012 04:30

Цитата:

Сообщение от FINoM
Для убирания проблем, связанных с кукисами и прочим, можно каждый документ вешать на отдельный домен.

Офигеть идея.

Цитата:

Сообщение от FINoM
Вопрос в гибкости. Мне формулы кажутся крайне не гибкими.

А что гибкого в js? Ну, если нужны расчёты на уровне power(a1, b2) - то тут ничего не меняется, будет только Math.power(a1, b2).

FINoM 14.01.2012 04:37

trikadin,
1. Ну, например, я хочу обратиться к ячейке, строка которой указана в другой ячейке:
B[A[5]] — как это сделать в Эксэле?
2. Условное форматирование, которое сильно хромает в современных процессорах
3. Тот же самый аякс для взятия некоторых данных из апи (мне, например, нужно постоянно вручную брать курсы НБУ за разные дни). В тех же GFT очень много самой разной информации.

Gvozd 14.01.2012 04:38

Цитата:

Сообщение от trikadin
Офигеть идея.

Идея странная, но ничего криминального в ней не вижу.
Что криминального вы увидели?

trikadin 14.01.2012 05:16

Цитата:

Сообщение от Gvozd
Идея странная, но ничего криминального в ней не вижу.
Что криминального вы увидели?

Может, я что-то неправильно понял, но, допустим, сервисом пользуется пару тысяч человек. У каждого открыто 2-3 документа.

Эм... Пол десятка тысяч доменов?

trikadin 14.01.2012 05:19

FINoM, ну это на маленькую команду проект тогда получается.

elf2002 14.01.2012 05:25

Ничего не понял, наверное потому что с таблицами в JS почти не работал.
Но вот если бы еще и сортировка столбиков, то било би неплохо.


Часовой пояс GMT +3, время: 23:23.