gpt4 book ai didi

javascript - 将存储在文档属性中的数据返回到数组并推送到范围;气体

转载 作者:行者123 更新时间:2023-11-28 17:02:19 25 4
gpt4 key购买 nike

我想从文档属性中获取数据,将其转换为数组,然后将其推送到工作表中。该工作表恰好位于与脚本所在的电子表格不同的电子表格中,但我已经解决了这个问题。我遇到的问题是将属性中的数据转换为二维数组 [{userID,sheetName},{anotherUser, anotherSheet}]。*属性中当前有五组用户数据,基于为测试我的数据而创建的单独函数。*pairsArray 的数组长度返回一项,大概是整个数据集。* useStatsPairs 的数组长度(Properties 中的所有数据)返回 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,["bulletinator@gmail.com","脚本 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:

enter image description here

关于javascript - 将存储在文档属性中的数据返回到数组并推送到范围;气体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57014846/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com