У меня есть информация в листе Google, которую я хотел бы разместить на шаблоне Google Slide. В основном, основываясь на информации в Google листе, я хотел бы создать шестиугольное текстовое поле с текстом, извлеченным из листа.
Google лист также будет определять расположение макета слайда и цвет заливки для каждого шестиугольника.
Шаблон слайдов Информация о листе
Я успешно создал рабочий шаблон для первой строки моего листа Google, Пример Однако я хотел бы теперь иметь возможность построения нескольких текстовых полей на листе. Пример листа
Желаемый результат
Мне нужен сценарий для итерации или циклического перемещения по строкам / диапазонам листа и заполнения слайда шестиугольными фигурами.
function onOpen(e) {
SpreadsheetApp.getUi()
.createMenu('Templates')
.addItem('HeatMap', 'createNewCase')
.addToUi();
}
function createNewCase(input) {
var category = input
var ui = SpreadsheetApp.getUi();
// get active spreadsheet
var activeSpreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var activeSheet = activeSpreadsheet.getActiveSheet();
// Check to ensure script being run from 'Option 1' sheet
if (activeSheet.getName() != "Sheet1") {
ui.alert("Active sheet must be 'Sheet1', terminating script");
return;
}
//Get current user information to make sure only correct users can run
var userValidated = false;
var userEmail = Session.getActiveUser().getEmail();
if (userEmail == "xxxxxx@xxx.co.uk" || userEmail == "xxxxx@xxxx.co.uk" ) {
userValidated = true;
} else {
ui.alert("Only the xxxx team can generate a Template. Please contact them for assistance, terminating script");
return;
}
//Get active cell
var sourceRow = activeSheet.getActiveCell().getRow();
// Read case variables
var sourceTeam = activeSheet.getRange('A' + sourceRow).getValue();
var sourceRisk = activeSheet.getRange('C' + sourceRow).getValue();
var sourceRef = activeSheet.getRange('B' + sourceRow).getValue();
var sourceWidth = activeSheet.getRange('E' + sourceRow).getValue();
var sourceHeight = activeSheet.getRange('F' + sourceRow).getValue();
var sourceColour = activeSheet.getRange('G' + sourceRow).getValue();
// Message prompt
var userChoice = ui.alert("You are about to generate a Risk Heatmap for " + sourceTeam +"\n\nDo you wish to continue?\n\n",ui.ButtonSet.YES_NO);
if (userChoice == ui.Button.NO) {
ui.alert("Terminating script");
return;
}
//Get todays date
var nowShort = Utilities.formatDate(new Date(), "Europe/London", "yyMMdd");
var nowFormattedDateTime = Utilities.formatDate(new Date(), "Europe/London", "EEE d MMM yyyy HH:mm");
//Set case document filename
var newFilename = sourceTeam + " Risk Heatmap"
//Get template folder
var templateFolder = DriveApp.getFolderById("xxxxxx");
// Get case Template document
var docTemplate = DriveApp.getFileById("xxxxxxx");
var caseDocument = docTemplate.makeCopy(newFilename);
var caseDocumentID = caseDocument.getId();
var caseSlide = SlidesApp.openById(caseDocumentID);
var activeSlide = caseSlide.getSlideById('xxxxxxx')
var shape = activeSlide.insertShape(SlidesApp.ShapeType.HEXAGON,sourceWidth,sourceHeight,80,40);
var textRange = shape.getText();
var textCol =shape.getFill().setSolidFill(sourceColour)
var insertedText = textRange.appendText(sourceRef +" - "+ sourceRisk);
insertedText.getTextStyle()
.setForegroundColor('#000000')
.setFontSize(8)
var caseProcess = caseSlide.replaceAllText("%TEAM NAME%", sourceTeam);
var dateTime = caseSlide.replaceAllText("%DATE%", nowFormattedDateTime);
// Record Case Document link
activeSheet.getRange('H' + (sourceRow)).setFormula('=HYPERLINK("' + caseDocument.getUrl() + '", "Risk Heatmap")');
}