首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >根据Googlefinance公式链接到Google的标准播放声音

根据Googlefinance公式链接到Google的标准播放声音
EN

Stack Overflow用户
提问于 2015-06-01 16:54:28
回答 2查看 2.4K关注 0票数 1

我在Google上有一份公司名单,我用Googlefinance公式(例如googlefinance("LON:AAL",“price”)来提取他们的股票市场价格)。此公式自动更新价格,无需人工干预。

我正在尝试建立一个脚本来播放一个声音,根据一个标准与一个公司的当前价格挂钩。

例如:

单元格M2的公式是: googlefinance("LON:AAL"," price "),价格是1003。

当googlefinance公式自动更新时,价格会变化到1050。1050高于我设定的阈值,即1040。因此,当价格更新到1050时,Google会播放声音。

我想为一列由googlefinance公式更新的数据设置它。他们中的任何一个都符合门槛标准,我想听到一个声音。

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

我在这里:

将播放机设置为侧栏,并在打开工作表时打开它,

代码语言:javascript
运行
复制
/**
 * @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(e) {
  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(e) {
  onOpen(e);
}

/**
 * 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);
}

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

在深入阅读之后,我认为这个检查需要通过在SidebarJavascript代码中通过setInterval完成,而不是在这里。

代码语言:javascript
运行
复制
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();
  }
  } 
  }

如果上面的方法是正确的,我需要定义playSidebar()函数来告诉侧边栏开始播放。

这里是侧边栏播放器的HTML

代码语言:javascript
运行
复制
<!-- 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>

,当满足范围条件时,侧栏将播放声音.

要么通过playsidebar()函数,要么通过sidebarjavascript.html。

SidebarJavascript.html

代码语言:javascript
运行
复制
// 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.

你能帮我找到密码让侧边栏玩家开始玩吗?

EN

回答 2

Stack Overflow用户

发布于 2016-04-17 11:10:42

下面是实现您想要的东西的工作代码(我知道这个线程已经很老了,但是它可能很有用.)每次您选择一个具有不同值的单元格时,它都会播放一个音调。不太性感,但那部分很容易改进。

注意:我在轮询过程中使用了来自a post by Mogsdad的部分代码

code.gs

代码语言:javascript
运行
复制
/**
 * @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:

代码语言:javascript
运行
复制
<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

代码语言:javascript
运行
复制
<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>
票数 1
EN

Stack Overflow用户

发布于 2015-06-03 13:51:24

做你想做的事是不可能的。

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

但是,侧栏只能通过用户操作或第一次打开工作表来打开。

唯一的选择是始终保持侧栏打开(从onOpen打开它),然后有一个setInterval (比如每20秒一次),它不断地检查变化范围。您需要记住lastl值,以防止声音不断发出声音。

如果您也想显示一些可视化的东西,也可以使用spreadsheetApp.toast

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30579013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档