0

最近我的脚本在第一次运行后开始失败。换句话说:第一次运行成功,下一次失败,在浏览器的开发工具中可以看到错误 400“请求包含无效参数”。

这是一个可靠地重现问题的小代码示例:

appscript.json

{
  "timeZone": "Europe/Riga",
  "dependencies": {
  },
  "exceptionLogging": "STACKDRIVER",
  "runtimeVersion": "V8",

  "addOns": {
    "common": {
      "name": "A simple test script",
      "logoUrl": "https://www.gstatic.com/images/icons/material/system/1x/pets_black_48dp.png"
    },
      "slides": {
        "homepageTrigger": {
          "runFunction": "onSlidesEditorHomepage"
        }
      }
  }
}

代码.gs

function onSlidesEditorHomepage() {
  var card = CardService.newCardBuilder()
      .addSection(
        CardService.newCardSection().addWidget(
          CardService.newDecoratedText()
          .setText("Slides...")
          .setButton(
            CardService.newTextButton()
              .setText('Move a slide')
              .setOnClickAction(CardService.newAction().setFunctionName('onMoveClick'))
              .setTextButtonStyle(CardService.TextButtonStyle.FILLED)
              .setDisabled(false)
          )
        )
      );
  return card.build();

}

function onMoveClick() {
  let p = SlidesApp.getActivePresentation();
  let slides = p.getSlides();
  slides[1].move(0);  // move the 2nd slide to the beginning

  // appendSlide function hangs in the same way
  // let p = SlidesApp.getActivePresentation();
  // let slides = p.getSlides();
  // p.appendSlide(slides[0]);    // inserts a copy of the slide

  return CardService.newActionResponseBuilder()
      .setNotification(CardService.newNotification()
      .setText("The slides has been moved"))
      .build();
}

重现问题的步骤:

  1. 打开包含 5 张幻灯片的幻灯片演示文稿
  2. 第一次单击“移动幻灯片”按钮
  3. 第二次单击“移动幻灯片”按钮
  4. 第三次单击“移动幻灯片”按钮

第一次移动幻灯片。任何连续运行都失败并出现控制台错误:400“请求包含无效参数”。

请注意,此代码和类似代码在 2021 年 9 月有效。

更新:我还向 Google 幻灯片问题跟踪器提交了这个错误:https ://issuetracker.google.com/issues/210299318但此类问题存在多年,没有任何修复或解决方法。我希望找到一些修复或至少是一种解决方法。

4

2 回答 2

1

这是已通过 IssueTracker ( https://issuetracker.google.com/issues/210299318 ) 报告的可重现错误。

如果其他人遇到相同的错误,我强烈建议通过单击问题编号旁边的星号来支持它。

于 2022-01-06T12:21:27.323 回答
0

作为普通开发人员,我认为不幸的是,除了发布问题/为现有问题加注星标之外,我们没有任何办法可以解决此类 Google Apps 脚本服务问题。

要尝试的事情

  1. 使用属性服务来存储/检索活动的演示文稿 ID,而不是let p = SlidesApp.getActivePresentation();使用let p = SlidesApp.openById(id);

  2. 更改脚本所有者,将脚本移入/移出共享驱动器。

  3. 制作脚本的副本。您可能使用相同的 Google Cloud 项目,只需更新 Google Apps 脚本项目和版本号

  4. 使用旧运行时 (Rhino) 而不是默认运行时 (Chrome V8)。注意:旧运行时不支持letECMASCRIPT-2016 中引入的其他一些 JavaScript 更改。对于问题中显示的代码,替换letvar 看起来是更简单/更方便的继续方式。有关详细说明,请参阅https://developers.google.com/apps-script/guides/v8-runtime#enabling_the_rhino_runtime

  5. 尝试使用高级幻灯片服务而不是幻灯片(基本)服务。

于 2022-01-12T17:06:37.960 回答