Arrays GoogleApps脚本和解析器:从两个1d数组构建2d数组的简单方法?
我正在使用从网站上的数据构建一些数组(以及避免每次运行程序时都必须阅读页面的方法): 行“rgMyRange.setValues(crewNames);”不起作用,因为我只有一个一维数组。但我最终想将crewNames写入A列,将crewURLs写入B列,我认为使用2d数组可以相当容易地完成这项工作。如果可以的话,尽量避免构建循环来遍历我的数据。有没有一种简单的方法(无需构建这样的循环)将这两个1d数组组合成一个2d数组,或者是我在解析器中缺少的可以自动执行的东西?Arrays GoogleApps脚本和解析器:从两个1d数组构建2d数组的简单方法?,arrays,google-apps-script,google-sheets,Arrays,Google Apps Script,Google Sheets,我正在使用从网站上的数据构建一些数组(以及避免每次运行程序时都必须阅读页面的方法): 行“rgMyRange.setValues(crewNames);”不起作用,因为我只有一个一维数组。但我最终想将crewNames写入A列,将crewURLs写入B列,我认为使用2d数组可以相当容易地完成这项工作。如果可以的话,尽量避免构建循环来遍历我的数据。有没有一种简单的方法(无需构建这样的循环)将这两个1d数组组合成一个2d数组,或者是我在解析器中缺少的可以自动执行的东西? 在脚本中,crewNames
- 在脚本中,
和crewNames
是一维数组crewURLs
- 您希望将
和crewNames
分别放在活动工作表的“A”列和“B”列中crewURLs
function readCrew() {
var categoryCrewURL = "https://stt.wiki/wiki/Category:Crew"
var categoryCrewText = "Category-Crew-List";
var wholePagefromText = 'next page';
var wholePagetoText = 'previous page';
var content = getCacheData(categoryCrewURL, categoryCrewText);
var scraped = Parser
.data(content)
.from(wholePagefromText)
.to(wholePagetoText)
.build();
var fromText = 'href="';
var toText = '"';
var crewURLs = Parser
.data(scraped)
.from(fromText)
.to(toText)
.iterate();
Logger.log(crewURLs);
var fromText = 'title="';
var toText = '">';
var crewNames = Parser
.data(scraped)
.from(fromText)
.to(toText)
.iterate();
Logger.log(crewNames);
ssActive = SpreadsheetApp.getActiveSpreadsheet();
rgMyRange = ssActive.getRange("A:A");
rgMyRange.setValues(crewNames);
}
function getCacheData(targetURL, targetCacheName) {
const crusher = new cUseful.CrusherPluginCacheService().init ({
store:CacheService.getUserCache()
});
Logger.log(targetURL);
Logger.log(targetCacheName);
var cached = crusher.get (targetCacheName);
if (cached != null) {
return cached;
}
// This fetch takes 20 seconds:
var result = UrlFetchApp.fetch(targetURL);
var contents = result.getContentText();
crusher.put (targetCacheName, contents);
return contents;
}
ssActive = SpreadsheetApp.getActiveSpreadsheet();
rgMyRange = ssActive.getRange("A:A");
rgMyRange.setValues(crewNames);
var values = crewNames.map(function(e, i) {return [e, crewURLs[i]]}); // Added
ssActive = SpreadsheetApp.getActiveSheet(); // Modified
rgMyRange = ssActive.getRange(1, 1, values.length, values[0].length); // Modified
rgMyRange.setValues(values); // Modified