Saya ingin Apps Script secara otomatis membuat kumpulan Slide baru menggunakan data dari dokumen Spreadsheet yang memiliki deretan informasi berbeda yang ingin saya sisipkan ke dalam template Slides yang menggantikan tag placeholder. Saya ingin melakukannya secara instan untuk setiap baris di dalam tabel dengan satu tindakan, jadi jika ada 10 baris, 10 set dokumen Slide akan dihasilkan.

Penggantian teks berfungsi, namun saya tidak yakin bagaimana cara mengganti, misalnya, bentuk dengan "{{image}}" tertulis di dalamnya dengan gambar menggunakan URL di bawah kolom gambar. Hal yang sama berlaku untuk bagan.

function generateNewSlides() {  

var wsID = "worksheet ID here";
var ws = SpreadsheetApp.openById(wsID).getSheetByName("Data");
var data = ws.getRange(2, 1, ws.getLastRow()-1, 6).getValues();

// the above should get the relevant table from the sheet     

data.forEach(function(info){
if(info[0]){

var firstname = info[0];
var surname = info[1];
var email = info[2];
var phone = info[3];
var image = info[4];
var presName = info[5];

// the above are columns where the different pieces of data would be taken from for the placeholders in the Slides template

var slidesTemplateID = "slides template ID here";   
var template = DriveApp.getFileById(slidesTemplateID);
var folderID = "folder where itll be saved ID here";      

var copiedTemplate = template.makeCopy(presName, DriveApp.getFolderById(folderID));
var Presentation = SlidesApp.openById(copiedTemplate.getId());

// the above should create a copy and then open it

Presentation.getSlides().forEach(function(slide) {
  slide.getShapes().forEach(function(shape) {
    shape.getText().replaceAllText("{{firstname}}",firstname);
    shape.getText().replaceAllText("{{surname}}",surname);
    shape.getText().replaceAllText("{{email}}",email);
    shape.getText().replaceAllText("{{phone}}",phone);
    shape.getText().replaceAllText("{{presname}}",presName);

  })
      // replaces the placeholder tags with the desired text    
      // I am not sure how to insert something similar for images and charts in the code here
      // I've tried variations of the below, none of which have worked
      // slide.getShapes().forEach(function(picture) {

        // picture.find("{{image}}").replace(image); 
          //  picture.findText("{{image}}").replace(image);
              //  picture.getText("{{image}}").replaceWithImage(image);        
                 // picture.getText().findText("{{image}}").replace(image);
}); 

};
});
          }
0
ILT 20 Mei 2020, 09:42

1 menjawab

Jawaban Terbaik

Perbedaan antara {{image}} dan placeholder lainnya adalah Anda ingin mengganti teks melalui gambar yang sebenarnya

  • Sayangnya Anda tidak dapat menempelkan gambar di dalam kotak teks.

  • Sebagai gantinya, Anda dapat menentukan bahwa jika placeholder {{image}} ada, Anda ingin menempelkan gambar ke slide yang berisi kotak teks.

  • Anda dapat memeriksa keberadaan placeholder dengan

    var imageText = shape.getText().replaceAllText("{{image}}",""); if(imageText == true){...}

  • Anda memasukkan gambar jika kondisinya terpenuhi dan tentukan ukuran dan posisinya, mis. slide.insertImage(image).scaleHeight(0.5).scaleWidth(0.5).setLeft(10);

  • Penting: Untuk menyisipkan gambar di Slide, Anda memerlukan webContentLink alih-alih Url dan gambar harus dapat diakses publik (lihat di sini).

  • Jika Anda tidak mengetahui webContentLink gambar Anda, sebaiknya ganti URL di spreadsheet Anda dengan file Id dan ubah kode Anda menjadi

    var id = info[4]; var image = Drive.Files.get(id).webContentLink

  • Perhatikan bahwa webContentLink tidak dapat diakses oleh DriveApp, tetapi hanya dengan Layanan Drive Lanjutan yang perlu Anda aktifkan secara manual.

Contoh kerja:

function generateNewSlides() {  
  
  var wsID = "worksheet ID here";
  var ws = SpreadsheetApp.openById("xxx").getSheetByName("Data");
  var data = ws.getRange(2, 1, ws.getLastRow()-1, 6).getValues();
  
  // the above should get the relevant table from the sheet     
  
  data.forEach(function(info){
    if(info[0]){
      
      var firstname = info[0];
      var surname = info[1];
      var email = info[2];
      var phone = info[3];
      var id = info[4];
      var image = Drive.Files.get(id).webContentLink
      var presName = info[5];
      
      // the above are columns where the different pieces of data would be taken from for the placeholders in the Slides template
      
      var slidesTemplateID = "xxx";   
      var template = DriveApp.getFileById(slidesTemplateID);
      var folderID = "folder where itll be saved ID here";      
      
      var copiedTemplate = template.makeCopy(presName, DriveApp.getFolderById(folderID));
      var Presentation = SlidesApp.openById(copiedTemplate.getId());
      
      // the above should create a copy and then open it
      Presentation.getSlides().forEach(function(slide) {
        slide.getShapes().forEach(function(shape) {
          shape.getText().replaceAllText("{{firstname}}",firstname);
          shape.getText().replaceAllText("{{surname}}",surname);
          shape.getText().replaceAllText("{{email}}",email);
          shape.getText().replaceAllText("{{phone}}",phone);
          shape.getText().replaceAllText("{{presname}}",presName);
          var imageText = shape.getText().replaceAllText("{{image}}","");          
          if(imageText == true){
            slide.insertImage(image).scaleHeight(0.5).scaleWidth(0.5).setLeft(10);
          }
        })
      }); 
      
    };
  });
}
0
Community 20 Juni 2020, 09:12