可点击菜单谷歌图纸脚本



目前我正在为我们的销售单开发菜单。目标是点击一个菜单项,然后右跳到Google Sheets中的那个单元格(将其视为大型Sheets文档的内容菜单(。

当时我有一个菜单在工作,如果我有手动输入,我的同事就可以去那个牢房了。我将它们划分为5个变量,所有变量都需要可点击(无需手动输入(。作为一个额外的功能,所有这些单元格都需要以某种方式是永久的,这样当我广告一行时,我就不必再编辑脚本了。有人知道我是怎么做到的吗?

这是代码:

function onOpen() {
var ui = SpreadsheetApp.getUi();
// Or DocumentApp or FormApp.
ui.createMenu('Inhoudsopgave')
.addItem('Uren', 'menuItem1')
.addSeparator()
.addItem('Marge','menuItem2')
.addSeparator()   
.addItem('Omzet','menuItem3')
.addSeparator()  
.addItem('Bonus','menuItem4')
.addSeparator()  
.addItem('Pie Charts','menuItem5')  
.addToUi();
}
function menuItem1(){
var strRange = Browser.inputBox("Om naar UREN te gaan vul dan in A2:", Browser.Buttons.OK_CANCEL);
if(strRange != "cancel")
{
try
{
SpreadsheetApp.getActiveSheet().getRange(strRange).activate();
}
catch(e) {Browser.msgBox(e.message);}
}
}
function menuItem2(){
var strRange = Browser.inputBox("Om naar MARGE te gaan vul dan in A191:", Browser.Buttons.OK_CANCEL);
if(strRange != "cancel")
{
try
{
SpreadsheetApp.getActiveSheet().getRange(strRange).activate();
}
catch(e) {Browser.msgBox(e.message);}
}
}
function menuItem3(){
var strRange = Browser.inputBox("Om naar OMZET te gaan vul dan in A382:", Browser.Buttons.OK_CANCEL);
if(strRange != "cancel")
{
try
{
SpreadsheetApp.getActiveSheet().getRange(strRange).activate();
}
catch(e) {Browser.msgBox(e.message);}
}
}
function menuItem4(){
var strRange = Browser.inputBox("Om naar BONUS te gaan vul dan in A579:", Browser.Buttons.OK_CANCEL);
if(strRange != "cancel")
{
try
{
SpreadsheetApp.getActiveSheet().getRange(strRange).activate();
}
catch(e) {Browser.msgBox(e.message);}
}
}
function menuItem5(){
var strRange = Browser.inputBox("Om naar PIE CHARTS te gaan vul dan in A797:", Browser.Buttons.OK_CANCEL);
if(strRange != "cancel")
{
try
{
SpreadsheetApp.getActiveSheet().getRange(strRange).activate();
}
catch(e) {Browser.msgBox(e.message);}
}
}

我没有使用谷歌文档的经验,但我建议从实现DRY原则开始。

function menuItem1() {
openMenuItem('UREN', 'A191');
}
function openMenuItem(title, cell) {
var strRange = Browser.inputBox("Om naar " + title + " te gaan vul dan in " + cell + ":", Browser.Buttons.OK_CANCEL);
if(strRange != "cancel") {
try {
SpreadsheetApp.getActiveSheet().getRange(strRange).activate();
}
catch(e) {
Browser.msgBox(e.message);
}
}
}

我甚至不确定谷歌文档使用的是什么语言,我假设javascript是基于你的例子,但如果不是,你必须查找如何像我在openMenuItem的第一行中那样将字符串与变量连接起来:(

在朋友的帮助下,我成功解决了第一个挑战(无需手动输入(:

function onOpen() {
SpreadsheetApp.getUi()
.createMenu('Inhoudsopgave')
.addItem('Uren', 'menuItem1')
.addSeparator()
.addItem('Marge','menuItem2')
.addSeparator()   
.addItem('Omzet','menuItem3')
.addSeparator()  
.addItem('Bonus','menuItem4')
.addSeparator()  
.addItem('Pie Charts','menuItem5')  
.addToUi();
}
function menuItem1(){
selectCell('A2');
}
function menuItem2(){
selectCell('A191');
}
function menuItem3(){
selectCell('A382');
}
function menuItem4(){
selectCell('A581');
}
function menuItem5(){
selectCell('A797');
}
function selectCell(cell){
try
{
SpreadsheetApp.getActiveSheet().getRange(cell).activate();
}
catch(e) {
Browser.msgBox(e.message);
}
}

现在我们面临的挑战是如何做到这一点,这样我就不必每次添加一行都调整变量了。这个想法是让脚本搜索特定的文本行(即MARGE1X(,这样它每次都能找到那个单元格,有人有建议吗?

最新更新