根据Google表格上与Googlefinance公式相关联的条件播放声音

时间:2015-06-01 16:54:29

标签: audio google-apps-script google-sheets criteria

我有一份Google表格中的公司列表,我正在使用Googlefinance公式(例如googlefinance(“LON:AAL”,“价格”))拉动他们的股票市场价格。此公式自动更新价格,无需人工干预。

我正在尝试根据与公司当前价格相关联的条件设置脚本来播放声音。

例如:

Cell M2的公式为:googlefinance(“LON:AAL”,“价格”),价格为1003

当googlefinance公式自动更新时,价格会更改为1050。 1050高于我设定的阈值1040.因此,当价格更新为1050时,Google表格会发出声音。

我想为一列数据进行设置,这些数据全部由googlefinance公式更新。其中任何一个都符合门槛标准,我想听一听。

重用代码 How can I play a sound as part of a triggered function

我在这里:

将播放器设置为侧边栏,并在打开工作表时将其打开

function checkrange() {
  // Trigger set up for every minute
  var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('23.05.2015');
  var value = ss.getRange("M2:M40").getValues();
  for (var i = 0; i < 39; i++) {
  if (value[i][0] < 0.005) {
  playSidebar();
  }
  } 
  }

如果范围值符合条件,则每分钟检查一次,如果是,则触发声音警报 (我有一个时间驱动每分钟触发设置为此,我不介意它是否反复播放)

进一步阅读后,我认为此检查需要通过setInterval在SidebarJavascript 代码 进行,而不是在这里。

playSidebar()

如果上面的方法是正确的,我需要定义<!-- Use a templated HTML printing scriptlet to import common stylesheet --> <?!= HtmlService.createHtmlOutputFromFile('Stylesheet').getContent(); ?> <div class="sidebar branding-below"> <p> A little music for your enjoyment! </p> <audio id="player" controls > <source src="http://soundbible.com/mp3/Fire_pager-jason-1283464858.mp3" type="audio/mpeg"> Your browser does not support the audio element. </audio> <div id="sidebar-status"></div> </div> <div class="sidebar bottom"> <span class="gray branding-text">Docs Add-on Sound Demo</span> </div> 函数来告诉边栏开始播放。

这是侧边栏播放器的HTML

playsidebar()

当符合范围标准时,侧栏会播放声音。

通过// setInterval to check the range values every minute and play when the criteria is fulfilled. // No need for the checkrange() function above if the check needs to be done at sidebarjavascript. 功能或通过sidebarjavascript.html。

SidebarJavascript.html

searchTerm

你能帮我找一些代码告诉侧边栏播放器开始播放吗?

2 个答案:

答案 0 :(得分:0)

不可能有效地做你想做的事。

正如您已经发现的那样,您只能从html应用播放声音,只有侧边栏能够在工作表中加载html应用。

但是,侧边栏只能通过用户操作或首次打开工作表时打开。

你唯一的选择是始终保持侧边栏打开(从onOpen打开它)然后有一个setInterval(比如每20秒)不断检查更改的范围。你需要记住lastl值以防止声音不断响起。

如果您还要展示视觉效果,也可以使用spreadsheetApp.toast

答案 1 :(得分:0)

这是一个可以实现你想要的工作代码(我知道这个线程很老但是它很有用......) 每次选择具有不同值的单元格时,它将播放一个音调。不是很性感,但这部分很容易改进。

注意:我使用a post by Mogsdad中的部分代码进行投票过程

code.gs

/**
 * @OnlyCurrentDoc  Limits the script to only accessing the current spreadsheet.
 */

var SIDEBAR_TITLE = 'Sidebar Musicbox';

/**
 * Adds a custom menu with items to show the sidebar and dialog.
 * @param {Object} e The event parameter for a simple onOpen trigger.
 */
function onOpen() {
  SpreadsheetApp.getUi()
      .createAddonMenu()
      .addItem('Show sidebar', 'showSidebar')
      .addToUi();
  showSidebar();
}

/**
 * Runs when the add-on is installed; calls onOpen() to ensure menu creation and
 * any other initializion work is done immediately.
 *
 * @param {Object} e The event parameter for a simple onInstall trigger.
 */
function onInstall() {
  onOpen();
}

/**
 * Opens a sidebar. The sidebar structure is described in the Sidebar.html
 * project file.
 */

function showSidebar() {
  var ui = HtmlService.createTemplateFromFile('sidebar')
      .evaluate()
      .setSandboxMode(HtmlService.SandboxMode.IFRAME)
      .setTitle(SIDEBAR_TITLE);
  SpreadsheetApp.getUi().showSidebar(ui);
}

function checkChange(){
  var cell =  PropertiesService.getScriptProperties().getProperty('cell');
  var newCellContent = SpreadsheetApp.getActiveSheet().getActiveCell().getValue();
  if(cell != newCellContent){
    PropertiesService.getScriptProperties().setProperty('cell',newCellContent);
    return 'play';
  }else{
    return 'do nothing';
  }
}

sidebar.html:

<div class="sidebar branding-below">
    <p>
    A little music for your enjoyment!
    </p>
    <audio id="player" controls >
      <source src="https://dl.dropboxusercontent.com/u/211279/beep.mp3" type="audio/mpeg">
      Your browser does not support the audio element.
    </audio>
    <div id="sidebar-status"></div>
</div>

<div class="sidebar bottom">
  <span class="gray branding-text">Docs Add-on Sound Demo</span>
</div>
<?!= HtmlService.createHtmlOutputFromFile('sidebarJS').getContent(); ?>

sidebarJS.html

<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
<script>
  $(function() {
    // call this when opening
    poll();
  });

  function poll(interval) {
    console.log('polling');
    interval = interval || 1000;
    setTimeout(function() {
      google.script.run
        .withSuccessHandler(checkCell)
        .checkChange();
    }, interval);
  };

  function checkCell(cell) {
  console.log('checkChange '+cell);
    if (cell=='play') {
  console.log('play because val= '+cell);
  $('#player').trigger("play");
    }
    poll();
  }
  </script>