Google Sheets to Slides w/Apps Script - 如何保持单元格文本颜色?

问题描述 投票:0回答:1

尝试从工作表中移动数据以自动填充 Google 幻灯片中的模板。我已经让它工作了,但是,我希望它保留形状字体的颜色。形状只是带有颜色的字体。关于我需要添加什么有什么想法吗? (第一次来这里:)

Sheet Data

Slide Template

Final Output Desired

我的代码如下:

function createOneSlidePerRow() {
let masterDeckID = "deck ID";
let masterSheetID= "sheet ID"
let deck = SlidesApp.openById(masterDeckID);
let slides = deck.getSlides();
let masterSlide = slides[1];

let dataRange = SpreadsheetApp.openById(masterSheetID).getDataRange();
let sheetContents = dataRange.getValues();
let header = sheetContents.shift();
let updatedContents = [];
sheetContents.reverse();
sheetContents.forEach(function (row) {
let slide = masterSlide.duplicate();

slide.replaceAllText("{{full_name}}", row[0]);
slide.replaceAllText("{{symbol_1}}", row[1]);
slide.replaceAllText("{{symbol_2}}", row[2]);
slide.replaceAllText("{{symbol_3}}", row[3]);
}  

我发现了这个,但我不知道如何适应:Google Apps 脚本:用工作表中的值和格式替换幻灯片表中的所有文本

google-apps-script google-sheets textcolor google-slides
1个回答
0
投票

根据您更新的问题,以下修改如何?

修改后的脚本:

在使用此脚本之前,请先设置

masterDeckID
masterSheetID

function createOneSlidePerRow() {
  let masterDeckID = "deck ID";
  let masterSheetID = "sheet ID"
  let deck = SlidesApp.openById(masterDeckID);
  let slides = deck.getSlides();
  let masterSlide = slides[1];
  let dataRange = SpreadsheetApp.openById(masterSheetID).getDataRange();

  // I modified the below script.
  const [header, ...values] = dataRange.getValues();
  const [, ...colors] = dataRange.getFontColorObjects();
  values.forEach((row, i) => {
    let slide = masterSlide.duplicate();
    slide.getShapes().forEach(s => {
      header.forEach((h, j) => {
        const text = s.getText();
        if (text.replaceAllText(h, row[j]) != 0) {
          const c = colors[i][j].asRgbColor().asHexString();
          text.getTextStyle().setForegroundColor(c.length > 7 ? "#000000" : c);
        }
      });
    });
  });
}
  • 当使用您显示的示例电子表格和幻灯片运行此脚本时,我认为获得了您预期的结果。

参考资料:

© www.soinside.com 2019 - 2024. All rights reserved.