Google表脚本数组未提供正确的值

时间:2013-11-18 06:17:05

标签: javascript google-apps-script

我一直试图解决这个问题,但似乎无法让它发挥作用。

function Manager() {
var units = new Array(5,9);
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];
var range = sheet.getRange("A1:P16");
var x = 0;
var y = 0;


//Initial Setup
/*for(var i = 1; i <= 2; i = i + 1) {
  units[i*2, 1] = 8+((i*2)-3);
  units[(i*2) + 1, 1] = 8+((i*2)-3)*5;

  units[i*2, 2] = 8+((i*2)-3)*(-1);
  units[(i*2) + 1, 2] = 8+((i*2)-3)*5;

  units[i*2, 3] = 8;
  units[(i*2) + 1, 3] = 8+((i*2)-3)*5;

  units[i*2, 4] = 8;
  units[(i*2) + 1, 4] = 8+((i*2)-3)*6;

  units[i*2, 5] = 8+((i*2)-3)*(2);
  units[(i*2) + 1, 5] = 8+((i*2)-3)*7;

  units[i*2, 6] = 8+((i*2)-3)*(4);
  units[(i*2) + 1, 6] = 8+((i*2)-3)*7;

  units[i*2, 7] = 8+((i*2)-3)*(-4);
  units[(i*2) + 1, 7] = 8+((i*2)-3)*7;

  units[i*2, 8] = 8+((i*2)-3)*(-2);
  units[(i*2) + 1, 8] = 8+((i*2)-3)*7;

  units[i*2, 9] = 8;
  units[(i*2) + 1, 9] = 8+((i*2)-3)*7;
}

for(var i = 1; i <= 9; i = i + 1) {
  units[1,i];
  x = units[3,i];
  y = units[2,i];
  var cell = range.getCell(x,y);    
}

结果应该是数字1到9放置在有点组织的模式中并镜像在9行标记处。例如,单位[3,1]应该是3,单位[2,1]应该是7,但它给出的结果是14和14.总结果在N14中显示3,在O15中显示4,在9中显示P16。我在最后一个“for”循环上尝试了一些调试,前两次1和2也被放置在N14中并被覆盖,P16中的5到9的所有内容也被覆盖。关于为什么最后一个for循环没有实际给出正确坐标的任何想法

1 个答案:

答案 0 :(得分:0)

您似乎尝试创建5x9二维数组,但您尝试使用它的方式在Javascript(Google Apps脚本所基于的)中无效。看看How can I create a two dimensional array in JavaScript?

在整个代码中,数组被不正确地编入索引。指数应该是分开的,例如units[3][1]。当您提供列表时,例如[3,1],最后一项用作索引。这就是你看到14重复的原因。此外,您应该记住,数组从0开始编制索引。

这样的改变会使你的代码操纵一个二维数组:

...
//Initial Setup
var units = new Array();
for(var i = 1; i <= 2; i = i + 1) {
  units[i*2] = new Array();
  units[(i*2) + 1] = new Array();

  units[i*2][1] = 8+((i*2)-3);
  units[(i*2) + 1][1] = 8+((i*2)-3)*5;
  ...

以下是初始设置后调试器中出现units的方式,间隙明显:

Screenshot