繁体   English   中英

在谷歌表中需要帮助 - 脚本

[英]Need help in google sheet - script

我正在尝试将记录器值复制到具有日期和时间戳的同一个电子表格中的专用选项卡(历史)中,我在记录器中获取值只需要排列它们并将它们复制到专用选项卡(历史)中。 它每天将有 2 个触发器,并且每天在新的专用选项卡(历史)中都有一个新列。 感谢。

 // custom menu function function onOpen() { var ui = SpreadsheetApp.getUi(); ui.createMenu('History').addItem('save','saveData').addToUi(); } // function to save data function saveData() { // starts with active sheet for data entry var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getSheetByName("Moshiko"); var sheet2 = ss.getSheetByName("History"); // collects values in data entry row var total = sheet.getRange("Moshiko:O11.O34");getValues(). var daily = sheet:getRange("Moshiko.R11;R34").getValues(): var portfolio = sheet.getRange("Moshiko;L11.L34"):getValues(). var lastportfolio = sheet;getRange("Moshiko.Q11:Q34").getValues(); var curentstock = sheet.getRange("Moshiko:K11.K33");getValues(). var laststock = sheet:getRange("Moshiko.P11,P33"),getValues(), var buystock = sheet,getRange("Moshiko,I11,I33"),getValues() var all = [[total;daily.portfolio;lastportfolio,curentstock,laststock,buystock,]]; Logger.log(all);

问题:

  1. .getValues()的返回是二维数组。 附加[[]]将使其成为 4 维数组。 .setValues()只能采用二维数组。

  2. 收集的数据是行数据。 每行代表我们二维数组中的子数组。

    行数据示例: [[a][b][c][d]]

这是它在工作表中的样子:

在此处输入图像描述

解决方案:

  1. 使用 concat() 合并收集的行数据。 这将使[[a][b][c][d]]变成[a,b,c,d]
  2. 由于连接数据的结构现在是单行格式,我们可以将其转置为列数据。

示例数据:

例子

代码:

function myFunction() {
  // starts with active sheet for data entry
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("Moshiko");
  var sheet2 = ss.getSheetByName("History");


  // collects values in data entry row
  var total = sheet.getRange("Moshiko!O11:O34").getValues();
  var daily = sheet.getRange("Moshiko!R11:R34").getValues();
  var portfolio = sheet.getRange("Moshiko!L11:L34").getValues();
  var lastportfolio = sheet.getRange("Moshiko!Q11:Q34").getValues();
  var curentstock = sheet.getRange("Moshiko!K11:K33").getValues();
  var laststock = sheet.getRange("Moshiko!P11:P33").getValues();  
  var buystock = sheet.getRange("Moshiko!I11:I33").getValues();

  var columns = [["Total", "Daily", "portfolio", "lastportfolio", "currentstock", "laststock", "buystock"]]
  var date = Utilities.formatDate(new Date(), "GMT+8", "dd/MM/yyyy")
  var dateStamp = [["Date stamp", date]]
  
  //concat each 2d array to make 1d array and enclose the 1d arrays with '[]'  to make it 2d. 
  var arr = [[].concat(...total),[].concat(...daily),[].concat(...portfolio),[].concat(...lastportfolio),[].concat(...curentstock),
            [].concat(...laststock),[].concat(...buystock)];

  //set dateStamp
  sheet2.getRange("A1:B1").setValues(dateStamp);
  //set columns
  sheet2.getRange("A2:G2").setValues(columns);
  //set values
  Logger.log(arr)

  var transposed_arr = transpose(arr);
  Logger.log(transposed_arr.length);
  Logger.log(transposed_arr[0].length);
  sheet2.getRange(3, 1, transposed_arr.length, transposed_arr[0].length).setValues(transposed_arr);
}

function transpose(matrix) {
  return matrix[0].map((col, i) => matrix.map(row => row[i]));
}

Output:

输出

参考:

数组.concat

设置值

获取值

Ty 这么多,我有一个问题,在这行中我不明白我需要填写什么。 如果我需要填写?

//将每个二维数组连接成一维数组,并用“[]”将一维 arrays 括起来使其成为二维数组。 var arr = [[].concat(...total),[].concat(...daily),[].concat(...portfolio),[].concat(...lastportfolio),[] .concat(...curentstock), [].concat(...laststock),[].concat(...buystock)];

再次,非常感谢! 你是救生员

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM