如何将数组转换为Google表格的矩阵

时间:2018-02-21 23:04:30

标签: javascript arrays object google-apps-script

嗨我有一个我需要转换成二维数组的数组,所以我可以将数组值设置为google工作表文档。

本质上,我需要将数组[a,b,c,d,e,f]转换为矩阵[[" a"],[" b"] [" C"],[" d"],[" E"],[" F"]]。我尝试过使用for循环来推动[\" +元素+ \"]围绕每个元素。但是,运行脚本时仍会收到错误消息。 "无法将数组转换为对象[] []。"

请帮忙!

// function pastValues should past 6 columns each comprised of a,b,c,d,e,f. Each letter is in its own cell.
function pasteValues() {
  var sheet1 = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();

  var array = ["a","b","c","d","e","f"];
  for(var i=1; i < array.length; i++) {
    array = toMatrix(array);
    sheet1.getRange(2, i, 6, 1).setValues(array)
  }

}

// convert array [a,b,c,d,e,f] into matrix [[a],[b],[c],[d],[e],[f]] so it can be set into newShceduleSheet.
function toMatrix(arr){
var newMatrix = [];
  for (var i=0; i<arr.length; i++) {
  newMatrix.push("[\"" + arr[i] + "\"]");
  }
  return newMatrix;
}

1 个答案:

答案 0 :(得分:3)

这次修改怎么样?

修改要点:

  • 在您的脚本中,"[\"" + arr[i] + "\"]"成为字符串。
    • 您可以使用[arr[i]]
  • 您可以将array = toMatrix(array);置于for循环之外。

修改后的脚本:

// function pastValues should past 6 columns each comprised of a,b,c,d,e,f. Each letter is in its own cell.
function pasteValues() {
  var sheet1 = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();

  var array = ["a","b","c","d","e","f"];
  array = toMatrix(array);
  for(var i=1; i < array.length; i++) {
    sheet1.getRange(2, i, 6, 1).setValues(array);
  }
}

// convert array [a,b,c,d,e,f] into matrix [[a],[b],[c],[d],[e],[f]] so it can be set into newShceduleSheet.
function toMatrix(arr){
  var newMatrix = [];
  for (var i=0; i<arr.length; i++) {
    newMatrix.push([arr[i]]);
  }
  return newMatrix;
}

其他模式:

您还可以使用array转换map()

function pasteValues() {
  var sheet1 = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var array = ["a","b","c","d","e","f"];
  array = array.map(function(e){return [e]});
  for(var i=1; i < array.length; i++) {
    sheet1.getRange(2, i, 6, 1).setValues(array);
  }
}

如果我误解了你的问题,请告诉我。我想修改一下。

编辑:

我不确定这是否是你想要的。如果我的理解是正确的,那怎么样?在此示例脚本中,您可以使用所需的数组。例如,您可以使用["a","b","c"]["a","b","c","d","e","f","g","h"]。该数组已转置,并从A列插入。您可以在var n = array.length;设置份数。默认值是数组的长度。

function pasteValues() {
  var sheet1 = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var array = ["a","b","c","d","e","f"];
  array = array.map(function(e){return [e]});

  var n = array.length; // Please input the number of columns that you want to copy.
  for (var i = 1; i <= n; i++) {
    sheet1.getRange(2, i, array.length, array[0].length).setValues(array);
  }
}