2

Я работаю над таблицей со мной в электронной таблице google. You can visit it here.Как обновить или управлять диаграммой «Аннотированная временная диаграмма» через пользовательский код приложения электронной таблицы Google?

Если вы заходите на страницу, вы увидите 2 диаграммы на текущем листе (ввод графиков). Первый - встроенный, а последний или нижний - "Annotated Time Line". Теперь у меня есть сценарий (по поисковой системе), чтобы автоматически обновлять диаграмму всякий раз, когда строки таблицы электронной таблицы редактируются. Добавляя и отправляя входы в this form, вы можете добавить некоторые данные/строку в электронную таблицу. Входы будут автоматически добавлены в электронную таблицу.

Теперь, когда я запускаю или запускаю скрипт (onEdit function), тогда обновляется только первая или верхняя диаграмма. Но второй или ниже один не обновляется.

Вот код:

function onEdit() { 
    var s = SpreadsheetApp.getActiveSheet(); 
    var c = s.getCharts(); 

    for (var i in c) { 
    var ch = c[i]; 
    var ranges = ch.getRanges(); 
    var mod = ch.modify(); 
    for (var j in ranges) { 
     var range = ranges[j]; 
     mod.removeRange(range); 
     var newRange = expandRange_(range); 
     mod.addRange(newRange); 
    } 
    s.updateChart(mod.build()); 
    } 
} 

function rangeShouldExpand_(range) { 
    var s = range.getSheet(); 
    var numCol = range.getNumColumns() 
    var values = s.getSheetValues(range.getLastRow(), range.getColumn(), 2, numCol); 

    for (var i = 0; i < numCol; i++) { 
    if (!values[0][i] && !values[1][i] || !!values[0][i] && !!values[1][i]) { 
     continue; 
    } else { 
     return false; 
    } 
    } 
    return true; 
} 

function expandRange_(range) { 
    var s = range.getSheet() 
    var startRow = range.getRow(); 
    var startCol = range.getColumn(); 
    var numRows = range.getNumRows(); 
    var numCols = range.getNumColumns(); 
    while (rangeShouldExpand_(range)) { 
    numRows++; 
    range = s.getRange(startRow, startCol, numRows, numCols); 
    } 
    return range; 
} 

Теперь, что я должен делать или какие изменения я должен сделать, чтобы обе карты работают?

Спасибо, Омар Шариф

+0

Ваш скрипт возвращает 'ReferenceError:" chart "не определен. (строка 13) 'Я предполагаю, что в вашей копии отсутствует какая-то часть ... –

+0

Я изменил недостающие части кода. Я ошибочно написал 'chart' вместо' ch' в строке '13 и 14'. @Serge insas –

+0

thx, я тестировал здесь, все графики обновляются, когда я что-то меняю на листе1 ... Не понял ли я ваш вопрос, когда думал, что он не работает? –

ответ

0

Ваш сценарий, кажется, работает так как он предназначен для, то есть графики обновляются «on edit», то есть, когда пользователь получает доступ к простыне. Если вы обновляетесь при отправке формы без каких-либо других действий пользователя, я бы предложил добавить триггер 'on form submit', чтобы вызвать функцию обновления с помощью панели resource таблицы.

Из того, что я вижу на копии, которую я сделал из вашей таблицы, все диаграммы обрабатываются при вызове функции.

+0

Позвольте мне попробовать свой путь. –

+0

Я пробовал. Но он не работает на диаграмме «Time Line». Не могли бы вы описать немного больше о вашем процессе? Или у вас есть пример? @Serge insas –

2

К сожалению, функциональность встроенных графиков в настоящее время работает только с недокументированным подмножеством всех доступных диаграмм, которые могут не включать тип диаграммы временной линии. Вы можете подать запрос функции, чтобы лучше документировать эту функцию на нашем issue tracker.