【问题标题】:setValue() sets entire row not one cellsetValue() 设置整行不是一个单元格
【发布时间】:2012-11-22 00:42:09
【问题描述】:

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

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

谢谢

【问题讨论】:

    标签: google-apps-script google-sheets


    【解决方案1】:
    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 已调整大小。

    【讨论】:

    • 我在发布之前阅读了好几遍文档。我明白了一些,但显然不是全部。不过,您的解释为这个主题提供了很多启示。现在我明白了为什么 setValue() 会这样做,但突然之间 getValue() 让我摸不着头脑,为什么它确实有效。根据您所说的,我认为也使用 offset() 的 getValue() 将获得一行值,而不仅仅是一个单元格。也许这实际上就是它正在做的事情,而我根本没有注意到它,因为右侧的所有单元格当前都是空白的?
    • 或者我只是没有正确访问它以查看它(最终将)加载的所有值,并且我有一个内置的错误等着咬我?
    • 据我了解,如果您将 getValue() 应用于大于一个单元格的范围,它只会获得左上角的值。如果您的用例要求您获取某个范围内的所有值,则应使用 getValues()。
    • 不,它正在做我需要做的事情,它只是让我感到困惑,为什么几乎完全相同的代码适用于 get,但不适用于 set。现在我明白了。谢谢!!!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-04
    • 2016-11-03
    • 1970-01-01
    • 2017-07-25
    • 1970-01-01
    • 2019-08-03
    相关资源
    最近更新 更多