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

罗伯·坎贝尔

我想从文档属性中获取数据,将其转换为数组,然后将其推送到工作表中。该工作表恰好位于与脚本所在的电子表格不同的电子表格中,但我已经解决了这个问题。我遇到的问题是将属性中的数据转换为二维数组 [{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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何将数组数据推送到数据属性中

来自分类Dev

无法将子文档推送到Mongoose中的文档数组

来自分类Dev

将JSON数据推送到数组中?

来自分类Dev

将Firestore文档ID推送到数组

来自分类Dev

将数据从Excel推送到Word文档

来自分类Dev

使用codeigniter php将数据推送到数组中

来自分类Dev

如何将数据推送到数组mongodb中?

来自分类Dev

将数据推送到 React Native 中的数组

来自分类Dev

Mongoose NodeJS Express-如何将数据推送到特定的子文档对象数组

来自分类Dev

将JSON数据推送到Jquery数组

来自分类Dev

将新项目推送到mongoDB文档数组

来自分类Dev

将范围内的唯一数字推送到Javascript中的数组

来自分类Dev

我正在尝试将数据推送到react中useState中定义的数组中,但是没有将数据推送到数组中

来自分类Dev

为什么在将Javascript对象推送到数组之前必须将其存储在变量中?

来自分类Dev

将数据推送到json对象中

来自分类Dev

将字符串数组的所有数据推送到新数组javascript中

来自分类Dev

使用Javascript将数据推送到另一个数组中的数组

来自分类Dev

如何将数据推送到空二维数组中的特定子数组

来自分类Dev

谷歌分析 api:将存储在变量中的数据推送到 maria db

来自分类Dev

将新的关键元素推送到mongodb的子文档中

来自分类Dev

如何收集所有数据属性并推送到数组

来自分类Dev

如何将新的构造函数属性推送到数组?

来自分类Dev

如何将数据推送到更多具有相同属性的对象中

来自分类Dev

如何将现有的子文档推送到MongoDB中的嵌入式数组中?

来自分类常见问题

如何将数据推送到JSON文件中的数组并保存?

来自分类Dev

如何将数据推送到JSON文件中的数组并保存?

来自分类Dev

将JSON数据推送到Angular JS中的现有数组

来自分类Dev

使用upsert时无法将新数据推送到数组中

来自分类Dev

使用节点异步循环将 EXIF 图像数据推送到数组中

Related 相关文章

  1. 1

    如何将数组数据推送到数据属性中

  2. 2

    无法将子文档推送到Mongoose中的文档数组

  3. 3

    将JSON数据推送到数组中?

  4. 4

    将Firestore文档ID推送到数组

  5. 5

    将数据从Excel推送到Word文档

  6. 6

    使用codeigniter php将数据推送到数组中

  7. 7

    如何将数据推送到数组mongodb中?

  8. 8

    将数据推送到 React Native 中的数组

  9. 9

    Mongoose NodeJS Express-如何将数据推送到特定的子文档对象数组

  10. 10

    将JSON数据推送到Jquery数组

  11. 11

    将新项目推送到mongoDB文档数组

  12. 12

    将范围内的唯一数字推送到Javascript中的数组

  13. 13

    我正在尝试将数据推送到react中useState中定义的数组中,但是没有将数据推送到数组中

  14. 14

    为什么在将Javascript对象推送到数组之前必须将其存储在变量中?

  15. 15

    将数据推送到json对象中

  16. 16

    将字符串数组的所有数据推送到新数组javascript中

  17. 17

    使用Javascript将数据推送到另一个数组中的数组

  18. 18

    如何将数据推送到空二维数组中的特定子数组

  19. 19

    谷歌分析 api:将存储在变量中的数据推送到 maria db

  20. 20

    将新的关键元素推送到mongodb的子文档中

  21. 21

    如何收集所有数据属性并推送到数组

  22. 22

    如何将新的构造函数属性推送到数组?

  23. 23

    如何将数据推送到更多具有相同属性的对象中

  24. 24

    如何将现有的子文档推送到MongoDB中的嵌入式数组中?

  25. 25

    如何将数据推送到JSON文件中的数组并保存?

  26. 26

    如何将数据推送到JSON文件中的数组并保存?

  27. 27

    将JSON数据推送到Angular JS中的现有数组

  28. 28

    使用upsert时无法将新数据推送到数组中

  29. 29

    使用节点异步循环将 EXIF 图像数据推送到数组中

热门标签

归档