我正在使用應用腳本將嵌入圖表從表格插入到幻燈片。但是,如果 Google 表格上的圖表為空/沒有資料,我想從幻燈片中洗掉圖表。
我只想在沒有資料時從幻燈片中洗掉圖表。但如果有資料,請保留圖表
你能幫我添加會產生這種情況的正確線嗎?
這是我的圖表代碼:
function onOpen() {
// Get the Ui object.
var ui = SpreadsheetApp.getUi();
// Create a custom menu.
ui.createMenu('Present Data')
.addItem("Generate Report","generateLandingPagesReport")
.addToUi();
}
function generateLandingPagesReport() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('Copy of Overall Performance 1');
var values = sheet.getRange('A2:J23').getValues();
var chartRegion1 = sheet.getCharts()[0];
var chartGender1 = sheet.getCharts()[1];
// Access the template presentation
var templateId = "1bXAYGCKkpZhksXz8gTCgFYbNoI1BIhAZakd68VlXHeo";
var template = SlidesApp.openById(templateId);
var templateSlides = template.getSlides();
// Create a Slides presentation, removing the default
// title slide.
var presentationTitle =
ss.getName() " Presentation";
var slides = SlidesApp.create(presentationTitle);
var defaultSlides = slides.getSlides();
defaultSlides.forEach(function(slide) {
slide.remove()
});
var defaultSlide = defaultSlides [1];
// Insert slides from template
var index = 0;
templateSlides.forEach(function(slide) {
var newSlide = slides.insertSlide(index);
var elements = slide.getPageElements();
elements.forEach(function(element) {
newSlide.insertPageElement(element);
});
index ;
});
values.forEach(function(page){
if(page[0]){
var landingPage = page[0];
var sessions = page[1];
var newSessions = page[2];
var pagesPer = page[5];
var goalRate = page[7];
var goalValue = page[9];
// Insert slides from template
var index = 0;
templateSlides.forEach(function(slide) {
var newSlide = slides.insertSlide(index);
var elements = slide.getPageElements();
elements.forEach(function(element) {
newSlide.insertPageElement(element);
});
index ;
});
defaultSlides = slides.getSlides(); //update the slides array for
indexes and length
defaultSlide = defaultSlides[1];
newSlide = defaultSlide;
newSlide2 = defaultSlides[2];
var shapes = (newSlide.getShapes());
shapes.forEach(function(shape){
shape.getText().replaceAllText('{{landing page}}',landingPage);
shape.getText().replaceAllText('{{sessions}}',sessions);
shape.getText().replaceAllText('{{new sessions}}',newSessions);
shape.getText().replaceAllText('{{pages per session}}',pagesPer);
shape.getText().replaceAllText('{{goal rate}}',goalRate);
shape.getText().replaceAllText('{{goal value}}',goalValue);
})
var shapes = (newSlide2.getShapes());
shapes.forEach(function(shape){
shape.getText().replaceAllText('{{landing page}}',landingPage);
shape.getText().replaceAllText('{{sessions}}',sessions);
shape.getText().replaceAllText('{{new sessions}}',newSessions);
shape.getText().replaceAllText('{{pages per session}}',pagesPer);
shape.getText().replaceAllText('{{goal rate}}',goalRate);
shape.getText().replaceAllText('{{goal value}}',goalValue);
});
presLength = defaultSlides.length;
newSlide.move(presLength);
newSlide2.move(presLength);
defaultSlides[0].remove();
defaultSlides[3].remove();
} // end our conditional statement
}); //close our loop of values
//Get the charts
var defaultSlides=slides.getSlides();
var defaultSlide = defaultSlides [1]
var position = {right: 490, bottom: 190};
var size = {height: 140, width: 230};
defaultSlide.insertSheetsChart(
chartRegion1,
position.right,
position.bottom,
size.width,
size.height);
var defaultSlides=slides.getSlides();
var defaultSlide = defaultSlides [1]
var position = {right: 200, bottom: 190};
var size = {height: 140, width: 230};
defaultSlide.insertSheetsChart(
chartGender1,
position.right,
position.bottom,
size.width,
size.height);
// Create and display a dialog telling the user where to
// find the new presentation.
var slidesUrl = slides.getUrl();
var html = "<p>Find it in your home Drive folder:</p>"
"<p><a href=\"" slidesUrl "\" target=\"_blank\">"
presentationTitle "</a></p>";
SpreadsheetApp.getUi().showModalDialog(
HtmlService.createHtmlOutput(html)
.setHeight(120)
.setWidth(350),
"Report Generated!"
);
}
謝謝您的幫助。
uj5u.com熱心網友回復:
我相信你現在的情況和你的目標如下。
- 您有包含一些圖表的 Google 幻燈片。
- 當圖表為“無資料”時,您想從 Google 幻燈片中洗掉圖表。
- 您想使用 Google Apps 腳本實作此目的。
- 從包含示例“無資料”圖表的示例電子表格中,您的“無資料”圖表沒有值。
在這種情況下,下面的示例腳本怎么樣?
示例腳本:
請將以下腳本復制并粘貼到包括圖表在內的 Google 電子表格的腳本編輯器中。并且,請將 Google 幻燈片 ID 設定為presentationId。
function myFunction() {
const presentationId = "###"; // Please set the Google Slides ID.
// 1. Retrieve the charts with "No data".
const ss = SpreadsheetApp.getActiveSpreadsheet();
const obj = ss.getSheets().reduce((o, sheet) => {
sheet.getCharts().forEach(chart => {
const check = chart.getRanges().some(e => {
const temp = e.getDisplayValues();
return temp[0].map((_, c) => temp.map(r => r[c])).some(col => col.join("") == "");
});
if (check) o[chart.getChartId()] = check;
});
return o;
}, {});
// 2. Remove the charts with "No data".
const slides = SlidesApp.openById(presentationId).getSlides();
slides.forEach(slide => {
slide.getSheetsCharts().forEach(chart => {
if (obj[chart.getChartId()]) chart.remove();
});
});
}
- 運行此腳本時,首先在物件中檢索“無資料”圖表。并且,使用此物件,Google 幻燈片中的圖表將被洗掉。
筆記:
- 此示例腳本適用于您的示例電子表格。如果更改“無資料”的條件,則可能無法使用此腳本。所以,請注意這一點。
參考:
- 減少()
- forEach()
- 類 SheetsChart 的 remove()
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/450835.html
