在Google表格边栏中创建搜索

时间:2015-02-05 15:52:17

标签: html google-apps-script google-sheets sidebar

我有一张工作表来跟踪大约1400个停车位,并希望在侧边栏中添加个人搜索。我已经能够通过自定义菜单点击显示侧边栏。在侧边栏中,我可以重命名它,添加搜索栏,并在栏下方添加搜索和关闭按钮。

我现在需要帮助,一旦用户在搜索栏中输入空格编号并点击搜索,它就会获取该空格编号,查看B列并从该行收集以下信息并返回到格式如下:

  • B栏:'返回B栏信息'
  • C栏:'返回C栏信息'
  • D栏:'返回D栏信息'
  • E栏:'返回E栏信息'
  • F栏:'返回F栏信息'
  • G栏:'返回栏目G信息'
  • 行号:'返回信息在'
  • 中的行号

以下是我现在的代码。

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>

1 个答案:

答案 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>

将停车位号码传递给gs功能

//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栏中有停车位号码。因此您需要找到停车位号码所在的行号。

获取A列中的所有数据

var values = sheetWithData.getSheetValues(1, 1, numOfRowsInSheet, 1);
Logger.log(values);

在A列中找到空格编号

//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()语句来调试代码。