我已经编写了一些脚本,用于从电子表格表中读取数组(响应 - 多行和多列),将数据从每行提取到一行或两行(条目)中一个'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)
}
尝试将循环值更改为:for(iRes = 0; iRes <= numResponses; iRes ++) – KRR
感谢KRR,但这只是试图读取数组aResponses的末尾。 – peterjim