Удалите все гиперссылки Google Slide с помощью GAS - PullRequest
0 голосов
/ 08 мая 2020

Я пытаюсь удалить все гиперссылки со слайда.

Ниже приведен код, который я пробовал, но он не работает. Можете ли вы сказать мне, где я ошибся?

function run()
{
var ppt = SlidesApp.getActivePresentation();
var slide = ppt.getSlides()[0];

var pe  = slide.getPageElements();

var startOffset = pe[0].asShape().getText().getLinks()[0].getStartIndex();
var endOffset = pe[0].asShape().getText().getLinks()[0].getEndIndex();
pe[0].asShape().getText().getRange(startOffset, endOffset).getTextStyle().setLinkUrl(null)

}

1 Ответ

1 голос
/ 08 мая 2020

Я считаю вашей целью следующее.

  • Q1. Вы хотите знать причину проблемы с вашим скриптом.
  • Q2. Вы хотите удалить все гиперссылки на слайде в Google Slides с помощью Google Apps Script.

Для этого, как насчет этого ответа?

A1:

In ваш скрипт setLinkUrl(null) используется для удаления ссылки. Это причина вашей проблемы. В этом случае используйте removeLink() вместо setLinkUrl(null). Ref

A2:

В вашем скрипте вы пытаетесь удалить 1-ю гиперссылку текста в 1-й фигуре на 1-й странице. Это причина вашей проблемы. Чтобы удалить все гиперссылки на слайде в Google Slides, как насчет следующего примера сценария?

Пример сценария:

function myFunction() {
  const slides = SlidesApp.openById("###").getSlides();  // Please set the Slides ID.

  const otherTypes = {"IMAGE": "asImage", "LINE": "asLine", "SHEETS_CHART": "asSheetsChart", "WORD_ART": "asWordArt"};
  const slide = slides[0];
  slide.getPageElements().forEach(e => {
    const type = e.getPageElementType();
    if (type == SlidesApp.PageElementType.SHAPE) {
      const shape = e.asShape();
      shape.removeLink();
      shape.getText().getLinks().forEach(l => l.getTextStyle().removeLink());
    } else if (type == SlidesApp.PageElementType.TABLE) {
      const table = e.asTable();
      const rows = table.getNumRows();
      const cols = table.getNumColumns();
      for (let r = 0; r < rows; r++) {
        for (let c = 0; c < cols; c++) {
          table.getCell(r, c).getText().getLinks().forEach(l => l.getTextStyle().removeLink());
        }
      }
    } else {
      if (type in otherTypes) e[otherTypes[type]]().removeLink();
    }
  });
}
  • Если вы используете сценарий, привязанный к контейнеру в Google Slides вы также можете использовать SlidesApp.getActivePresentation().getSlides() вместо const slides = SlidesApp.openById("###").getSlides().
  • В этом примере сценария все гиперссылки на все тексты и все объекты на 1-м слайде в Google Slides удаляются. Тексты в форме и таблицах удаляются.

Примечание:

  • Используйте этот скрипт с V8.
  • Если вы хотите Удалите все гиперссылки во всех слайдах в Google Slides, вы можете использовать следующий скрипт.

    function myFunction() {
      const slides = SlidesApp.openById("###").getSlides();  // Please set the Slides ID.
    
      const otherTypes = {"IMAGE": "asImage", "LINE": "asLine", "SHEETS_CHART": "asSheetsChart", "WORD_ART": "asWordArt"};
      slides.forEach(s => {
        s.getPageElements().forEach(e => {
          const type = e.getPageElementType();
          if (type == SlidesApp.PageElementType.SHAPE) {
            const shape = e.asShape();
            shape.removeLink();
            shape.getText().getLinks().forEach(l => l.getTextStyle().removeLink());
          } else if (type == SlidesApp.PageElementType.TABLE) {
            const table = e.asTable();
            const rows = table.getNumRows();
            const cols = table.getNumColumns();
            for (let r = 0; r < rows; r++) {
              for (let c = 0; c < cols; c++) {
                table.getCell(r, c).getText().getLinks().forEach(l => l.getTextStyle().removeLink());
              }
            }
          } else {
            if (type in otherTypes) e[otherTypes[type]]().removeLink();
          }
        });
      });
    }
    

Ссылки:

...