使用谷歌应用程序脚本从工作表中获取值并将其显示在文本框中

Using Google App Script to get values from sheets and display them in text box

本文关键字:显示 文本 获取 脚本 应用程序 谷歌 工作      更新时间:2023-09-26

因此,Google最近更新了Google App Script API,并添加了许多不错的功能,但在这个过程中,他们也贬值了API的lots。我一直在为我在大学校园工作的地方开发图书馆数据库用户界面,当我想将我的应用程序更新到新的API时,很多东西都坏了,我不知道如何让它们重新工作。

我想做的是从Google Sheets文件中获取一个值,然后简单地将该值放在web应用程序的文本框中。目前我无法完成那项工作。此外,我发现了一些麻烦的地方,即调试器似乎不正确。我知道,大胆的指控。让我试着给你看看。

代码.gs

  function doGet(e) {
  var html = HtmlService.createHtmlOutputFromFile('index')
  .setSandboxMode(HtmlService.SandboxMode.IFRAME);
  return html; 
}

function searchBooks(searchItem, searchType){
  var sI = searchItem;
  Logger.log(sI);
  var sT = searchType;
  Logger.log(sT);
  var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
  var ss = sheets[0];
  var itemDataRange = ss.getRangeByName("itemInformation");
  var selectedItem = null; //the item that will be returned
  //var selectedSearch = searchItem;
  var titles = sheet.getRange("K2:K9507").getValues(); //get the titles of the items
  var authors = sheet.getRange("J2:J9507").getValues(); //get the authors in the sheet
  var barcodes = sheet.getRange("B2:B9507").getValues(); //get the barcodes in the sheet
  var itemsArray = new Array();

  if (sT == '')
  {
   return null; 
  }
  else if (sT.value == 'Please select type...')
  {
    var test = "this works";
    Logger.log(test);
    return selectedItem;
  }
  else if(sT == 'Barcode')
  {
    var selectedBarcode = sI;
    for(var i = 0; i < barcodes.length; i++) //search for the barcode
    {
      if(barcodes[i] == selectedBarcode)
      {
        selectedItem = titles[i];
        break; //break immediately because barcodes are not duplicated
      }
    }
    if(selectedItem != null)
    {
      return selectedItem;
    }
    else
    {
      selectedItem = "No book(s) found";
      return selectedItem;
    }
    return selectedItem;
        } 
    }  
    ...

index.html

<script>

function bookSearch()
{
   var searchItem = String(document.getElementById('searchItem').value.toLowerCase());
   var searchType = String(document.getElementById('searchType').value.toLowerCase());
   google.script.run.withSuccessHandler(bookFound).searchBooks(searchItem, searchType);
}
...
function bookFound(selectedItem)
{
   document.getElementById("bookResultBox").innHTML = selectedItem;
   alert(selectedItem);
}
</script>

当我测试这段代码,并选择一个类别为"条形码"的搜索值时,我成功地获得了被带入函数searchBooks的数据的控制台日志,但是调试控制台说变量sI、sT、searchItems和searchType都是未定义的。

我也一直在努力找出正确的API调用来搜索电子表格(当处理像getRangeByName这样的东西时)。我认为,自从大更新以来,可能有一种稍微不同的方法来做到这一点。在我更改一些代码之前,我可能已经让它工作了,尽管当我试图弄清楚为什么什么都没有显示时,我开始更改了很多代码。当我看到"未定义"的调试控制台日志时,我有点害怕。我不知道是我搞砸了,还是API搞砸了。

如有任何帮助,请提前告知:)

您的代码中可能存在错误。可能来自

var itemDataRange = ss.getRangeByName("itemInformation");

变量ss不是电子表格类,而是工作表类别。不能获取工作表类的RangeByNameSheet类没有getRangeByName()方法。

我会把你的代码改成这个:

var ss = SpreadsheetApp.getActiveSpreadsheet();
var itemDataRange = ss.getRangeByName("itemInformation");

如果你需要得到第一张纸:

var theFirstSheet = ss.getSheets()[0];