【问题标题】:Write to Google Sites ListItem with GAS使用 GAS 写入 Google 协作平台 ListItem
【发布时间】:2014-11-28 20:19:57
【问题描述】:

我已经折腾了几个小时,试图得到任何一个

addListItem(values)

setValueByIndex(index, value)

在我的谷歌应用程序脚本中工作。

我发现我需要定义页面对象。 Google 应用程序如下所示

var site = SiteApp.getSite("domain","site name")
var page = site.getChildByName("pagename")

第一个问题出现在这里。我的页面不断返回 Null。所以我找到了解决方法。我正在使用....

var site = SiteApp.getSite("domain","site name")
var matches = site.search("myName");

for(var i in matches) {
    Logger.log(matches[i].getName());
}
var listpage = matches[0];

这有点乱,但是,嘿,我得到了我的页面对象。

现在我正在尝试将项目添加到列表页面,但我遇到了更多问题。

listpage.addListItem([ "John", "Smith", "123 Main St"]);

直接取自谷歌示例Here!

我得到的错误是“无效参数:值(第 xxx 行,文件“函数”)”

目标是从一个列表中提取值(简单且完成)并将其写入另一个列表。

总代码 *** 已编辑以显示列表页确认

var site = SiteApp.getSite("domain","site name")
var page = site.getChildByName("pagename")
var isListPage = false

for(var i in matches) {
    Logger.log(matches[i].getName());
}
var listpage = matches[0];

if (listpage.getPageType() == SitesApp.PageType.LIST_PAGE) {
    isListPage = true;
    listpage.addListItem([ "John", "Smith", "123 Main St"]);
    Logger.log(isListPage);
  }

有人可以帮我理解我在哪里出错了吗?

【问题讨论】:

  • 您是否验证过您的页面是列表页面?
  • 是他本人。是的,我添加了以下代码。 var isListPage =false if (listpage.getPageType() == SitesApp.PageType.LIST_PAGE) { isListPage = true; Logger.log(isListPage);
  • 我编辑了主帖以显示代码添加。
  • 您的页面的实际路径是什么,遵循您的域,或重现问题的页面?例如我正在尝试.../experiment/my-list-page

标签: google-apps-script google-sites


【解决方案1】:

如果site.getChildByName() 不起作用,请检查:

  1. 您从页面路径中获得了正确的名称,通常是小写的,带有连字符的空格。例如,这个页面被命名为“我的列表页面”:

    https://sites.google.com/a/example.com/experiment/my-list-page
                                 Domain      Site        Page
    
  2. 该页面是site 的子页面,而不是另一个页面。

    如果页面在另一个页面之下,而不是在您网站的顶层,那么您需要改用Page.getChildByName()

    var section = site.getChildByName( 'daily-status' );
    var page = section.getChildByName( 'my-list-page' );
    

无效参数错误

我已经能够通过尝试添加与列表包含的值数量不同的列表项来重新创建Invalid argument: values... 错误。例如,这是一个列表页,有四列:

使用您引用的示例代码时出现错误:

var site = SitesApp.getSite("example.com", "experiment");

var page = site.getChildByName("my-list-page");

page.addListItem([ "John", "Smith", "123 Main St"]);

那个 listItem 只有三个值。我成功了,如屏幕截图所示,将其更改为:

page.addListItem([ "John", "Smith", "123 Main St", ""]);

由于列表中的列数是可变的,并且可能由甚至可能不知道用于输入数据的脚本的页面编辑器进行更改,因此硬编码 listItem 值是不可靠的。

addListItemToPage()

这里有一个辅助函数来处理脏活。

  addListItemToPage( "my-list-page", ["John", "Smith", "123 Main St"] );

请注意,它假定页面位于顶层 - 根据需要进行调整。

// These globals should be customized for your site
var domain = 'example.com';
var sitename = 'experiment';

/**
 * Add a listItem to the given page. The listItem is truncated or padded as necessary
 * to match the list size on the page. Expects global variables `domain` and `sitename`.
 *
 * @param {String}   pageName      Name of the list page, assumed to be at top level
 * @param {String[]} listItem      Array of strings to be added to list
 */
function addListItemToPage(pageName, listItem) {
  // Get site from sitename & domain if applicable
  var site = (domain === '') 
           ? SitesApp.getSite(sitename)          // consumer
           : SitesApp.getSite(domain, sitename); // hosted apps
  var page = site.getChildByName(pageName);
  if (!site || !page) {
    throw new Error("Page not found: " + domain + "/" + sitename + "/" + pageName);
  }

  if (page.getPageType() == SitesApp.PageType.LIST_PAGE) {
    var numColumns = page.getColumns().length;
    // Ensure listItem matches size of list
    // Uses pad from http://www.jslab.dk/library/Array.pad
    var paddedItem = listItem.pad(numColumns, "").slice(0, numColumns);
    page.addListItem(paddedItem);
  } else {
    throw new Error("Not a list page: " + domain + "/" + sitename + "/" + pageName);
  }
}

【讨论】:

  • 不幸的功能差距:您无法找出 Google 协作平台列表中每一列的类型。
  • 谢谢!我也会研究一下jslab。对 JS 和 GAS 来说相当新。上面的代码是我主要目标的切线结果。我怀疑我没有正确地得到孩子。虽然通过搜索获取​​对象应该是一回事,不是吗?
  • 我在我的列表页面上向下了几层。 sites.google.com/a/"domain"/"sitename"/home/"page layer 1"/"page layer 2"/"target list page"真的是要走的路吗?
  • 通过搜索得到它是有效的,只要你有唯一的名字。假设第 0 个项目是您的,特别是如果其他编辑可以添加页面(例如学校环境)。使用“路径解释器”类型的功能将有助于做孩子的孩子,否则会非常痛苦和缓慢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多