将数组写入电子表格

时间:2014-12-23 17:33:24

标签: javascript arrays google-apps-script google-sheets

我编写了一些脚本,它从电子表格表中读取数组(响应 - 多行和多列),从每行中提取数据到一行或两行(条目),这些行被推入“主”数组,然后将'main'数组写入另一个工作表。响应的每一行可以包含一个或两个条目 - 由标记值显示。

除了只将最后一个条目粘贴到第二个工作表上时,才能正常工作。

某处我没有将每个对象的值放入Entry数组,只是对值的引用,但是看不出我出错的地方。

电子表格是 https://docs.google.com/spreadsheets/d/1x-HO7KIAQ_s7q55opTd2LRpRRo95S1CqeH193RalWS0/pubhtml

我的脚本如下:

function transferResponses() {
// establish sheets
  var aFile = SpreadsheetApp.getActiveSpreadsheet();
  var aResponseSh = aFile.getSheetByName("Form responses 1");
  var aBaseSh = aFile.getSheetByName("Base");

// check number of response
  var numResponses = aResponseSh.getLastRow() - 1;
// put responses in an array
  var aResponses = aResponseSh.getSheetValues(2, 1, numResponses, 23);

// define other variables to use
  var oneEntry = [];      // array for a single entry
  var aEntries = [];      // array of all entries
  var aNumber;            // increment part of ID

// counters, etc
  var iRes;
  var iCol;
  var iEntry = 0;

  for (iRes = 0; iRes < numResponses; iRes++) {    
    aNumber = iEntry + 101;
    oneEntry[0] = "A" + aNumber.toString();        // form and load entry ID
    for (iCol = 1; iCol < 12; iCol++) {            // load name, surname, address 1, address 2,     phone, email
      oneEntry[iCol] = aResponses[iRes][iCol];     //   and first entry title, classification,     size, description, price
    }
    oneEntry[12] = aResponses[iRes][18];           // load novice status
    oneEntry[13] = aResponses[iRes][21];           // load date of entry
    oneEntry[14] = aResponses[iRes][22];           // load method of payment

    aEntries.push(oneEntry.valueOf());             // push entry (oneEntry) into main aray     (aEntries)

    iEntry = iEntry + 1;                           // increment single entry counter

    if (aResponses[iRes][12] === "Add another entry") {     // check for a second entry on     response
      aNumber = iEntry + 101;
      oneEntry[0] = "A" + aNumber.toString();        // form and load entry ID
      for (iCol = 1; iCol < 7; iCol++) {             // load name, surname, address 1, address 2,     phone, email
        oneEntry[iCol] = aResponses[iRes][iCol];     //   and first entry title, classification,     size, description, price
      }
      for (iCol = 7; iCol < 12; iCol++) {            //   and second entry title, classification,     size, description, price
        oneEntry[iCol] = aResponses[iRes][iCol + 6];
      }
      oneEntry[12] = aResponses[iRes][18];           // load novice status
      oneEntry[13] = aResponses[iRes][21];           // load date of entry
      oneEntry[14] = aResponses[iRes][22];           // load method of payment

      aEntries.push(oneEntry.valueOf());             // push entry (oneEntry) into main aray     (aEntries)

      iEntry = iEntry + 1;                           // increment single entry counter
    }
  } 

  lastRow = aBaseSh.getLastRow();
  if (lastRow > 1) {                             // clear all existing data on base sheet
    aBaseSh.deleteRows(2, lastRow);
  }

  aBaseSh.getRange(2, 1, aEntries.length, aEntries[0].length).setValues(aEntries);    // paste     main array (aEntries)

}

1 个答案:

答案 0 :(得分:0)

在每个数组之后在每个数组中尝试这个:

oneEntry[iCol] = aResponses[iRes][iCol].slice(0);

或者只有一个字符串:

oneEntry[iCol] = aResponses[iRes][iCol].valueOf;

另外,你的问题不是特定的,将数组写入电子表格是非常通用的,并且与你的错误无关,这是由Array 引用引起的而不是 cloning ,你的问题也应该在最小化的同时再现错误。