iT邦幫忙

2024 iThome 鐵人賽

DAY 16
0
IT 管理

30 天玩轉 GAS: 打造你的個人自動化助手系列 第 16

[Day 16] GAS - 實例操作 - 新增超連結至元素上(1/2)

  • 分享至 

  • xImage
  •  

情境

這個實例操作是希望能夠讓大家自動化的產出類似的投影片!就不用再一張張新增連結或文字這樣~

Note: 在開始之前,大家是初學的話,建議可以從現有簡報或是做好一兩張模板再去做 GAS 的處理
不然 Slide 的 function 元素百百種, 一個一個新增調整位置和顏色實在是太麻煩了!

辨別各元素:顯示頁面所有元素位置

在這張圖片我們有五個元素,我想為下面兩個透明圈圈新增連結
但先辨別出他們的 shape index ~

https://ithelp.ithome.com.tw/upload/images/20240904/20137680NFIsk5QbEJ.png

function readPageElements() {
  let pres = SlidesApp.getActivePresentation();
  let slides = pres.getSlides();
  for(let i = 0; i < 1; i++){
    let slide = slides[i];
    Logger.log("We load the No."+ (i+1) +" slide");
    let page_elements = slide.getPageElements();
    for(let j = 0; j < page_elements.length; j++){
      if(page_elements[j].getPageElementType() == SlidesApp.PageElementType.SHAPE){
        let shape = page_elements[j].asShape();
        Logger.log( 'Shape idx: ' + j + ' '
                    + 'Left: ' + shape.getLeft().toFixed(2)
                    + 'pt; Top: ' + shape.getTop().toFixed(2)
                    + 'pt; Width: ' + shape.getWidth().toFixed(2)
                    + 'pt; Height: ' + shape.getHeight().toFixed(2)
                    + 'pt; Rotation: ' + shape.getRotation().toFixed(2) + '\u00B0.');
      }else{
        Logger.log("Get a object which type is " +page_elements[j].getPageElementType());
      }
    }
  }
}

https://ithelp.ithome.com.tw/upload/images/20240904/20137680x7ZVRYIRLH.png

getLeft()getTop() 分別代表著物體離左邊界與上邊界的距離
從 Log 我可以看出我要設定連結的兩個 shape 分別在第 0 個及第 4 個 pageElement
接下來就可以往下繼續新增連結!

新增超連結至 shape 上

取得要新增的 shape index 後, 就可以新增連結至指定 shape 上
這邊我要新增連結至第 0 個 和 第 3 個 "shape" 上

function addExternalLinkToShapes() {
  var presentation = SlidesApp.getActivePresentation();
  var slide = presentation.getSlides()[0]; // 假設我們操作的是第一張幻燈片

  // 形狀的索引(從 0 開始)
  var shapesIndices = [0, 3]; // 第 0 個 和 第 3 個"形狀"

  // 超連結的 URL 列表
  var urls = ['https://www.example1.com', 'https://www.example2.com'];

  // 確保形狀和超連結的數量匹配
  if (urls.length !== shapesIndices.length) {
    Logger.log('形狀和超連結的數量不匹配!');
    return;
  }

  for (var i = 0; i < shapesIndices.length; i++) {
    var shapeIndex = shapesIndices[i];
    var url = urls[i];

    // 取得形狀
    var shape = slide.getShapes()[shapeIndex];

    // 為形狀中的文字新增超連結
    shape.getText().getTextStyle().setLinkUrl(url);

    Logger.log('為 Shape ' + (shapeIndex + 1) + ' 新增了超連結: ' + url);
  }
}

這樣就成功為圖片新增超連結囉!
https://ithelp.ithome.com.tw/upload/images/20240904/20137680xEYpsRNkQs.png

https://ithelp.ithome.com.tw/upload/images/20240904/20137680RhUwulnmyL.png

連結回首頁簡報

我想再多做一個返回首頁的按鍵
我先讓簡報的順序變成這樣~

https://ithelp.ithome.com.tw/upload/images/20240904/20137680yGat5O9cP1.png
然後就可以用 presentation.getSlides() 來取得想要的 slide 目標頁
再用 setLinkSlide 去設定連結就可以囉!

function addLinkToFirstSlide()
{
    var presentation = SlidesApp.getActivePresentation();
    var slide = presentation.getSlides()[1]; // 假設我們操作的是第2張幻燈片
    var shape = slide.getShapes()[1];
    var targetSlide = presentation.getSlides()[0];
    shape.setLinkSlide(targetSlide);
}

如果要用文字連結可先用 getText().getTextStyle() 再使用 setLinkSlide

    shape.getText().getTextStyle().setLinkSlide(targetSlide);

成品就會變成這樣

  • shape連結
    https://ithelp.ithome.com.tw/upload/images/20240904/201376808A70NxMJXW.png

  • 文字連結
    https://ithelp.ithome.com.tw/upload/images/20240904/20137680SKvhiZBFi3.png

明天就來教大家如何從 Google Sheet 取得資料自動產出投影片!


上一篇
[Day 15] GAS - Google Slide 操作大全 Part 3 - 文字範圍 TextRange & 段落樣式 ParagraphStyle
下一篇
[Day 17] GAS - 實例操作 - 從 Google Sheet 取得資料自動產出投影片(2/2)
系列文
30 天玩轉 GAS: 打造你的個人自動化助手23
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言