簡體   English   中英

Google Apps 腳本:用工作表中的值和格式替換幻燈片表格中的所有文本

[英]Google Apps Script: Replace all text in slide table with values and formatting from sheets

這是我的問題的描述。

我在電子表格中有一系列占位符文本及其關聯值。 占位符文本也存在於幻燈片演示文稿中,使用replacealltext function 替換它。但是,電子表格中的 colors 值不會更改。 請參閱下面的示例。

谷歌應用程序腳本:

  // Google Sheets
  var masterSheet = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = masterSheet.getSheetByName('Monthly Report'); //gets the data from the active pubfile
  var range = sheet.getRange('S1:T110');
  var data = range.getValues();
  var titleName = sheet.getRange('AA14:AA14').getValues().toString();
  data.shift(); //removes the headers in the sheets

  // Creating the new slide
  var spreadsheetID = SpreadsheetApp.getActiveSpreadsheet().getId(); //Ensure Code is applied to active Pubfile
  var spreadsheetFolder = DriveApp.getFileById(spreadsheetID);
  var parentFolder = spreadsheetFolder.getParents();
  var folderID = parentFolder.next().getId();
  var reportTemplate = DriveApp.getFileById('SLIDE ID'); // Gets the report Template
  var copiedTemplate = reportTemplate.makeCopy(titleName, DriveApp.getFolderById(folderID)); //Makes a copy of the orginal and saves it in the specified folder
  var newPresoID = copiedTemplate.getId();
  var skeleton = SlidesApp.openById(newPresoID); //opens the new template presentation 
  var slides = skeleton.getSlides(); //calls the new slides 
  return newSlide1();

 function newSlide1() {
    var slide1new = slides[0]; // defining the location of the new slide 1
    data.forEach(function (row) {
      var templateVariable = row[0]; // First column contains variable names
      var templateValue = row[1]; // Second column contains values
      slide1new.replaceAllText(templateVariable, templateValue); //replaces all the text that matches the placeholders
      slide1new.
    });

如您所見,這段代碼只是替換了值,但沒有引入源格式。

以下是原始電子表格數據和幻燈片的快照:

源數據

帶占位符的目標幻燈片

當前結果

期望的結果

請提出解決此問題的方法。 謝謝!

下面是將電子表格單元格的 colors 應用於幻燈片的表格單元格的示例。

我的電子表格看起來像這樣。

在此處輸入圖像描述

我的幻燈片看起來像這樣。

在此處輸入圖像描述

代碼.gs

function myFunction() {
  try {
    let spread = SpreadsheetApp.openById("xxxxxxxxxxxxxxxxxxxxxxxxxxx");
    let sheet = spread.getSheetByName("Sheet1");
    let range = sheet.getRange(2,1,sheet.getLastRow()-1,2);
    let values = range.getDisplayValues();
    let colors = range.getFontColors();

    let present = SlidesApp.getActivePresentation();
    let slide = present.getSlides()[0];
    let table = slide.getTables()[0];
    for( let i=0; i<table.getNumRows(); i++ ) {
      let row = table.getRow(i);
      for( let j=1; j<row.getNumCells(); j++ ) {
        let text = row.getCell(j).getText();
        values.some( (value,k) => {
            let l = text.replaceAllText(value[0],value[1]);
            if( l > 0 ) {
              text.getTextStyle().setForegroundColor(colors[k][1]);
              return true;
            }
            return false;
          }
        );
      }
    }
  }
  catch(err) {
    console.log(err);
  }
}

最后的結果是這樣的。

在此處輸入圖像描述

參考

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM