我要从特定列复制值,然后将它们以转置方式粘贴到第一列中,因此,如果a垂直输入3个值,则将它们水平粘贴到下一个可用行中。
我使用了appendRow函数,但将值粘贴在源值下方,而不是在目标标头之后。
使用此代码后,我得到以下信息:,但是没有将值粘贴到第一行(标题)之后
function transpose(sh) {
var arrayThisRow,cellValue,i,j,lastCol,lastrow,numrows,pastesheet,
rowrange,rowValues,sh;
sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("test");
pastesheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("test");
lastrow = sh.getLastRow();
lastCol = sh.getLastColumn();
Logger.log('lastCol: ' + lastCol);
numrows = lastrow;
arrayThisRow = [];
for(i=1; i<= numrows; i++) {
//Logger.log(i);
rowrange = sh.getRange(i,4,2,lastCol);
//Logger.log(rowrange);
rowValues = rowrange.getValues();//
rowValues = rowValues[1];//There is only 1 inner array
for(j=0; j <= lastCol; j++) {
cellValue = rowValues[j];
if (cellValue) {
arrayThisRow.push(cellValue);
} else {
break;//Stop pushing values into the array as soon as a blank cell is found
}
}
}
Logger.log('arrayThisRow: ' + arrayThisRow)
if (arrayThisRow.length > 0) {
pastesheet.appendRow(arrayThisRow)
}
}
答案 0 :(得分:0)
我不确定您要在这里完成什么。
如果在您的示例中输入了三个以上的值,您是否希望第4、5和6th个值位于第二行?换句话说,您是否希望每行专门粘贴3个值?
编辑:
此功能可以解决问题。它不是最漂亮的代码,但是应该完成工作。还有很多其他方法可以创建对象,但这就是我写它时自然想到的方法:)
function myFunction() {
//Get values of all nonEmpty cells
var ss = SpreadsheetApp.getActiveSheet();
var values = ss.getRange("D:D").getValues().filter(String);
//Create object with 3 columns max
var pasteValues = [];
var row = ["","",""];
for (i = 1; i<values.length+1; i++){
row.splice((i%3)-1,1,values[i-1]);
if(i%3 == 0){
pasteValues.push(row);
var row = ["","",""]
}
}
if(row != []){
pasteValues.push(row)
}
//Paste the object in columns A to C
ss.getRange(1,1,pasteValues.length,pasteValues[0].length).setValues(pasteValues);
}