我尝试了这段代码,但执行时没有出现结果:
function test() {
var ss = SpreadsheetApp.openById("XXXX");
var s = SpreadsheetApp.openById("XXXX");
var sheet = ss.getSheetByName('iGV');
var sheete = s.getSheetByName('Sheet1');
var rangee = sheete.getRange("A1:F7");
var values = sheet.getRange("F11:F17").getValues();
for (var i = 0; i<values.length;i++){
for(var j=0;i<rangee.length;j++){
rangee [i][1]=values[1][j];}}}
答案 0 :(得分:2)
这是一个简单的转置:
function myTranspose(A) {
var B=[];
for(var i=0;i<A[0].length;i++){
B[i]=[];
for(var j=0;j<A.length;j++){
B[i][j]=A[j][i];
}
}
return B;
}
您可以使用以下内容进行设置:
function testTranspose(){
var ss=SpreadsheetApp.getActive();
var sh=ss.getActiveSheet();
var rg=sh.getRange('C1:C8');
var vA=rg.getValues();
var vB=myTranspose(vA);//vA is the value array for the range you want to transpose
sh.getRange(1,sh.getLastColumn()+2,vB.length,vB[0].length).setValues(vB);
}
答案 1 :(得分:2)
不是一次设置一个单元格,而是创建嵌套数组,然后立即设置整个范围会更有效。 setValues()需要一个嵌套数组,外部数组是行,内部数组是列。因此,此测试代码采用&#34; A1:A10&#34;中的值。并将它们放入&#34; B1:K1&#34;。
function columnToRow() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var values = sheet.getRange("a1:a10").getValues();
var rowValues = [[]]; //create an array within an array. Outter array is the row. Inner array are the columns.
for (i = 0; i<values.length; i++) {
rowValues[0].push(values[i][0]); //push the values to the inner array (columns array)
}
var setRange = sheet.getRange(1, 2, 1, rowValues[0].length) //(row, column, numRows, numColumns)
setRange.setValues(rowValues);
}
答案 2 :(得分:1)
我认为有一个更简单的内置解决方案(见下文)。只需在copyTo()方法中将'transposed'设置为'true':
var ss = SpreadsheetApp.getActive();
var sourceSheet = ss.getSheetByName('sourceSheet');
var targetSheet = ss.getSheetByName('targetSheet');
var sourceRange = sourceSheet.getRange(1, 1, sourceSheet.getLastRow(), 1);
var values = sourceRange.getValues();
var targetRange = targetSheet.getRange(1, 1, 1, values[0].length);
sourceRange.copyTo(targetRange, SpreadsheetApp.CopyPasteType.PASTE_VALUES, true);