我正在运行代码,从我的驱动器中获取图像并将它们放入谷歌幻灯片中。此外,我正在尝试将大查询中的数据导出到同一个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];
}
答案 0 :(得分:0)
您需要在Google-Apps脚本中启用BigQuery的高级服务:
关于BigQuery服务的this link:
注意:这是一项必须在使用前启用的高级服务。
...将您重定向到此链接where it explains how to enable advanced services:
链接中的后续步骤将向您解释如何在GOOGLE CLOUD PLATFORM控制台中启用API(我假设您已经完成了,因为您已经启用了API)
答案 1 :(得分:0)
错误是这样的吗?
未配置访问权限。 BigQuery API尚未在项目中使用 5622793721之前或它被禁用。启用它
如果是这样,问题是您需要转到仪表板并启用它。