我已经花了几个小时来试图获得
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);
}
有人可以帮我理解我在哪里出错吗?
答案 0 :(得分:1)
如果site.getChildByName()
无效,请检查:
您从页面路径中获得了正确的名称,通常是带有连字符的小写字母。例如,此页面名为"我的列表页面":
https://sites.google.com/a/example.com/experiment/my-list-page
Domain Site Page
该网页是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( "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);
}
}