Google 工作表脚本未输出到数据表

Google Sheets Script Not Outputting to Datasheet

我目前遇到这个基本上只是复制和粘贴输入数据的简单脚本的问题。 由于某种原因,该函数将值输入到“销售日志”选项卡而不是“支付日志”选项卡。我不精通任何形式的编码,因此非常感谢您的帮助!

function submit() {
  var ss        = SpreadsheetApp.getActiveSpreadsheet();
  var formSS    = ss.getSheetByName("Food Sales");
  var datasheet = ss.getSheetByName("Pay Log");
  var datasheet = ss.getSheetByName("Sales Log");
  
  var values = [[formSS.getRange("E10").getValue(),
                 formSS.getRange("E11").getValue(),
                 formSS.getRange("E12").getValue()]];
                
  
  datasheet.getRange(datasheet.getLastRow()+1, 1, 1, 3).setValues(values);
 
}

这是因为您对两个不同的 sheet 使用相同的变量 dataSheet。 在行 var datasheet = ss.getSheetByName("Pay Log"); 上,您在数据 sheet 上分配了 Pay Log sheet,但随后将其替换为 Sales Log sheet 在下一行 var datasheet = ss.getSheetByName("Sales Log");

您可以做的是在粘贴之前为两个 sheet 创建和分配不同的变量。简单的方法是通过下面的代码。

function submit() {
  var ss        = SpreadsheetApp.getActiveSpreadsheet();
  var formSS    = ss.getSheetByName("Food Sales");
  var datasheet1 = ss.getSheetByName("Pay Log");
  var datasheet2 = ss.getSheetByName("Sales Log");
  

  var values = [[formSS.getRange("E10").getValue(),
             formSS.getRange("E11").getValue(),
             formSS.getRange("E12").getValue()]];
            

 datasheet1.getRange(datasheet1.getLastRow()+1, 1, 1, 3).setValues(values);
 datasheet2.getRange(datasheet2.getLastRow()+1, 1, 1, 3).setValues(values);

}

或者如果您有更多 sheet 可以粘贴您的数据,您可以使用 getSheets() 函数,它将 return 一个包含所有 sheet 的数组]s。然后,您可以从第二个 sheet 开始循环遍历 sheet。下面的示例代码

function submit() {
  var ss        = SpreadsheetApp.getActiveSpreadsheet();
  var formSS    = ss.getSheetByName("Food Sales");
  var dataSheet = ss.getSheets();

  var values = [[formSS.getRange("E10").getValue(),
             formSS.getRange("E11").getValue(),
             formSS.getRange("E12").getValue()]];

  for (i = 1; i < dataSheet.length; i++){
    dataSheet[i].getRange(dataSheet[i].getLastRow()+1, 1, 1, 3).setValues(values);
    };

 };

使用 getValues

function submit() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var formSS = ss.getSheetByName("Food Sales");
  var datasheet1 = ss.getSheetByName("Pay Log");
  var datasheet2 = ss.getSheetByName("Sales Log");
  var values = formSS.getRange(10, 5, 3).getValues();//getValues()
  datasheet1.getRange(datasheet1.getLastRow() + 1, 1, 1, 3).setValues(values);
  datasheet2.getRange(datasheet2.getLastRow() + 1, 1, 1, 3).setValues(values);
}