我有一张工作表来跟踪大约1400个停车位,并希望在侧边栏中添加个人搜索。我已经能够通过自定义菜单点击显示侧边栏。在侧边栏中,我可以重命名它,添加搜索栏,并在栏下方添加搜索和关闭按钮。
我现在需要帮助,一旦用户在搜索栏中输入空格编号并点击搜索,它就会获取该空格编号,查看B列并从该行收集以下信息并返回到格式如下:
以下是我现在的代码。
Menu.gs
function onOpen() {
SpreadsheetApp.getUi()
.createMenu('Sidebar')
.addItem('Show Sidebar', 'showSidebar')
.addToUi();
}
Sidebar.gs
function showSidebar() {
var html = HtmlService.createHtmlOutputFromFile('index')
.setSandboxMode(HtmlService.SandboxMode.IFRAME)
.setTitle('Individual Space Lookup');
SpreadsheetApp.getUi()
.showSidebar(html);
}
function searchInfo() {
return ('test');
}
的index.html
<div>
Search Individual Space: <input type="search" />
<BR>
<input type="button" value="Search"
onclick="google.script.run.onSuccess()" />
<input type="button" value="Close"
onclick="google.script.host.close()" />
<script>
function onSuccess(searchInfo) {
alert('Column B: ' + searchInfoColB
<br>'Column C: ' + searchInfoColC
<br>'Column D: ' + searchInfoColD
<br>'Column E: ' + searchInfoColE
<br>'Column F: ' + searchInfoColF
<br>'Column G: ' + searchInfoColG
<br>'Row Number: ' + searchInfoRowNum
);
}
google.script.run.withSuccessHandler(onSuccess)
.searchInfo();
</script>
</div>
答案 0 :(得分:0)
你的第一个输入标签应该有一个&#34; id&#34;属性。这用于检索输入值。
Search Individual Space: <input type="search" id="idUserInput"/>
您的按钮输入标记配置错误。你有:
<input type="button" value="Search"
onclick="google.script.run.onSuccess()" />
应该是:
<input type="button" value="Search"
onclick="myFunction()" />
您有一个带有onSuccess
功能的SCRIPT标记,然后使用google.script.run
来调用Google服务器功能。现在,您在两个地方调用服务器代码。
您的SCRIPT标签只有一个功能,它需要两个:
<script>
function onSuccess() {
alert('Column B: ' + searchInfoColB
<br>'Column C: ' + searchInfoColC
<br>'Column D: ' + searchInfoColD
<br>'Column E: ' + searchInfoColE
<br>'Column F: ' + searchInfoColF
<br>'Column G: ' + searchInfoColG
<br>'Row Number: ' + searchInfoRowNum
);
};
function myFunction() {
//Get the space number out of the input field
var theSpaceNumber = document.getElementById("idUserInput").value;
google.script.run.withSuccessHandler(onSuccess)
.searchInfo(theSpaceNumber);
};
</script>
//Get the space number out of the input field
var theSpaceNumber = document.getElementById("idUserInput").value;
google.script.run.withSuccessHandler(onSuccess)
.searchInfo(theSpaceNumber);
以上代码适用于SCRIPT标记中的客户端代码。添加行以从输入框中获取空格编号,并将theSpaceNumber
变量放入函数调用中。 .searchInfo(theSpaceNumber);
以下是如何启动服务器端代码的概述:
var ss = SpreadsheetApp.openById("theSpreadsheet ID");
//Logger.log(ss.getName());
var sheetWithData = ss.getSheetByName("Sheet Name Here");
var numOfRowsInSheet = sheetWithData.getLastRow();
所以,到目前为止你会有这个:
function searchInfo(argSpaceNumber) {
var ss = SpreadsheetApp.openById("theSpreadsheet ID");
//Logger.log(ss.getName());
var sheetWithData = ss.getSheetByName("Sheet Name Here");
var numOfRowsInSheet = sheetWithData.getLastRow();
return ('test');
};
现在您需要确定获取初始数据的最佳方法。您是要获取大量数据,还是逐个细胞地检索数据?好吧,您需要的所有数据都在连续的列中,这使得它更容易。而且您只获得一行数据,因此更容易。但问题是,什么停车位与哪一排相关?我假设您在A栏中有停车位号码。因此您需要找到停车位号码所在的行号。
var values = sheetWithData.getSheetValues(1, 1, numOfRowsInSheet, 1);
Logger.log(values);
//Convert two dimensional array to one dimensional array.
var theRowValues = [];
for (var i = 0; i < values.length; i++) {
theRowValues.push(values[i]);
};
var rowWithSpaceNumber = theRowValues.indexOf(argSpaceNumber.toString());
Logger.log("rowWithSpaceNumber: " + rowWithSpaceNumber);
//Get 6 columns of data: getSheetValues(startRow, startColumn, numRows, numColumns)
var theRowData = sheetWithData.getSheetValues(rowWithSpaceNumber, 2, 1, 6);
进行这些更改,测试和调试代码,如果您有任何错误,请发布错误消息的另一个问题,和/或返回的结果和预期结果。
使用debug和/或Logger.log()
语句来调试代码。