我写了一些脚本,从电子表格中读取一个数组(响应的数组-多行和多列),从每一行提取数据到一行或两行(条目),这些行(条目)被推入'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)
}
发布于 2014-12-26 19:46:20
在每个等于之后的每个数组中尝试此方法:
oneEntry[iCol] = aResponses[iRes][iCol].slice(0);
或者,如果只有一个字符串:
oneEntry[iCol] = aResponses[iRes][iCol].valueOf;
另外,你的问题并不具体,将数组写到电子表格中是一个非常通用的问题,与你的错误无关,这是由数组引用而不是克隆引起的,你的问题也应该在复制错误的同时最小化。
https://stackoverflow.com/questions/27625271
复制相似问题