为什么谷歌应用程序脚本'copyTo'范围方法填0?

时间:2014-10-14 10:44:52

标签: google-apps-script google-sheets google-spreadsheet-api

考虑以下代码:

/**********************************************************************************************
 **  FUNCTION : CarryToThisWeek                                                              **
 **  PARAM    : String lastWeekName, String thisWeekName                                     **
 **  RETUEN   : VOID                                                                         **
 **  DESC     : Copies the carry row of sheet named lastWeekName to B/F row of sheet named   **
 **             thisWeekName.                                                                **
 **********************************************************************************************/

function CarryToThisWeek(lastWeekName,thisWeekName){
  var spreadSheet=SpreadsheetApp.getActiveSpreadsheet();
  var lastSheet=spreadSheet.getSheetByName('Oct_06'); // hard-coded the names for testing
  var thisSheet=spreadSheet.getSheetByName('Oct_13');
  var sourceData = lastSheet.getRange(38, 4, 1, 7);
  Logger.log(sourceData.getValues()); //shows the correct values
  var destination = thisSheet.getRange(33, 4, 1, 7);
  sourceData.copyTo(destination); //fills with 0 <<<<<
  //following loop works fine
  /*for(col=4;col<=10;col++){
    thisSheet.getRange(33, col).setValue(lastSheet.getRange(38, col).getValue());
  }*/
}

我对谷歌应用程序脚本相当新,但我之前在其他地方成功使用过copyTo方法。

我担心我会遗漏一些非常愚蠢的东西。

有人可以指出我做错了什么吗?

2 个答案:

答案 0 :(得分:0)

试试这个:

function CarryToThisWeek(lastWeekName,thisWeekName){
  var spreadSheet = SpreadsheetApp.getActiveSpreadsheet();
  var lastSheet = spreadSheet.getSheetByName('Oct_06'); 
  var thisSheet = spreadSheet.getSheetByName('Oct_13');
  var sourceData = lastSheet.getRange(38, 4, 1, 7).getValues();
  thisSheet.getRange(33, 4, 1, 7).setValues(sourceData);
}

答案 1 :(得分:0)

好吧,我知道了。

感谢Vasim提出要点 确实sourceData 是一个公式字段,公式一直在被复制

将其更改为

sourceData.copyTo(destination,{contentsOnly:true});

它按预期工作。

我认为copyValuesToRange()也可以。