我在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中的代码
我在这里:
将播放机设置为侧栏,并在打开工作表时打开它,。
/**
* @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完成,而不是在这里。
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
<!-- 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
// 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.
你能帮我找到密码让侧边栏玩家开始玩吗?
发布于 2016-04-17 11:10:42
下面是实现您想要的东西的工作代码(我知道这个线程已经很老了,但是它可能很有用.)每次您选择一个具有不同值的单元格时,它都会播放一个音调。不太性感,但那部分很容易改进。
注意:我在轮询过程中使用了来自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>
发布于 2015-06-03 13:51:24
做你想做的事是不可能的。
正如您已经发现的,您只能从html应用程序中播放声音,并且只有侧栏能够在工作表中加载html应用程序。
但是,侧栏只能通过用户操作或第一次打开工作表来打开。
唯一的选择是始终保持侧栏打开(从onOpen打开它),然后有一个setInterval (比如每20秒一次),它不断地检查变化范围。您需要记住lastl值,以防止声音不断发出声音。
如果您也想显示一些可视化的东西,也可以使用spreadsheetApp.toast
。
https://stackoverflow.com/questions/30579013
复制相似问题