2012-11-17 19 views
0

我只是沒有得到這個。我只是想將一個單元格的值複製到同一行的另一個單元格中。簡單的權利?那麼,它會用值而不是一個單元格填充每個單元格(向右)。我已經絞盡腦汁想到了這一點,我想我只是沒有理解一些東西。setValue()設置整行不是一個單元

/* This gets the entire sheet (range) doesn't it? */ 
var range = SpreadsheetApp.getActiveSheet().getDataRange(); 
var rowRange ; 
var status ; 
var notes ; 

var i=981; 
var theEnd=979; 


    for (; i > theEnd; i--) { 
    rowRange = range.offset(i, 0, 1); // Doesn't this specify one row (range) ? 
    status = rowRange.offset(0, statusColumnOffset).getValue(); // one cell, right? 
    notes = rowRange.offset(0, notesColumnOffset).getValue(); 

    /* it gets the correct value for notes */ 
    if (notes == "No Number") { 
// copy notes cell to status cell 
/* I've tried both this (first attempt): */  
     //rowRange.offset(0, statusColumnOffset).setValue("No Number"); 

/* and this (second attempt): */ 
     statusCell = rowRange.offset(0, statusColumnOffset); 
     statusCell.setValue("No Number"); 
/* both give the same results */ 

    } 

現在我困惑,爲什麼我的第一次嘗試 「rowRange.offset(0,statusColumnOffset).setValue(」 無號碼 「);」做了它做的。它獲得了一個細胞的價值就好了。那麼爲什麼在這個世界上,相同的代碼(除了設置而不是獲取)會導致整行被設置爲每個單元中的值?我同樣困惑,爲什麼我的第二次嘗試給出了相同(錯誤)的結果。我不懂的是什麼?

謝謝

回答

2
rowRange = range.offset(i, 0, 1); // Doesn't this specify one row (range) ? 

是的是的話,那就是一樣寬的片填充列數的範圍。所以這個:

statusCell = rowRange.offset(0, statusColumnOffset); 

將一樣寬。我相信你會需要使用:

statusCell = rowRange.offset(0, statusColumnOffset, 1, 1); 

https://developers.google.com/apps-script/class_range#offset

如果沒有指定可選numRows行和numColumns列的,返回將有大小爲初始範圍相同偏移 範圍內,否則 的返回的範圍被調整大小。

+0

我在發佈前多次閱讀文檔。我明白其中的一些,但顯然不是全部。儘管如此,你的解釋爲這個問題減輕了一大堆問題。現在我明白爲什麼setValue()會執行它的功能,但突然getValue()讓我撓頭,爲什麼它實際上工作。根據你所說的,我會認爲getValue()也使用offset()會得到一行值而不是一個單元格。也許這實際上是它在做什麼,我根本沒有注意到它,因爲右邊的所有單元格都是空白的?

+0

或者也許我只是沒有正確地訪問它,看到它(最終會被)加載的所有值,我有一個內置的bug等着咬我? –

+0

據我瞭解,如果您將getValue()應用於大於一個單元格的範圍,它將只會得到左上角的值。如果您的用例要求您獲取某個範圍內的所有值,則應該使用getValues()。 – AdamL

相關問題