Javascript 使用Google应用程序脚本从工作表中获取值并将其显示在文本框中
因此,谷歌最近更新了谷歌应用程序脚本API,并添加了很多不错的功能,但在这个过程中,他们也贬低了很多API。我一直在为我在大学校园工作的地方开发一个图书馆数据库用户界面,当我想用新的API更新我的应用程序时,很多东西坏了,我想不出如何让它们再次工作 我试图做的是从Google Sheets文件中获取一个值,然后简单地将该值放在web应用程序的文本框中。目前我无法得到那份工作。此外,我还发现了一些麻烦的地方,即调试器似乎不正确。我知道,大胆的指责。让我给你看看 代码.gsJavascript 使用Google应用程序脚本从工作表中获取值并将其显示在文本框中,javascript,debugging,search,google-apps-script,google-sheets,Javascript,Debugging,Search,Google Apps Script,Google Sheets,因此,谷歌最近更新了谷歌应用程序脚本API,并添加了很多不错的功能,但在这个过程中,他们也贬低了很多API。我一直在为我在大学校园工作的地方开发一个图书馆数据库用户界面,当我想用新的API更新我的应用程序时,很多东西坏了,我想不出如何让它们再次工作 我试图做的是从Google Sheets文件中获取一个值,然后简单地将该值放在web应用程序的文本框中。目前我无法得到那份工作。此外,我还发现了一些麻烦的地方,即调试器似乎不正确。我知道,大胆的指责。让我给你看看 代码.gs function d
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;
}
}
...
函数doGet(e){
var html=HtmlService.createHtmlOutFromFile('索引')
.setSandboxMode(HtmlService.SandboxMode.IFRAME);
返回html;
}
功能searchBooks(searchItem,searchType){
var sI=搜索项;
Logger.log(sI);
var sT=搜索类型;
Logger.log(sT);
var sheets=SpreadsheetApp.getActiveSpreadsheet().getSheets();
var ss=表[0];
var itemDataRange=ss.getRangeByName(“itemInformation”);
var selectedItem=null;//将返回的项
//var selectedSearch=searchItem;
var titles=sheet.getRange(“K2:K9507”).getValues();//获取项目的标题
var authors=sheet.getRange(“J2:J9507”).getValues();//获取工作表中的作者
var barcodes=sheet.getRange(“B2:B9507”).getValues();//获取工作表中的条形码
var itemsArray=新数组();
如果(sT='')
{
返回null;
}
else if(sT.value=='请选择类型…')
{
var test=“这是有效的”;
Logger.log(测试);
返回selectedItem;
}
否则如果(sT==‘条形码’)
{
var-selectedBarcode=sI;
for(var i=0;i
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>
函数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);
}
...
找到功能书(选择编辑项)
{
document.getElementById(“bookResultBox”).innHTML=selectedItem;
警报(selectedItem);
}
当我测试这段代码,并在选择“Barcode”类别的情况下输入一个搜索值时,我成功地获得了将数据带入函数searchBooks的控制台日志,但是调试控制台说变量sI、sT、searchItems和searchType都未定义
我在尝试找出用于搜索电子表格的正确API调用时也遇到了困难(在处理诸如getRangeByName之类的东西时)。我认为可能有一个稍微不同的方式来做这件事,因为大更新。在我改变一些代码之前,我可能已经让它工作了,尽管我在试图弄清楚为什么什么都没有显示时,就开始改变了很多代码。当我看到“未定义”调试控制台日志时,我有点害怕。我不知道是我搞砸了,还是API搞砸了
提前感谢您的帮助:)您的代码可能有错误。这可能是因为:
var itemDataRange = ss.getRangeByName("itemInformation");
您的变量ss
不是电子表格类,而是工作表类。无法获取图纸类的RangeByName。类的getRangeByName()
方法
我会将您的代码更改为:
var ss = SpreadsheetApp.getActiveSpreadsheet();
var itemDataRange = ss.getRangeByName("itemInformation");
如果需要获取第一张图纸:
var theFirstSheet = ss.getSheets()[0];
嗯。当搜索被实际触发时,这肯定会有所帮助,但是我似乎无法获得触发搜索的条件。我现在正在玩它,甚至尝试用一个空白文本框触发搜索条件,搜索类型设置为“请选择类型…”不会触发任何东西。它应该触发第一个“elseif”,所以我在该条件中放入了Logger.log,而我甚至没有在控制台中获得确认日志。然而,当调用函数searchBooks时,我得到了一些日志,并且实际上正在阅读searchItem和searchType。如果您不熟悉调试器,请学习如何使用它:正如在原始帖子中提到的,我一直在尝试,但出于某种奇怪的原因,调试器告诉我这两个变量中没有存储任何内容,即使控制台日志很好地打印了它们的值。我不知道该相信哪一个:(可能试着减少测试的行大小。看起来你得到了将近一万行。嗯,是的,我试试看,这肯定会使测试更容易,即使它不能立即解决问题。