[英]Adding Multiple Arguments to a Custom Function in Google Sheets
我已經廣泛搜索了答案,但似乎找不到。 我正在嘗試更改我的自定義 function 以查找站點地圖 URL 及其更新日期以接受一系列輸入。
這是當前有效的 function:
function sitemap(sitemapUrl, namespace) {
var array = [];
var xml = UrlFetchApp.fetch(sitemapUrl).getContentText();
var document = XmlService.parse(xml);
var root = document.getRootElement();
var sitemapNameSpace = XmlService.getNamespace("http://www.sitemaps.org/schemas/sitemap/0.9");
var urls = root.getChildren('url', sitemapNameSpace);
for (var i = 0; i < urls.length; i++) {
var loc = urls[i].getChild('loc', sitemapNameSpace).getText();
var lastmod = urls[i].getChild('lastmod', sitemapNameSpace).getText();
array.push([loc, lastmod]);
}
return array;
}
我試過使用下面的谷歌示例,但似乎不起作用,但我將它合並到我的 function 中。 有任何想法嗎?
function DOUBLE(input) {
if (input.map) { // Test whether input is an array.
return input.map(DOUBLE); // Recurse over array if so.
} else {
return input * 2;
}
}
編輯:這就是我嘗試將 Google 的示例用於我的 function 的方式:
function sitemaps(sitemapUrl) {
var array = [];
var xml = UrlFetchApp.fetch(sitemapUrl).getContentText();
var document = XmlService.parse(xml);
var root = document.getRootElement()
var sitemapNameSpace = XmlService.getNamespace("http://www.sitemaps.org/schemas/sitemap/0.9")
var urls = root.getChildren('url', sitemapNameSpace)
for (var i = 0; i < urls.length; i++) {
var loc = urls[i].getChild('loc',sitemapNameSpace).getText();
var lastmod = urls[i].getChild('lastmod',sitemapNameSpace).getText();
array.push([loc, lastmod]);
}
if (sitemapUrl.map) {
return sitemapUrl.map(sitemaps);
} else {
return array
}
您沒有使用與Google 示例相同的格式。 截至目前,您正在實際檢索數據后檢查輸入是否為數組。
但是您將fetch
與數組一起用作輸入可能會觸發錯誤,並且 function 可能無法檢查sitemapUrl
可以與map
一起使用。
還要考慮到map
將在數組的每個元素中調用 function 並返回一個包含每個元素結果的數組。 因此,在您的情況下,B3:B6 將為 B3、B4、B5 和 B6 處的值調用 function 並返回一個長度為 4 的數組和結果。 對於您想要一個列表的情況,您需要在之后展平數組
我會把你的 function 改成這樣:
function sitemaps(sitemapUrl) {
if (sitemapUrl.map) {
return sitemapUrl.map(sitemaps).flat();
} else {
var array = [];
var xml = UrlFetchApp.fetch(sitemapUrl).getContentText();
var document = XmlService.parse(xml);
var root = document.getRootElement()
var sitemapNameSpace = XmlService.getNamespace("http://www.sitemaps.org/schemas/sitemap/0.9")
var urls = root.getChildren('url', sitemapNameSpace)
for (var i = 0; i < urls.length; i++) {
var loc = urls[i].getChild('loc', sitemapNameSpace).getText();
var lastmod = urls[i].getChild('lastmod', sitemapNameSpace).getText();
array.push([loc, lastmod]);
}
return array
}
}
盡管您所做的很好,但考慮到它還存在一種同時檢索所有請求的方法( UrlFetchApp.fetch()
),但對於這種特定情況,您需要展平重塑輸入數組。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.