0

在我的Google 站点上,我插入了一个 Apps 脚本小工具(通过粘贴我作为服务发布的 Apps 脚本的 URL)。此 Apps 脚本允许用户输入一个值(他们的“Blow Number”)并查看相应的数据(基于对我的 Google Fusion 表的 API 调用)。

现在,脚本返回 3 个超链接:

  • 单击此处查看第 1 号打击表
  • 单击此处查看 Blow Number 1 的图表
  • 单击此处查看第 1 次打击的地图

这是因为我的脚本函数getblowdetails有 3 个app.createAnchor变量。我希望脚本自动调用 3 个 URL 并在面板中显示表格、图表和地图,而不是让脚本返回 3 个超链接(用户必须单击并在新窗口中查看生成的 URL)在同一页上。

因此,用户将输入他们的 Blow Number 并按 Enter。然后,他们将直接查看同一网页上文本框下方的表格、图表和地图。

请查看我在下面包含的代码并提出建议...感谢您的帮助-我是应用程序脚本新手,因此非常感谢您提供全面且易于理解的响应!

代码

注意:我已经从 createAnchor 变量中删除了 URL,因为我只能在帖子中包含 2 个链接,但是您可以通过访问 www.OnSiteBAC.com/ViewMyBlows 并输入 Blow Number = 1 来查看它们...然后单击超链接。

function doGet() {
  var app = UiApp.createApplication();

  // Create input boxes, buttons, labels, and links
  var textBoxA = app.createTextBox().setId('textBoxA').setName('textBoxA').setFocus(true);
  var buttonA = app.createButton('Get Blow Details').setEnabled(false);
  var label = app.createLabel('Please enter your Blow Number here');
  var link = app.createAnchor('where can I find my Blow Number?', 'http://www.onsitebac.com');

  // Create a handler to call the getblowdetails function.
  // A validation is added to this handler so that it will only invoke 'getblowdetails' if textBoxA contains a number
  var handler = app.createServerClickHandler('getblowdetails').validateNumber(textBoxA).addCallbackElement(textBoxA);

  // Create a handler to enable the button if all input is legal
  var onValidInput = app.createClientHandler().validateNumber(textBoxA).forTargets(buttonA).setEnabled(true).forTargets(label, link).setVisible(false);

  // Create a handler to mark invalid input in textBoxA and disable the button
  var onInvalidInput1 = app.createClientHandler().validateNotNumber(textBoxA).forTargets(buttonA).setEnabled(false).forTargets(textBoxA).setStyleAttribute("color", "red").forTargets(label, link).setVisible(true);

  // Create a handler to mark the input in textBoxA as valid
  var onValidInput1 = app.createClientHandler().validateNumber(textBoxA).forTargets(textBoxA).setStyleAttribute("color", "black");

  // only fire ServerHandler for onKeyUp if it passes validation
  var textBoxHandler = app.createServerHandler('textBoxHandlerFunction');

  // Add all the handlers to be called when the user types in the text boxes
  textBoxHandler.addCallbackElement(textBoxA);
  textBoxA.addKeyUpHandler(onInvalidInput1);
  textBoxA.addKeyUpHandler(onValidInput1);
  textBoxA.addKeyUpHandler(onValidInput);
  textBoxA.addKeyUpHandler(textBoxHandler);
  buttonA.addClickHandler(handler);
  app.add(textBoxA);
  app.add(buttonA);
  app.add(label);
  app.add(link);
  return app;
}

function textBoxHandlerFunction(e) {
  var app = UiApp.getActiveApplication();
  if (e.parameter.keyCode == 13)
  {
    app = getblowdetails(e);
  }
  return app;
}

function getblowdetails(e) {
  var app = UiApp.getActiveApplication();
  var panel2 = app.createVerticalPanel();
  var link2 = app.createAnchor ().setStyleAttribute("color", "green");
  var panel3 = app.createVerticalPanel();
  var link3 = app.createAnchor ();
  var panel4 = app.createVerticalPanel();
  var link4 = app.createAnchor ();
  panel3.add(link3);
  app.add(panel3);
  panel4.add(link4);
  app.add(panel4);
  return app;
}
4

1 回答 1

0

我认为您无法实际下载结果并显示它。所以,没有简单的解决方案。

但是您可以轻松地在 Apps Script 上构建该表格和图表(假设您已经可以使用其 API 从表格中获取信息)。

最后一个问题是地图。在 Apps Script 上,您只能创建静态地图,即图像。您可以添加自定义标记和多边形,设置缩放等。但最终它是一张照片。用户将无法像预期的那样拖动它或将地图用作嵌入式谷歌地图。

于 2013-04-30T19:04:42.583 回答