2016-11-30 1 views
1

Ситуация:

Example Spreadsheet

Google Сценарий: Воспроизведение звука, когда конкретная ячейка изменить значение

Лист: Поддержка
Колонка: H имеет следующую функцию «= IF (D: D> 0; IF ($ B $ 1> = $ G: G; "Call"; "In Time"); "") ", который изменяет значение в зависимости от результата.

Проблема:

мне нужно:

  1. Воспроизведение звука, когда клетка в колонке изменения H на "Вызов" на листе "Поддержка".
  2. Эта функция должна запускаться каждые 5 минут.
  3. Должен ли быть загружен звук на диск или я могу использовать звук из URL-адреса?

Я буду признателен всем, может помочь в этом ... Я вижу много кода, но я не очень хорошо понимаю.

ответ

3

Это довольно сложная проблема, но это можно сделать с помощью боковой панели, которая периодически обменивает столбец H на изменения.

Code.gs

// creates a custom menu when the spreadsheet is opened 
function onOpen() { 
    var ui = SpreadsheetApp.getUi() 
    .createMenu('Call App') 
    .addItem('Open Call Notifier', 'openCallNotifier') 
    .addToUi(); 

    // you could also open the call notifier sidebar when the spreadsheet opens 
    // if you find that more convenient 
    // openCallNotifier(); 
} 

// opens the sidebar app 
function openCallNotifier() { 
    // get the html from the file called "Page.html" 
    var html = HtmlService.createHtmlOutputFromFile('Page') 
    .setTitle("Call Notifier"); 

    // open the sidebar 
    SpreadsheetApp.getUi() 
    .showSidebar(html); 
} 

// returns a list of values in column H 
function getColumnH() { 
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Support"); 

    // get the values in column H and turn the rows into a single values 
    return sheet.getRange(1, 8, sheet.getLastRow(), 1).getValues().map(function (row) { return row[0]; }); 
} 

page.html

<!DOCTYPE html> 
<html> 
    <head> 
    <base target="_top"> 
    </head> 
    <body> 
    <p id="message">Checking for calls...</p> 

    <audio id="call"> 
     <source src="||a URL is best here||" type="audio/mp3"> 
     Your browser does not support the audio element. 
    </audio> 

    <script> 
    var lastTime = []; // store the last result to track changes 

    function checkCalls() { 

     // This calls the "getColumnH" function on the server 
     // Then it waits for the results 
     // When it gets the results back from the server, 
     // it calls the callback function passed into withSuccessHandler 
     google.script.run.withSuccessHandler(function (columnH) { 
     for (var i = 0; i < columnH.length; i++) { 

      // if there's a difference and it's a call, notify the user 
      if (lastTime[i] !== columnH[i] && columnH[i] === "Call") { 
      notify(); 
      } 
     } 

     // store results for next time 
     lastTime = columnH; 

     console.log(lastTime); 

     // poll again in x miliseconds 
     var x = 1000; // 1 second 
     window.setTimeout(checkCalls, x); 
     }).getColumnH(); 
    } 

    function notify() { 
     document.getElementById("call").play(); 
    } 

    window.onload = function() { 
     checkCalls(); 
    } 

    </script> 
    </body> 
</html> 

Некоторые источники, чтобы помочь:

+0

Отлично работает ... Но я хава вопрос, боковая панель не ясно, когда звук конца. Возможно ли закрытие автоматически при завершении звука? –

+0

Нет, боковая панель должна оставаться открытой, поэтому она может продолжать проверку столбца H с помощью 'window.setTimeout (checkCalls, x)'. Возможно, вы можете больше нарисовать боковую панель и добавить больше функциональности, чтобы у пользователя было больше причин держать ее открытой. –

+0

Josh, я нашел это funtion google.script.host.close(), но я могу найти способ его использовать ... Звук нужен 2 секунды для запуска ... Я пытаюсь найти способ выполнить google.script. host.close() через 5 секунд ... это funtion закрыть боковую панель –