Google apps script 获取一些值和一些公式的Google脚本

Google apps script 获取一些值和一些公式的Google脚本,google-apps-script,google-sheets,google-spreadsheet-api,Google Apps Script,Google Sheets,Google Spreadsheet Api,我正在制作一张工作表,将数据从一张工作表传输到另一张工作表。我操纵了另一个我发现的脚本,它运行得很好。直到我需要得到一些单元格作为值,一些作为公式 我需要A-D列作为GetValue 我需要列E-列Q作为计算公式 以下是有效的公式: function Copy(){ var origSheetObject = SpreadsheetApp.openById('Key1').getSheetByName('Daily Log'); var destSheetObject = Spreads

我正在制作一张工作表,将数据从一张工作表传输到另一张工作表。我操纵了另一个我发现的脚本,它运行得很好。直到我需要得到一些单元格作为值,一些作为公式

我需要A-D列作为GetValue 我需要列E-列Q作为计算公式

以下是有效的公式:

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]);

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

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

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;
}
唯一能让它成为单行线的方法

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的结论。我很乐意意识到我做得不对。如果你可以编辑这段代码,并告诉我它应该是什么样子,我应该能够通过我的错误工作的方式,了解我现在不能做什么。再次感谢你帮我做这件事

您应该这样将其分配给变量:var arrOrigData=origSheetObject.getRange 6,1,1,4.getValues;var arrorigformula=origSheetObject.getRange 6,5,1,13.getFormulas;我理解以这种方式分配该变量的过程,但我如何要求它在destSheetObject中将它们合并为一行kriggs,我非常感谢您的帮助。这类东西我做不到。我刚刚开始编码,试图实现这一改变让我发疯!我试图添加您的第一组建议代码,但得到一个错误ReferenceError:I未定义。你能帮我弄清楚我需要在那个地方放什么吗?根据您的反馈,我已将我不打算使用的代码作为单独的答案包含在内。第二个代码中缺少了一个I,它应该是arrOrigForm[lin]。您可以更新初始问题或对新代码进行注释,但将新问题作为答案并不实际,您可以将其删除。