2014-12-23 93 views
0

我已经编写了一些脚本,用于从电子表格表中读取数组(响应 - 多行和多列),将数据从每行提取到一行或两行(条目)中一个'main'数组,然后将'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) 

} 
+0

尝试将循环值更改为:for(iRes = 0; iRes <= numResponses; iRes ++) – KRR

+0

感谢KRR,但这只是试图读取数组aResponses的末尾。 – peterjim

回答

0

在每个阵列试试这个每个等号后:

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

,或者如果只有一个串:

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

而且,你的问题是不特定的,书写一个数组的电子表格是一个非常普通的一个,并没有任何与你的错误,至极由阵列参考而不是克隆,你的问题引起的也应该尽量减少,同时仍然重现错误。

+0

Kriggs,感谢您的评论 - “引用而不是克隆”让我能够解决问题。错误在于当推送数组时使用.valueOf()而不是.slice()。 – peterjim

相关问题