第一次在Google App Scripts中编码,所以我提前为我的无知道歉。
我在数字灵感上看到了这个很棒的脚本,但我在尝试将它写到工作表上时遇到了困难。
我已经创建了一个包含以下3列数据的谷歌工作表: title|authors|isbn我在isbn的C2和C3中有两个值: 9781471178412和9780669397666
在Google App Scripts中,我使用Google Books API来提取图书的标题,但一直在考虑如何将Google API中的" title“值插入到我的isbn的Google Sheet中。它记录了正确的标题,但当我在函数"fillInTheBlanks“中调用它时,它说它是未定义的。
如果您能为这个新手提供任何指导,我们将非常感谢!谢谢!
function getBookDetails(isbn) {
var ISBN_COLUMN = 2;
var dataRange = SpreadsheetApp.getActiveSpreadsheet()
.getDataRange();
var bookValues = dataRange.getValues();
for(var row = 1; row < bookValues.length; row++){
var isbn = bookValues[row][ISBN_COLUMN];
var url = "https://www.googleapis.com/books/v1/volumes?country=US&q=isbn:" + isbn;
var response = UrlFetchApp.fetch(url);
var results = JSON.parse(response);
if (results.totalItems) {
// There'll be only 1 book per ISBN
var book = results.items[0];
var title = (book["volumeInfo"]["title"]);
var authors = (book["volumeInfo"]["authors"]);
// For debugging
Logger.log(book);
Logger.log(title);
Logger.log(authors);
}
}
}
function fillInTheBlanks(){
var TITLE_COLUMN = 0;
var AUTHOR_COLUMN = 1;
var ISBN_COLUMN = 2;
var dataRange = SpreadsheetApp.getActiveSpreadsheet()
.getDataRange();
var bookValues = dataRange.getValues();
for(var row = 1; row < bookValues.length; row++){
var isbn = bookValues[row][ISBN_COLUMN];
var title1 = bookValues[row][TITLE_COLUMN];
var author1 = bookValues[row][AUTHOR_COLUMN];
if(isbn != "" && (title1 === "" || author1 === "") ){
var runresults = getBookDetails(isbn);
if(title1 === "" && runresults.title){
bookValues[row][TITLE_COLUMN] = runresults.title;
}
}
}
dataRange.setValues(bookValues);
}
发布于 2021-01-18 03:41:07
弄明白了!!我确信我的代码不像大多数代码那样优雅,但我很高兴能够让它在我第一次尝试JSON/App Scripts时工作。
function onOpen() {
var ui = SpreadsheetApp.getUi();
ui.createMenu('Book-list')
.addItem('GoogleDataPull', 'fillInTheBlanks')
.addSeparator()
.addItem('OpenLibraryDataPull', 'fillInTheBlanksOL')
.addToUi();
}
function getBookDetails(isbn) {
var url = "https://www.googleapis.com/books/v1/volumes?country=US&q=isbn:" + isbn;
var response = UrlFetchApp.fetch(url);
var bookData = JSON.parse(response);
if (bookData.totalItems) {
// There'll be only 1 book per ISBN
var book = bookData.items[0];
var title = (book["volumeInfo"]["title"]);
// For debugging
Logger.log(book);
Logger.log(title);
return title;
}
}
function fillInTheBlanks(){
var TITLE_COLUMN = 0;
var ISBN_COLUMN = 1;
var dataRange = SpreadsheetApp.getActiveSpreadsheet();
var sheet = dataRange.getSheets()[0];
// This represents ALL the data
var range = sheet.getDataRange();
var bookValues = range.getValues();
// var dataRange = SpreadsheetApp.getActiveSpreadsheet()
// .getDataRange();
// var bookValues = dataRange.getValues();
for(var row = 1; row < bookValues.length; row++){
var isbn = bookValues[row][ISBN_COLUMN];
var title1 = bookValues[row][TITLE_COLUMN];
if(isbn != "" && title1 === "" ){
// var bookData = getBookDetails(isbn);
if(title1 === "" && getBookDetails(isbn)){
bookValues[row][TITLE_COLUMN] = getBookDetails(isbn);
range.setValues(bookValues);
}
}
}
//dataRange.setValues(bookValues);
}
https://stackoverflow.com/questions/65744857
复制相似问题