大查询API尚未在此项目中使用或已被禁用

时间:2018-05-08 06:16:14

标签: google-apps-script google-bigquery

我正在运行代码,从我的驱动器中获取图像并将它们放入谷歌幻灯片中。此外,我正在尝试将大查询中的数据导出到同一个google幻灯片文档中的表格中。我不断收到此错误,但API已启用?

问题似乎与这一行有关:  var queryResults = BigQuery.Jobs.query(request,projectId);

由于某些原因,大查询数据不会作为表格进入谷歌幻灯片

function onOpen() {
  var ui = SpreadsheetApp.getUi();

  ui.createMenu('Custom Menu')
  .addItem('Generate Level B', 'showSidebar')
  .addToUi();
}


function showSidebar() {
  var ui = HtmlService.createHtmlOutputFromFile('sidebar')
  .setTitle('Generate Level B');
  SpreadsheetApp.getUi().showSidebar(ui);
}



function showPrompt() {

  var ui = SpreadsheetApp.getUi();

  var result = ui.prompt(
    'Generate custom company slide',
    'Please enter the ticker symbol for the company:',
    ui.ButtonSet.OK_CANCEL);

  // Process the user's response.
  var button = result.getSelectedButton();

  var text = result.getResponseText();

  if (button == ui.Button.OK) {
    // User clicked "OK".
    mergeSlide(text);

  } else if (button == ui.Button.CANCEL) {
    // User clicked "Cancel".
    return;
  } else if (button == ui.Button.CLOSE) {
    // User clicked X in the title bar.
    return;
  }
}

function test() {
  mergeSlide("DSYJ.J", "");}



function mergeSlide(tickerSymbol,companyName) {

  var ss = SpreadsheetApp.getActiveSpreadsheet();

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

  var lastRow = sheet.getLastRow();

  var dataTicker = flatten(sheet.getRange(3, 1, lastRow-2, 1).getValues());

  var dataName = flatten(sheet.getRange(3, 2, lastRow-2, 1).getValues());

  var dataDesc = flatten(sheet.getRange(3, 3, lastRow-2, 1).getValues());


  //Find index based on ticker/name

  if(tickerSymbol != ""){

    var index = dataTicker.indexOf(tickerSymbol);
    var companyDesc = dataDesc[index];  
    var companyName = dataName[index];  

  }else if(companyName != ""){

    var index = dataName.indexOf(companyName);
    var companyDesc = dataDesc[index];  
    var tickerSymbol = dataTicker[index]; 


  }else{

    return;

  }





  var slideUrl = DriveApp.getFileById("xxxx").makeCopy(companyName).getUrl();

  var slide = SlidesApp.openByUrl(slideUrl);

  var slides = slide.getSlides();



  //Slide1
  var shapesSlide1 = slides[0].getShapes();
  shapesSlide1[0].getText().setText(companyName);

  //Slide2
  var shapesSlide2 = slides[1].getShapes();
  shapesSlide2[0].getText().setText(companyDesc);


 //Slide3
  // Replace this value with the project ID listed in the Google Cloud Platform project.
  var projectId = 'vital-platform-791';
  var sqlQuery = 'SELECT Price FROM [vital-platform-791.feeds.chrome_blue_button_valuegrid_lookup] LIMIT 5';



  var request = {
    query: sqlQuery
  };

  var queryResults = BigQuery.Jobs.query(request, projectId);
  var jobId = queryResults.jobReference.jobId;

  // Check on status of the Query Job.
  var sleepTimeMs = 500;
  while (!queryResults.jobComplete) {
    Utilities.sleep(sleepTimeMs);
    sleepTimeMs *= 2;
    queryResults = BigQuery.Jobs.getQueryResults(projectId, jobId);
  }

  // Get all the rows of results.
  var rows = queryResults.rows;
  while (queryResults.pageToken) {
    queryResults = BigQuery.Jobs.getQueryResults(projectId, jobId, {
      pageToken: queryResults.pageToken
    });
    rows = rows.concat(queryResults.rows);
  }

  if (rows) {

    // Get the headers.
    var headers = queryResults.schema.fields.map(function(field) {
      return field.name;
    });

    // Get the results.
    var data = new Array(rows.length);
    for (var i = 0; i < rows.length; i++) {
      var cols = rows[i].f;
      data[i] = new Array(cols.length);
      for (var j = 0; j < cols.length; j++) {
        data[i][j] = cols[j].v;
      }
    }

    var table = slides[2].insertTable(rows.length+1, headers.length);

    //Fill up the table header
    for(var m = 0; m< headers.length; m++){

      table.getCell(0,m).getText().setText(headers[m]).getTextStyle().setForegroundColor(255,0,86).setBold(true);

    }


    //Fill up rest of table
    for(var k = 1; k< rows.length+1; k++){

      for(var m = 0; m< headers.length; m++){

        table.getCell(k,m).getText().setText(data[k-1][m]);

      }

    }

  }



  //Slide4
  var shapeSlide4 = slides[3].getShapes();
  var priceChangeImage = DriveApp.getFilesByName("Price Change_"+tickerSymbol+".png").next();
  var newImage4 = shapeSlide4[0].replaceWithImage(priceChangeImage);
  newImage4.setWidth(650);
  newImage4.alignOnPage(SlidesApp.AlignmentPosition.HORIZONTAL_CENTER);

  //Slide5
  var shapeSlide5 = slides[4].getShapes();
  var earningsRevisionsImage = DriveApp.getFilesByName("Earnings Revisions_"+tickerSymbol+".png").next();
  var newImage5 = shapeSlide5[0].replaceWithImage(earningsRevisionsImage);
  newImage5.setWidth(650);
  newImage5.alignOnPage(SlidesApp.AlignmentPosition.HORIZONTAL_CENTER);

  //Slide6
  var shapeSlide6 = slides[5].getShapes();
  var FgpeImage = DriveApp.getFilesByName("F-GPE_"+tickerSymbol+".png").next();
  var newImage6 = shapeSlide6[0].replaceWithImage(FgpeImage);
  newImage6.setWidth(650);
  newImage6.alignOnPage(SlidesApp.AlignmentPosition.HORIZONTAL_CENTER);


  newSlideNotify(slideUrl);

}



// Takes and array of arrays matrix and return an array of elements.
function flatten(arrayOfArrays){
  return [].concat.apply([], arrayOfArrays);
}


function newSlideNotify(url) {

  var htmlOutput = HtmlService
  .createHtmlOutput('<p style="font-family:Arial;font-size:13px;">A Level B report has been created for the company that you have selected.<br><br>This new file has been placed in the same folder with the Slide Template.<br><br></p><a href="'+url+'" target="_top" style="font-family:Arial;font-size:13px;">Open Level B</a>')
  .setSandboxMode(HtmlService.SandboxMode.IFRAME)
  .setWidth(500)
  .setHeight(150);

  SpreadsheetApp.getUi().showModalDialog(htmlOutput, 'Level B Generated!');

}





function getList() {

  var ss = SpreadsheetApp.getActiveSpreadsheet();

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

  var lastRow = sheet.getLastRow();

  var dataTicker = flatten(sheet.getRange(3, 1, lastRow-2, 1).getValues());
  var dataName = flatten(sheet.getRange(3, 2, lastRow-2, 1).getValues());

  return [dataTicker,dataName];

}

2 个答案:

答案 0 :(得分:0)

您需要在Google-Apps脚本中启用BigQuery的高级服务:

关于BigQuery服务的this link

  

注意:这是一项必须在使用前启用的高级服务。

...将您重定向到此链接where it explains how to enable advanced services

  1. 在脚本编辑器中,选择Resources&gt;高级Google服务....
  2. 单击要使用的服务旁边的开/关开关(在您的案例中为BigQuery API)。
  3. 单击“确定”。
  4. 链接中的后续步骤将向您解释如何在GOOGLE CLOUD PLATFORM控制台中启用API(我假设您已经完成了,因为您已经启用了API)

答案 1 :(得分:0)

错误是这样的吗?

  

未配置访问权限。 BigQuery API尚未在项目中使用   5622793721之前或它被禁用。启用它

如果是这样,问题是您需要转到仪表板并启用它。

  1. 打开脚本文件
  2. 转到资源&gt;高级Google服务
  3. 请注意消息这些服务也必须在Google API控制台中启用。
  4. 点击其中显示Google API Console
  5. 的链接
  6. 搜索'bigquery'后,不要选择名为Bigquery API的那个。您正在寻找名为 BigQuery Data Transfer API
  7. 的那个
  8. 启用
  9. 再次运行您的代码以查看它是否现在可以使用
  10. 您可能需要激活您的电子邮件到Google Analytics用户管理。