0

我只是不明白这个。我只是想将值从一个单元格复制到同一行中的另一个单元格。简单吧?好吧,它用值填充每个单元格(右侧),而不仅仅是一个单元格。我为此绞尽脑汁,我想我只是不明白一些事情。

/* 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("No Number");" 做了它所做的。它得到一个单元格的值就好了。那么为什么在世界上相同的代码(除了设置而不是获取)会导致整行被设置为每个单元格中的值?我对为什么我的第二次尝试给出相同(错误)的结果感到困惑。我不明白的是什么?

谢谢

4

1 回答 1

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,则返回的偏移范围将与初始范围具有相同的大小,否则将调整返回的 Range 的大小。

于 2012-11-17T09:18:35.833 回答