使用GAS写入Google Sites ListItem

时间:2014-11-28 20:19:58

标签: google-apps-script google-sites

我已经花了几个小时来试图获得

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);
  }

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

1 个答案:

答案 0 :(得分: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' );
    
  3. 无效的参数错误

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

    screenshot

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

    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);
      }
    }