我想从文档属性中获取数据,将其转换为数组,然后将其推送到工作表中。该工作表恰好位于与脚本所在的电子表格不同的电子表格中,但我已经解决了这个问题。我遇到的问题是将属性中的数据转换为二维数组 [{userID, sheetName}, {anotherUser, anotherSheet}]。*当前在属性中有五组用户数据,基于为测试我的数据而创建的单独函数。*pairsArray 的数组长度返回一项,大概是整个数据集。* useStatsPairs 的数组长度(属性中的所有数据)返回 295,我猜是字符。
在此脚本的先前版本中,我从同一工作簿中的隐藏工作表中提取数据。该论坛的一位成员提醒我 DocumentProperties 是一种更好的方法。
function storeStats(sheetTitle) {
var docProps = PropertiesService.getDocumentProperties();
var userID = Session.getActiveUser().getEmail();
var thisData = [];
thisData.push(userID, sheetTitle);
var thisDataStr = JSON.stringify(thisData);
docProps.setProperty('USEDATA', docProps.getProperty('USEDATA') +
","+thisDataStr);
sendStats();
}
function sendStats() {
//vars for properties
var pairsArray = [];
var docProps = PropertiesService.getDocumentProperties();
var stringPairs= JSON.stringify(docProps.getProperty('USEDATA'));
var useStatsPairs = JSON.parse(stringPairs);
pairsArray.push(useStatsPairs);
Logger.log(pairsArray.length);
//vars for remote sheet
var useLogHome = "1tKISbjHIS8m7HMNRE7ygTOl1s5PsvU3FDF6BEDoVtDw";
var logDoc = SpreadsheetApp.openById(useLogHome);
var logSheet = logDoc.getSheetByName("Collect");
var lastRemoteRow = logSheet.getLastRow();
var newLogCell = lastRemoteRow+1;
var startRemoteRg = logSheet.getRange(newLogCell,1);
Logger.log(startRemoteRg.getValues());
//now send the properties to an array
//startRemoteRg.setValues(pairsArray);
Logger.log(pairsArray.length);
Logger.log("values in props: "+pairsArray);
}
脚本编辑为最新版本。使用测试函数返回的数据如下:[19-07-13 21:01:11:051 PDT] null,["[email protected]","Script 07/03/2019"],["bulletinator@ gmail.com","脚本 07/12/2019"]
最终这个函数应该从文档属性中提取数据,创建一个数组,然后用第 1 列中的电子邮件地址和第 2 列中的工作表名称填充远程工作表。
编辑和解决方案 我决定简化我的方法。基于另一个 stackOverflow 成员,我之前的愿望是在用户每次运行其中一个函数时收集数据,并在出现一定数量的数据时发送。由于现在证明这太复杂了,我每次使用都发送数据。我知道配额可能是一个问题,但此时我只有 90 个用户每天最多运行该程序几次。有鉴于此,我决定运行以下代码,类似于@cooper 的建议:
function storeStats(sheetTitle) {
var userID = Session.getActiveUser().getEmail();
//remote data collection spreadsheet
var useLogHome = "999"; //spreadsheet reference number
var logDoc = SpreadsheetApp.openById(useLogHome);
var logSheet = logDoc.getSheetByName("Collect");
var lastRemoteRow = logSheet.getLastRow()+1;
var idRg = logSheet.getRange(lastRemoteRow,1);
var shtRg = logSheet.getRange(lastRemoteRow,2);
idRg.setValue(userID);
shtRg.setValue(sheetTitle);
}
此函数从 Sheet172 收集数据并将其存储到 PropertiesService 中的 USEDATA 中JSON.stringify(vA)
。然后将其取出并JSON.parse(ps.getProperty("USEDATA"));
使用 setValues()重新创建二维数组并填充 Sheet173。
因此,将其存储为字符串化数组可能更简单。
function collectData() {
var ss=SpreadsheetApp.getActive();
var sh=ss.getSheetByName('Sheet172');
var rg=sh.getDataRange();
var vA=rg.getValues();
var ps=PropertiesService.getScriptProperties();
ps.setProperty("USEDATA",JSON.stringify(vA));
Logger.log(ps.getProperty("USEDATA"));
var vB=JSON.parse(ps.getProperty("USEDATA"));
var osh=ss.getSheetByName('Sheet173');
osh.clearContents()
osh.getRange(1,1,vB.length,vB[0].length).setValues(vB);
}
这是我的 Sheet172:
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句