首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用Scripts、JSON和Books API在工作表中插入ISBN中的标题值

如何使用Scripts、JSON和Books API在工作表中插入ISBN中的标题值
EN

Stack Overflow用户
提问于 2021-01-16 07:27:30
回答 1查看 39关注 0票数 0

第一次在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“中调用它时,它说它是未定义的。

如果您能为这个新手提供任何指导,我们将非常感谢!谢谢!

代码语言:javascript
运行
复制
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);   
}
EN

回答 1

Stack Overflow用户

发布于 2021-01-18 03:41:07

弄明白了!!我确信我的代码不像大多数代码那样优雅,但我很高兴能够让它在我第一次尝试JSON/App Scripts时工作。

代码语言:javascript
运行
复制
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);   
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65744857

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档