我有一份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
你能帮我找一些代码告诉侧边栏播放器开始播放吗?
答案 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>