我编写了一些脚本,它从电子表格表中读取数组(响应 - 多行和多列),从每行中提取数据到一行或两行(条目),这些行被推入“主”数组,然后将'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 :(得分:0)
在每个数组之后在每个数组中尝试这个:
oneEntry[iCol] = aResponses[iRes][iCol].slice(0);
或者只有一个字符串:
oneEntry[iCol] = aResponses[iRes][iCol].valueOf;
另外,你的问题不是特定的,将数组写入电子表格是非常通用的,并且与你的错误无关,这是由Array 引用引起的而不是 cloning ,你的问题也应该在最小化的同时再现错误。