Google 中的 GAS getPageElementType 幻灯片记录输出过大。截断输出

GAS getPageElementType in Google Slides Logging output too large. Truncating output

使用 getPageElementType 有技巧吗?

如果您使用此功能,您会收到“记录输出太大。截断输出。pe 类型”,然后是一些无意义的转储。确定页面元素类型的唯一方法是使用 select / case 结构并遍历整个枚举吗?

这是我的代码:

function minimalCode() {
  
  const presentation = SlidesApp.getActivePresentation();
  const slides = presentation.getSlides();

  slides.forEach(slide => {
    slide.getPageElements().forEach(pe => {
      if (pe.getPageElementType() === 'SHAPE')
        console.log('pe type:  SHAPE' );
      else
        console.log('keep quessing the pe type - it is not a SHAPE' );

      console.log('- - - - - - - - - - - ' );
      console.log('pe type: ', pe.getPageElementType() )
      return;
    } );  // for each pe
    return;
  } );  // for each slide
}

结果如下:

Mar 10, 2021, 2:35:47 PM    Debug   keep quessing the pe type - it is not a SHAPE
Mar 10, 2021, 2:35:47 PM    Debug   - - - - - - - - - - - 
Mar 10, 2021, 2:35:47 PM    Debug   Logging output too large. Truncating output. pe type:  { toString: [Function: toString],
  name: [Function: toString],
  toJSON: [Function: toString],
  ordinal: [Function: ordinal],
  compareTo: [Function: compareTo],
  UNSUPPORTED_PAGE_ELEMENT: 
   { toString: [Function: toString],
     name: [Function: toString],
     toJSON: [Function: toString],
     ordinal: [Function: ordinal],
     compareTo: [Function: compareTo],
     UNSUPPORTED_PAGE_ELEMENT: [Circular],
     UNSUPPORTED: 
      { toString: [Function: toString],
        name: [Function: toString],
        toJSON: [Function: toString],
        ordinal: [Function: ordinal],
        compareTo: [Function: compareTo],
        UNSUPPORTED_PAGE_ELEMENT: [Circular],
        UNSUPPORTED: [Circular],
        SHAPE: [Circular],
        IMAGE: [Object],
        VIDEO: [Object],
        TABLE: [Object],
        GROUP: [Object],
        LINE: [Object],
        WORD_ART: [Object],
        SHEETS_CHART: [Object],
        AUDIO: [Object] },
     SHAPE: [Circular],
     IMAGE: 
      { toString: [Function: toString],
        name: [Function: toString],
        toJSON: [Function: toString],
        ordinal: [Function: ordinal],
        compareTo: [Function: compareTo],
        UNSUPPORTED_PAGE_ELEMENT: [Circular],
        UNSUPPORTED: [Object],
        SHAPE: [Circular],
        IMAGE: [Circular],
        VIDEO: [Object],
        TABLE: [Object],
        GROUP: [Object],
        LINE: [Object],
        WORD_ART: [Object],
        SHEETS_CHART: [Object],
        AUDIO: [Object] },
     VIDEO: 
      { toString: [Function: toString],
        name: [Function: toString],
        toJSON: [Function: toString],
        ordinal: [Function: ordinal],
        compareTo: [Function: compareTo],
        UNSUPPORTED_PAGE_ELEMENT: [Circular],
        UNSUPPORTED: [Object],
        SHAPE: [Circular],
        IMAGE: [Object],
        VIDEO: [Circular],
        TABLE: [Object],
        GROUP: [Object],
        LINE: [Object],
        WORD_ART: [Object],
        SHEETS_CHART: [Object],
        AUDIO: [Object] },
     TABLE: 
      { toString: [Function: toString],
        name: [Function: toString],
        toJSON: [Function: toString],
        ordinal: [Function: ordinal],
        compareTo: [Function: compareTo],
        UNSUPPORTED_PAGE_ELEMENT: [Circular],
        UNSUPPORTED: [Object],
        SHAPE: [Circular],
        IMAGE: [Object],
        VIDEO: [Object],
        TABLE: [Circular],
        GROUP: [Object],
        LINE: [Object],
        WORD_ART: [Object],
        SHEETS_CHART: [Object],
        AUDIO: [Object] },
     GROUP: 
      { toString: [Function: toString],
        name: [Function: toString],
        toJSON: [Function: toString],
        ordinal: [Function: ordinal],
        compareTo: [Function: compareTo],
        UNSUPPORTED_PAGE_ELEMENT: [Circular],
        UNSUPPORTED: [Object],
        SHAPE: [Circular],
        IMAGE: [Object],
        VIDEO: [Object],
        TABLE: [Object],
        GROUP: [Circular],
        LINE: [Object],
        WORD_ART: [Object],
        SHEETS_CHART: [Object],
        AUDIO: [Object] },
     LINE: 
      { toString: [Function: toString],
        name: [Function: toString],
        toJSON: [Function: toString],
        ordinal: [Function: ordinal],
        compareTo: [Function: compareTo],
        UNSUPPORTED_PAGE_ELEMENT: [Circular],
        UNSUPPORTED: [Object],
        SHAPE: [Circular],
        IMAGE: [Object],
        VIDEO: [Object],
        TABLE: [Object],
        GROUP: [Object],
        LINE: [Circular],
        WORD_ART: [Object],
        SHEETS_CHART: [Object],
        AUDIO: [Object] },
     WORD_ART: 
      { toString: [Function: toString],
        name: [Function: toString],
        toJSON: [Function: toString],
        ordinal: [Function: ordinal],
        compareTo: [Function: compareTo],
        UNSUPPORTED_PAGE_ELEMENT: [Circular],
        UNSUPPORTED: [Object],
        SHAPE: [Circular],
        IMAGE: [Object],
        VIDEO: [Object],
        TABLE: [Object],
        GROUP: [Object],
        LINE: [Object],
        WORD_ART: [Circular],
        SHEETS_CHART: [Object],
        AUDIO: [Object] },
     SHEETS_CHART: 
      { toString: [Function: toString],
        name: [Function: toString],
        toJSON: [Function: toString],
        ordinal: [Function: ordinal],
        compareTo: [Function: compareTo],
        UNSUPPORTED_PAGE_ELEMENT: [Circular],
        UNSUPPORTED: [Object],
        SHAPE: [Circular],
        IMAGE: [Object],
        VIDEO: [Object],
        TABLE: [Object],
        GROUP: [Object],
        LINE: [Object],
        WORD_ART: [Object],
        SHEETS_CHART: [Circular],
        AUDIO: [Object] },
     AUDIO: 
      { toString: [Function: toString],
        name: [Function: toString],
        toJSON: [Function: toString],
        ordinal: [Function: ordinal],
        compareTo: [Function: compareTo],
        UNSUPPORTED_PAGE_ELEMENT: [Circular],
        UNSUPPORTED: [Object],
        SHAPE: [Circular],
        IMAGE: [Object],
        VIDEO: [Object],
        TABLE: [Object],
        GROUP: [Object],
        LINE: [Object],
        WORD_ART: [Object],
        SHEETS_CHART: [Object],
        AUDIO: [Circular] } },
  UNSUPPORTED: 
   { toString: [Function: toString],
     name: [Function: toString],
     toJSON: [Function: toString],
     ordinal: [Function: ordinal],
     compareTo: [Function: compareTo],
     UNSUPPORTED_PAGE_ELEMENT: 
      { toString: [Function: toString],
        name: [Function: toString],
        toJSON: [Function: toString],
        ordinal: [Function: ordinal],
        compareTo: [Function: compareTo],
        UNSUPPORTED_PAGE_ELEMENT: [Circular],
        UNSUPPORTED: [Circular],
        SHAPE: [Circular],
        IMAGE: [Object],
        VIDEO: [Object],
        TABLE: [Object],
        GROUP: [Object],
        LINE: [Object],
        WORD_ART: [Object],
        SHEETS_CHART: [Object],
        AUDIO: [Object] },
     UNSUPPORTED: [Circular],
     SHAPE: [Circular],
     IMAGE: 
      { toString: [Function: toString],
        name: [Function: toString],
        toJSON: [Function: toString],
        ordinal: [Function: ordinal],
        compareTo: [Function: compareTo],
        UNSUPPORTED_PAGE_ELEMENT: [Object],
        UNSUPPORTED: [Circular],
        SHAPE: [Circular],
        IMAGE: [Circular],
        VIDEO: [Object],
        TABLE: [Object],
        GROUP: [Object],
        LINE: [Object],
        WORD_ART: [Object],
        SHEETS_CHART: [Object],
        AUDIO: [Object] },
     VIDEO: 
      { toString: [Function: toString],
        name: [Function: toString],
        toJSON: [Function: toString],
        ordinal: [Function: ordinal],
        compareTo: [Function: compareTo],
        UNSUPPORTED_PAGE_ELEMENT: [Object],
        UNSUPPORTED: [Circular],
        SHAPE: [Circular],
        IMAGE: [Object],
        VIDEO: [Circular],
        TABLE: [Object],
        GROUP: [Object],
        LINE: [Object],
        WORD_ART: [Object],
        SHEETS_CHART: [Object],
        AUDIO: [Object] },
     TABLE: 
      { toString: [Function: toString],
        name: [Function: toString],
        toJSON: [Function: toString],
        ordinal: [Function: ordinal],
        compareTo: [Function: compareTo],
        UNSUPPORTED_PAGE_ELEMENT: [Object],
        UNSUPPORTED: [Circular],
        SHAPE: [Circular],
        IMAGE: [Object],
        VIDEO: [Object],
        TABLE: [Circular],
        GROUP: [Object],
        LINE: [Object],
        WORD_ART: [Object],
        SHEETS_CHART: [Object],
        AUDIO: [Object] },
     GROUP: 
      { toString: [Function: toString],
        name: [Function: toString],
        toJSON: [Function: toString],
        ordinal: [Function: ordinal],
        compareTo: [Function: compareTo],
        UNSUPPORTED_PAGE_ELEMENT: [Object],
        UNSUPPORTED: [Circular],
        SHAPE: [Circular],
        IMAGE: [Object],
        VIDEO: [Object],
        TABLE: [Object],
        GROUP: [Circular],
        LINE: [Object],
        WORD_ART: [Object],
        SHEETS_CHART: [Object],
        AUDIO: [Object] },
     LINE: 
      { toString: [Function: toString],
        name: [Function:

Console.log() outputs a blank DEBUG level message to Stackdriver Logging. You can use Logger.log(data) 代替。

示例代码:

function minimalCode() {
  
  const presentation = SlidesApp.getActivePresentation();
  const slides = presentation.getSlides();

  slides.forEach(slide => {
    slide.getPageElements().forEach(pe => {
      if (pe.getPageElementType() === "SHAPE")
        Logger.log('pe type:  SHAPE' );
      else
        Logger.log('keep quessing the pe type - it is not a SHAPE' );

      Logger.log('- - - - - - - - - - - ' );
      Logger.log('pe type: '+ pe.getPageElementType() )
      return;
    } );  // for each pe
    return;
  } );  // for each slide
}

输出:

6:21:38 AM  Notice  Execution started
6:21:40 AM  Info    keep quessing the pe type - it is not a SHAPE
6:21:40 AM  Info    - - - - - - - - - - - 
6:21:40 AM  Info    pe type: SHAPE
6:21:40 AM  Info    keep quessing the pe type - it is not a SHAPE
6:21:40 AM  Info    - - - - - - - - - - - 
6:21:40 AM  Info    pe type: IMAGE
6:21:40 AM  Info    keep quessing the pe type - it is not a SHAPE
6:21:40 AM  Info    - - - - - - - - - - - 
6:21:40 AM  Info    pe type: TABLE
6:21:40 AM  Notice  

注:

  • 在您当前的代码中,即使页面元素类型已经是 SHAPE,也没有触发 if 条件。要解决此问题,请使用 if (pe.getPageElementType() == "SHAPE")

输出:

6:27:30 AM  Notice  Execution started
6:27:31 AM  Info    pe type:  SHAPE
6:27:31 AM  Info    - - - - - - - - - - - 
6:27:31 AM  Info    pe type: SHAPE
6:27:31 AM  Info    keep quessing the pe type - it is not a SHAPE
6:27:31 AM  Info    - - - - - - - - - - - 
6:27:31 AM  Info    pe type: IMAGE
6:27:31 AM  Info    keep quessing the pe type - it is not a SHAPE
6:27:31 AM  Info    - - - - - - - - - - - 
6:27:31 AM  Info    pe type: TABLE
6:27:31 AM  Notice  Execution completed

是的,有一个技巧。当您调用 getPageElementType() 时,它 returns 是一个枚举类型。该枚举类型的值根据其使用的上下文而不同。

当您使用它通过 getPageElementType() === "SHAPE" 测试相等性时,它被评估为一个字符串,并且在幕后 toString() 方法被隐式调用 getPageElementType() 返回的枚举类型,其中 returns 字符串 "SHAPE",因此相等性测试的计算结果为 TRUE。

当您将该枚举类型传递给 console.log() 时,枚举类型被评估为一个对象,并且它的所有可枚举属性都被打印出来。

如果您想从 console.log() 中打印出字符串表示形式,您必须显式调用枚举类型的 toString() 方法(这适用于 Apps 脚本中的所有枚举类型)。

所以,简而言之,这样做:

function minimalCode() {
  
  const presentation = SlidesApp.getActivePresentation();
  const slides = presentation.getSlides();

  slides.forEach(slide => {
    slide.getPageElements().forEach(pe => {
      if (pe.getPageElementType() === 'SHAPE')
        console.log('pe type:  SHAPE' );
      else
        console.log('keep quessing the pe type - it is not a SHAPE' );

      console.log('- - - - - - - - - - - ' );
      console.log('pe type: ', pe.getPageElementType().toString());
      return;
    } );  // for each pe
    return;
  } );  // for each slide
}