如何使用 google 脚本在提示对话框中进行下拉数据验证?
How to do drop-down data validation in a prompt dialogue using google script?
我正在尝试使用 google 脚本通过下拉列表为用户创建提示对话。
这是我目前所处的位置:
function addProject() {
var ui = SpreadsheetApp.getUi(); // Same variations.
var result = ui.prompt(
'Select project from drop-down',
'(use "Project Index" sheet to add a project)',
ui.ButtonSet.OK);
// Process the user's response.
var button = result.getSelectedButton();
var text = result.getResponseText();
if (button == ui.Button.OK) {
// User clicked "OK".
ui.alert('You selected ' + text + '.');
} else if (button == ui.Button.CANCEL) {
// User clicked "Cancel".
ui.alert('I didn\'t get your project.');
}
}
我的 sheet 中的一个按钮可激活此功能。所有这一切只是创建一个提示,您可以在其中输入字符串。但是我需要使用数据验证来创建一个下拉列表,该列表引用我 sheet 中其他地方的范围,以便用户可以输入他们想要的任何内容。
谁能帮我在提示对话框中得到一个下拉列表?
谢谢!
很遗憾,您不能以这种方式使用 ui.prompt
。最好的办法是使用 Custom Dialog,您可以在其中放置下拉菜单。
编辑: 对于部分代码答案,请在此处查看答案,
function NewItem() {
var doc = SpreadsheetApp.getActiveSpreadsheet();
var app = UiApp.createApplication().setTitle('My Application');
var panel = app.createVerticalPanel();
var lb = app.createListBox(true).setId('myId').setName('myLbName');
var sh = SpreadsheetApp.getUi();
var response = sh.alert("Confirm!", "This will delete the selected item in all sheets, do you want to continue?", sh.ButtonSet.OK_CANCEL)
if (response == sh.Button.OK)
{
// List of categories for user to select
lb.setVisibleItemCount(9);
lb.addItem('Category 1');
lb.addItem('Category 2');
lb.addItem('Category 3');
lb.addItem('Category 4');
panel.add(lb);
var button = app.createButton('OK');
var handler = app.createServerClickHandler('click').addCallbackElement(panel);
button.addClickHandler(handler);
panel.add(button);
app.add(panel);
doc.show(app);
}
if (response == sh.Button.CANCEL)
{
sh.alert("Canceled", "The action is canceled", sh.ButtonSet.OK)
}
}
function click(eventInfo) {
var app = UiApp.getActiveApplication();
// get category that user chose
var value = eventInfo.parameter.myLbName;
var doc = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("items_with_category");
var RevenueItem = Browser.inputBox("Copy paste the name of the revenue item from the QB report:");
var COSItem = Browser.inputBox("Copy paste the name of the COS item from the QB report:");
var Client = Browser.inputBox("Copy past the client from QB report:");
var RevAcct = Browser.inputBox("Revenue Account Code (eg. 4001):");
var COSAcct = Browser.inputBox("Revenue Account Code (eg. 5001):");
var lastRow = doc.getLastRow()+1;
//doc.getRange(lastRow,1).setValue(value);
doc.getRange(lastRow,1).setValue(COSItem);
doc.getRange(lastRow,2).setValue(RevenueItem);
doc.getRange(lastRow,3).setValue(Client);
doc.getRange(lastRow,4).setValue(value);
}
我正在尝试使用 google 脚本通过下拉列表为用户创建提示对话。
这是我目前所处的位置:
function addProject() {
var ui = SpreadsheetApp.getUi(); // Same variations.
var result = ui.prompt(
'Select project from drop-down',
'(use "Project Index" sheet to add a project)',
ui.ButtonSet.OK);
// Process the user's response.
var button = result.getSelectedButton();
var text = result.getResponseText();
if (button == ui.Button.OK) {
// User clicked "OK".
ui.alert('You selected ' + text + '.');
} else if (button == ui.Button.CANCEL) {
// User clicked "Cancel".
ui.alert('I didn\'t get your project.');
}
}
我的 sheet 中的一个按钮可激活此功能。所有这一切只是创建一个提示,您可以在其中输入字符串。但是我需要使用数据验证来创建一个下拉列表,该列表引用我 sheet 中其他地方的范围,以便用户可以输入他们想要的任何内容。
谁能帮我在提示对话框中得到一个下拉列表?
谢谢!
很遗憾,您不能以这种方式使用 ui.prompt
。最好的办法是使用 Custom Dialog,您可以在其中放置下拉菜单。
编辑: 对于部分代码答案,请在此处查看答案,
function NewItem() {
var doc = SpreadsheetApp.getActiveSpreadsheet();
var app = UiApp.createApplication().setTitle('My Application');
var panel = app.createVerticalPanel();
var lb = app.createListBox(true).setId('myId').setName('myLbName');
var sh = SpreadsheetApp.getUi();
var response = sh.alert("Confirm!", "This will delete the selected item in all sheets, do you want to continue?", sh.ButtonSet.OK_CANCEL)
if (response == sh.Button.OK)
{
// List of categories for user to select
lb.setVisibleItemCount(9);
lb.addItem('Category 1');
lb.addItem('Category 2');
lb.addItem('Category 3');
lb.addItem('Category 4');
panel.add(lb);
var button = app.createButton('OK');
var handler = app.createServerClickHandler('click').addCallbackElement(panel);
button.addClickHandler(handler);
panel.add(button);
app.add(panel);
doc.show(app);
}
if (response == sh.Button.CANCEL)
{
sh.alert("Canceled", "The action is canceled", sh.ButtonSet.OK)
}
}
function click(eventInfo) {
var app = UiApp.getActiveApplication();
// get category that user chose
var value = eventInfo.parameter.myLbName;
var doc = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("items_with_category");
var RevenueItem = Browser.inputBox("Copy paste the name of the revenue item from the QB report:");
var COSItem = Browser.inputBox("Copy paste the name of the COS item from the QB report:");
var Client = Browser.inputBox("Copy past the client from QB report:");
var RevAcct = Browser.inputBox("Revenue Account Code (eg. 4001):");
var COSAcct = Browser.inputBox("Revenue Account Code (eg. 5001):");
var lastRow = doc.getLastRow()+1;
//doc.getRange(lastRow,1).setValue(value);
doc.getRange(lastRow,1).setValue(COSItem);
doc.getRange(lastRow,2).setValue(RevenueItem);
doc.getRange(lastRow,3).setValue(Client);
doc.getRange(lastRow,4).setValue(value);
}