用于获取某些值的Google脚本以及一些公式

时间:2015-02-12 22:14:04

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

我正在制作一张能够将数据从一张纸转移到另一张纸上的纸张。我已经操纵了我发现的另一个脚本并且它工作得很好。直到我需要将一些单元格作为值,而某些单元格作为公式。

我需要Col A-Col D作为" getValues" 我需要Col E-Col Q作为" getFormulas"

以下是正在运作的公式:

function Copy(){
  var origSheetObject = SpreadsheetApp.openById('Key1').getSheetByName('Daily Log');
  var destSheetObject = SpreadsheetApp.openById('Key2').getSheetByName('Imported Data');
  var origLastCol = origSheetObject.getLastColumn();
  var arrOrigData = origSheetObject.getRange (6, 1, 1, 17).getFormulas();       
  var destlastRow = destSheetObject.getLastRow()+1;
  var cont;
  for (cont = 0; cont <origLastCol; cont++)
    destSheetObject.getRange(destlastRow, 1+cont).setValue(arrOrigData[0][cont]);

我知道如果我要将getFormula更改为getValue,我只得到值而不是我需要看到的公式。这是我尝试过的,但不正确:

function Copy(){
  var origSheetObject = SpreadsheetApp.openById('Key1').getSheetByName('Daily Log');
  var destSheetObject = SpreadsheetApp.openById('Key2').getSheetByName('Imported Data');
  var origLastCol = origSheetObject.getLastColumn();
  var arrOrigData = origSheetObject.getRange (6, 1, 1, 4).getValues();
                    origSheetObject.getRange (6, 5, 1, 13).getFormulas();       
  var destlastRow = destSheetObject.getLastRow()+1;
  var cont;
  for (cont = 0; cont <origLastCol; cont++)
    destSheetObject.getRange(destlastRow, 1+cont).setValue(arrOrigData[0][cont]);

我不知道如何让它让我沿着同一行拉取值和公式。任何建议都很棒!

2 个答案:

答案 0 :(得分:0)

获取不同变量中的值和公式,然后通过公式变量进行迭代,如果有公式,则将该公式保存到原始变量中,如下所示:

var arrOrigData = origSheetObject.getRange(1, 1, 1, 17).getValues();
var arrOrigForm = origSheetObject.getRange(1, 1, 1, 17).getFormulas();

for( lin in arrOrigForm )
  for( col in arrOrigForm[ lin ] )
    if( arrOrigForm[ lin ][ col ] != "" )
      arrOrigData [ lin ][ col ] = arrOrigForm[ lin ][ col ];

您可以将其保存为新功能,如此

function getValuesAndFormulas( A1Range ){
  var arrOrigData = origSheetObject.getRange( A1Range ).getValues();
  var arrOrigForm = origSheetObject.getRange( A1Range ).getFormulas();

  for( lin in arrOrigForm )
    for( col in arrOrigForm[ lin ] )
      if( arrOrigForm[ lin ][ col ] != "" )
        arrOrigData [ lin ][ col ] = arrOrigForm[ lin ][ col ];

  return arrOrigData;
}

只有这样才能使它成为一个人。

答案 1 :(得分:0)

function Copy(){
   var origSheetObject = SpreadsheetApp.openById('Key1').getSheetByName('Daily Log');
   var destSheetObject = SpreadsheetApp.openById('Key2').getSheetByName('Imported Data');
   var origLastCol = origSheetObject.getLastColumn();
   var arrOrigData = origSheetObject.getRange(1, 1, 1, 17).getValues();
   var arrOrigForm = origSheetObject.getRange(1, 1, 1, 17).getFormulas();

   for( lin in arrOrigForm )
     for( col in arrOrigForm[ i ] )
       if( arrOrigForm[ lin ][ col ] != "" )
         arrOrigData [ lin ][ col ] = arrOrigForm[ lin ][ col ];      

   var destlastRow = destSheetObject.getLastRow()+1;
   var cont;
     for (cont = 0; cont <origLastCol; cont++)
         destSheetObject.getRange(destlastRow, 1+cont).setValue(arrOrigData[0][cont]);
 }

这就是我根据你的信息把goether放的东西。我非常愿意意识到我没有做到这一点。如果您可以编辑此代码并向我展示它看起来应该完成的内容,那么我应该能够解决我的错误,并了解我现在无法做到的事情。再次感谢您帮助我。