Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 慢存档谷歌应用程序脚本_Performance_Google Apps Script_Optimization_Google Sheets - Fatal编程技术网

Performance 慢存档谷歌应用程序脚本

Performance 慢存档谷歌应用程序脚本,performance,google-apps-script,optimization,google-sheets,Performance,Google Apps Script,Optimization,Google Sheets,我正在做一份财务跟踪表,并且已经完成了它的输入部分,并且工作得很好。问题是,在大多数情况下,它一行一行地运行,速度非常慢。除了大量的代码外,我不知道如何加快速度或将任何东西批处理在一起。此外,所讨论的函数的开头和结尾的大括号没有连接(当光标靠近它们时,它们都是红色的),这我不理解。有人能帮我清理一下代码以加快速度吗? 以下是所讨论的功能: function onClickSubmit(e) { var wkbk = SpreadsheetApp.getActiveSpreadsheet();

我正在做一份财务跟踪表,并且已经完成了它的输入部分,并且工作得很好。问题是,在大多数情况下,它一行一行地运行,速度非常慢。除了大量的代码外,我不知道如何加快速度或将任何东西批处理在一起。此外,所讨论的函数的开头和结尾的大括号没有连接(当光标靠近它们时,它们都是红色的),这我不理解。有人能帮我清理一下代码以加快速度吗? 以下是所讨论的功能:

function onClickSubmit(e) {
  var wkbk = SpreadsheetApp.getActiveSpreadsheet();
  var ss = wkbk.getSheetByName("Entry");

  //Bank Details Move
    var bankDeposit = ss.getRange(3,9).getValue();
    var bankWithdrawal = ss.getRange(3,10).getValue();
    var bankDate = ss.getRange(3,12).getValue();
    var targetSheet = wkbk.getSheetByName("BANK DS");
  if(bankDate != ""){
    //Finds first blank cell in column A, to enter new data in:
    var Avals = targetSheet.getRange("A1:A").getValues();
    var targetRow = Avals.filter(String).length + 1;
    var values = ss.getRange("A:A").getValues();
    var bankAmt = (bankDeposit - bankWithdrawal);
    var bankDetail = [[bankDate, bankAmt]];
    targetSheet.getRange(targetRow,1,1,2).setValues(bankDetail);
    targetSheet.getRange(targetRow-1,3).copyTo(targetSheet.getRange(targetRow,3));
    ss.getRange(3,9,1,4).clearContent();
  }
  //Work Chits Move
    var work1Hours = ss.getRange(5,9).getValue();
    var work1Job = ss.getRange(5,10).getValue();
    var work1Rate = ss.getRange(5,11).getValue();
    var work1Date = ss.getRange(5,12).getValue();
    var targetSheet = wkbk.getSheetByName("WORK DS");
  if(work1Date != ""){
    //Finds first blank cell in column A, to enter new data in:
    var Avals = targetSheet.getRange("A1:A").getValues();
    var targetRow = Avals.filter(String).length + 1;
    var values = ss.getRange("A:A").getValues();
    var work1Detail = [[work1Date,work1Job,work1Hours,work1Rate]];
    targetSheet.getRange(targetRow,1,1,4).setValues(work1Detail);
    targetSheet.getRange(targetRow-1,5,1,3).copyTo(targetSheet.getRange(targetRow,5,1,3));
    ss.getRange(5,9,1,4).clearContent();
  }
  var work2Hours = ss.getRange(6,9).getValue();
    var work2Job = ss.getRange(6,10).getValue();
    var work2Rate = ss.getRange(6,11).getValue();
    var work2Date = ss.getRange(6,12).getValue();
    var targetSheet = wkbk.getSheetByName("WORK DS");
  if(work2Date != ""){
    //Finds first blank cell in column A, to enter new data in:
    var Avals = targetSheet.getRange("A1:A").getValues();
    var targetRow = Avals.filter(String).length + 1;
    var values = ss.getRange("A:A").getValues();
    var work2Detail = [[work2Date,work2Job,work2Hours,work2Rate]];
    targetSheet.getRange(targetRow,1,1,4).setValues(work2Detail);
    targetSheet.getRange(targetRow-1,5,1,3).copyTo(targetSheet.getRange(targetRow,5,1,3));
    ss.getRange(6,9,1,4).clearContent();
  }
    var work3Hours = ss.getRange(7,9).getValue();
    var work3Job = ss.getRange(7,10).getValue();
    var work3Rate = ss.getRange(7,11).getValue();
    var work3Date = ss.getRange(7,12).getValue();
    var targetSheet = wkbk.getSheetByName("WORK DS");
  if(work3Date != ""){
    //Finds first blank cell in column A, to enter new data in:
    var Avals = targetSheet.getRange("A1:A").getValues();
    var targetRow = Avals.filter(String).length + 1;
    var values = ss.getRange("A:A").getValues();
    var work3Detail = [[work3Date,work3Job,work3Hours,work3Rate]];
    targetSheet.getRange(targetRow,1,1,4).setValues(work3Detail);
    targetSheet.getRange(targetRow-1,5,1,3).copyTo(targetSheet.getRange(targetRow,5,1,3));
    ss.getRange(7,9,1,4).clearContent();
  }

  //Receipts Move
  var i = 9
  var reDate = ss.getRange(i,12).getValue()
  var targetSheet = wkbk.getSheetByName("RECEIPTS DS");
  if (reDate !=""){
  while (reDate !="") {
    var reAmt = ss.getRange(i,9).getValue();
    var rePlace = ss.getRange(i,10).getValue();
    var reCat = ss.getRange(i,11).getValue();
    var reDate = ss.getRange(i,12).getValue();
    //Finds first blank cell in column A, to enter new data in:
    var Avals = targetSheet.getRange("A1:A").getValues();
    var targetRow = Avals.filter(String).length + 1;
    var values = ss.getRange("A:A").getValues();
    var reDetail = [[reDate,rePlace,reCat,reAmt]];
    targetSheet.getRange(targetRow,1,1,4).setValues(reDetail);
    targetSheet.getRange(targetRow-1,5,1,3).copyTo(targetSheet.getRange(targetRow,5,1,3));
    ss.getRange(i,9,1,4).clearContent();
    i++
  }
  }

  //Safe Move 3, 9, 13 (dates) 3-8, 9-12, 13-18
    var safeDate = ss.getRange(3,6).getValue();
    var targetSheet = wkbk.getSheetByName("SAFE DS");
  for (var i=3;i<9;i++){  
    var safeIn = ss.getRange(i,2).getValue();
    var safeOut = ss.getRange(i,4).getValue();
    var safeCnt = (safeIn - safeOut);
    var safeType = ss.getRange(i,3).getValue();

  if(safeCnt != 0){
    //Finds first blank cell in column A, to enter new data in:
    var Avals = targetSheet.getRange("A1:A").getValues();
    var targetRow = Avals.filter(String).length + 1;
    var values = ss.getRange("A:A").getValues();

    var safeDetail = [[safeDate, safeType,safeCnt]];
    targetSheet.getRange(targetRow,1,1,3).setValues(safeDetail);
//    targetSheet.getRange(targetRow-1,3).copyTo(targetSheet.getRange(targetRow,3));
    ss.getRange(i,2).clearContent();
    ss.getRange(i,4).clearContent();
  }
}
    ss.getRange(3,6).clearContent();
  //Safe Move 9 (rolls) 3-8, 9-12, 13-18
    var safeDate = ss.getRange(9,6).getValue();
    var targetSheet = wkbk.getSheetByName("SAFE DS");
  for (var i=9;i<13;i++){  
    var safeIn = ss.getRange(i,2).getValue();
    var safeOut = ss.getRange(i,4).getValue();
    var safeCnt = (safeIn - safeOut);
    var safeType = ss.getRange(i,3).getValue();

  if(safeCnt != 0){
    //Finds first blank cell in column A, to enter new data in:
    var Avals = targetSheet.getRange("A1:A").getValues();
    var targetRow = Avals.filter(String).length + 1;
    var values = ss.getRange("A:A").getValues();

    var safeDetail = [[safeDate, safeType,safeCnt]];
    targetSheet.getRange(targetRow,1,1,3).setValues(safeDetail);
    ss.getRange(i,2).clearContent();
    ss.getRange(i,4).clearContent();
  }
}
    ss.getRange(9,6).clearContent();
  //Safe Move (loose) 13-18
    var safeDate = ss.getRange(13,6).getValue();
    var targetSheet = wkbk.getSheetByName("SAFE DS");
  for (var i=13;i<19;i++){  
    var safeIn = ss.getRange(i,2).getValue();
    var safeOut = ss.getRange(i,4).getValue();
    var safeCnt = (safeIn - safeOut);
    var safeType = ss.getRange(i,3).getValue();

  if(safeCnt != 0){
    //Finds first blank cell in column A, to enter new data in:
    var Avals = targetSheet.getRange("A1:A").getValues();
    var targetRow = Avals.filter(String).length + 1;
    var values = ss.getRange("A:A").getValues();

    var safeDetail = [[safeDate, safeType,safeCnt]];
    targetSheet.getRange(targetRow,1,1,3).setValues(safeDetail);
    ss.getRange(i,2).clearContent();
    ss.getRange(i,4).clearContent();
  }
}
    ss.getRange(13,6).clearContent();
}
函数onClickSubmit(e){
var wkbk=SpreadsheetApp.getActiveSpreadsheet();
var ss=wkbk.getSheetByName(“条目”);
//银行资料转移
var bankDeposit=ss.getRange(3,9).getValue();
var BankDrawing=ss.getRange(3,10).getValue();
var bankDate=ss.getRange(3,12).getValue();
var targetSheet=wkbk.getSheetByName(“银行DS”);
如果(银行日期!=“”){
//在A列中查找第一个空白单元格,以便在其中输入新数据:
var Avals=targetSheet.getRange(“A1:A”).getValues();
var targetRow=Avals.filter(字符串).length+1;
var values=ss.getRange(“A:A”).getValues();
var bankAmt=(银行存款-银行取款);
var bankDetail=[[bankDate,bankAmt]];
targetSheet.getRange(targetRow,1,1,2).设置值(bankDetail);
targetSheet.getRange(targetRow-1,3).copyTo(targetSheet.getRange(targetRow,3));
ss.getRange(3,9,1,4).clearContent();
}
//搬家
var work1Hours=ss.getRange(5,9).getValue();
var work1Job=ss.getRange(5,10).getValue();
var work1Rate=ss.getRange(5,11).getValue();
var work1Date=ss.getRange(5,12).getValue();
var targetSheet=wkbk.getSheetByName(“工作DS”);
如果(工作日期!=“”){
//在A列中查找第一个空白单元格,以便在其中输入新数据:
var Avals=targetSheet.getRange(“A1:A”).getValues();
var targetRow=Avals.filter(字符串).length+1;
var values=ss.getRange(“A:A”).getValues();
var work1Detail=[[work1Date,work1Job,work1Hours,work1Rate]];
targetSheet.getRange(targetRow,1,1,4).设置值(work1Detail);
targetSheet.getRange(targetRow-1,5,1,3).copyTo(targetSheet.getRange(targetRow,5,1,3));
ss.getRange(5,9,1,4).clearContent();
}
var work2Hours=ss.getRange(6,9).getValue();
var work2Job=ss.getRange(6,10).getValue();
var work2Rate=ss.getRange(6,11).getValue();
var work2Date=ss.getRange(6,12).getValue();
var targetSheet=wkbk.getSheetByName(“工作DS”);
如果(工作日期!=“”){
//在A列中查找第一个空白单元格,以便在其中输入新数据:
var Avals=targetSheet.getRange(“A1:A”).getValues();
var targetRow=Avals.filter(字符串).length+1;
var values=ss.getRange(“A:A”).getValues();
var work2Detail=[[work2Date,work2Job,work2Hours,work2Rate]];
targetSheet.getRange(targetRow,1,1,4).设置值(work2Detail);
targetSheet.getRange(targetRow-1,5,1,3).copyTo(targetSheet.getRange(targetRow,5,1,3));
getRange(6,9,1,4).clearContent();
}
var work3Hours=ss.getRange(7,9).getValue();
var work3Job=ss.getRange(7,10).getValue();
var work3Rate=ss.getRange(7,11).getValue();
var work3Date=ss.getRange(7,12).getValue();
var targetSheet=wkbk.getSheetByName(“工作DS”);
如果(工作日期!=“”){
//在A列中查找第一个空白单元格,以便在其中输入新数据:
var Avals=targetSheet.getRange(“A1:A”).getValues();
var targetRow=Avals.filter(字符串).length+1;
var values=ss.getRange(“A:A”).getValues();
var work3Detail=[[work3Date,work3Job,work3Hours,work3Rate]];
targetSheet.getRange(targetRow,1,1,4).设置值(work3Detail);
targetSheet.getRange(targetRow-1,5,1,3).copyTo(targetSheet.getRange(targetRow,5,1,3));
getRange(7,9,1,4).clearContent();
}
//收据移动
变量i=9
var reDate=ss.getRange(i,12).getValue()
var targetSheet=wkbk.getSheetByName(“收据DS”);
如果(reDate!=“”){
while(reDate!=“”){
var reAmt=ss.getRange(i,9.getValue();
var rePlace=ss.getRange(i,10.getValue();
var reCat=ss.getRange(i,11.getValue();
var reDate=ss.getRange(i,12.getValue();
//在A列中查找第一个空白单元格,以便在其中输入新数据:
var Avals=targetSheet.getRange(“A1:A”).getValues();
var targetRow=Avals.filter(字符串).length+1;
var values=ss.getRange(“A:A”).getValues();
var reDetail=[[reDate,rePlace,reCat,reAmt]];
targetSheet.getRange(targetRow,1,1,4).设置值(reDetail);
targetSheet.getRange(targetRow-1,5,1,3).copyTo(targetSheet.getRange(targetRow,5,1,3));
getRange(i,9,1,4).clearContent();
我++
}
}
//安全移动3,9,13(日期)3-8,9-12,13-18
var safeDate=ss.getRange(3,6).getValue();
var targetSheet=wkbk.getSheetByName(“安全DS”);

对于(var i=3;i,以下是一些建议:

我把我的建议放在代码下面的注释中

一般情况下,避免使用getValue(),而是使用getValues(),因为它会返回一个2D数据数组。请阅读文档并在调试器中查看返回的值,以便真正了解数据的外观:[[row0]、[row1]、[row2]…]

并避免使用A1:A形式的A1符号。改用Sheet.getRange(1,1,Sheet.getLastRow()……)

function onClickSubmit(e) {
  var wkbk = SpreadsheetApp.getActiveSpreadsheet();
  var ss = wkbk.getSheetByName("Entry");
  //Bank Details Move
    var bankDeposit = ss.getRange(3,9).getValue();
    var bankWithdrawal = ss.getRange(3,10).getValue();
    var bankDate = ss.getRange(3,12).getValue();
    var targetSheet = wkbk.getSheetByName("BANK DS");
    //var t=ss.getRange(3,9,1,4).getValues()[0];
    //var bankDeposit = t[0];
    //var bankWithdrawal = t[1];
    //var bankDate = t[3];
    //var targetSheet = wkbk.getSheetByName("BANK DS");
  if(bankDate != ""){
    //Finds first blank cell in column A, to enter new data in:
    var Avals = targetSheet.getRange("A1:A").getValues();//This often returns nulls between data last row and max rows  
    var targetRow = Avals.filter(String).length + 1;
    //var targetRow = targetSheet.getRange(1,1,targetSheet.getLastRow()).getValues().length;
    var values = ss.getRange("A:A").getValues();//Same problem as described above
    var bankAmt = (bankDeposit - bankWithdrawal);
    var bankDetail = [[bankDate, bankAmt]];
    targetSheet.getRange(targetRow,1,1,2).setValues(bankDetail);
    targetSheet.getRange(targetRow-1,3).copyTo(targetSheet.getRange(targetRow,3));
    ss.getRange(3,9,1,4).clearContent();
  }
  //Work Chits Move
    var work1Hours = ss.getRange(5,9).getValue();
    var work1Job = ss.getRange(5,10).getValue();
    var work1Rate = ss.getRange(5,11).getValue();
    var work1Date = ss.getRange(5,12).getValue();
    //try as above to get data all at once
    //var vals=ss.getRange(5,9,1,4).getValues();
    //then use vals[0]...
    var targetSheet = wkbk.getSheetByName("WORK DS");
  if(work1Date != ""){
    //Finds first blank cell in column A, to enter new data in:
    var Avals = targetSheet.getRange("A1:A").getValues();
    var targetRow = Avals.filter(String).length + 1;
    var values = ss.getRange("A:A").getValues();
    var work1Detail = [[work1Date,work1Job,work1Hours,work1Rate]];
    targetSheet.getRange(targetRow,1,1,4).setValues(work1Detail);
    targetSheet.getRange(targetRow-1,5,1,3).copyTo(targetSheet.getRange(targetRow,5,1,3));
    ss.getRange(5,9,1,4).clearContent();
  }
  var work2Hours = ss.getRange(6,9).getValue();
    var work2Job = ss.getRange(6,10).getValue();
    var work2Rate = ss.getRange(6,11).getValue();
    var work2Date = ss.getRange(6,12).getValue();
    var targetSheet = wkbk.getSheetByName("WORK DS");
  if(work2Date != ""){
    //Finds first blank cell in column A, to enter new data in:
    var Avals = targetSheet.getRange("A1:A").getValues();
    var targetRow = Avals.filter(String).length + 1;
    var values = ss.getRange("A:A").getValues();
    var work2Detail = [[work2Date,work2Job,work2Hours,work2Rate]];
    targetSheet.getRange(targetRow,1,1,4).setValues(work2Detail);
    targetSheet.getRange(targetRow-1,5,1,3).copyTo(targetSheet.getRange(targetRow,5,1,3));
    ss.getRange(6,9,1,4).clearContent();
  }
    var work3Hours = ss.getRange(7,9).getValue();
    var work3Job = ss.getRange(7,10).getValue();
    var work3Rate = ss.getRange(7,11).getValue();
    var work3Date = ss.getRange(7,12).getValue();
    var targetSheet = wkbk.getSheetByName("WORK DS");
  if(work3Date != ""){
    //Finds first blank cell in column A, to enter new data in:
    var Avals = targetSheet.getRange("A1:A").getValues();
    var targetRow = Avals.filter(String).length + 1;
    var values = ss.getRange("A:A").getValues();
    var work3Detail = [[work3Date,work3Job,work3Hours,work3Rate]];
    targetSheet.getRange(targetRow,1,1,4).setValues(work3Detail);
    targetSheet.getRange(targetRow-1,5,1,3).copyTo(targetSheet.getRange(targetRow,5,1,3));
    ss.getRange(7,9,1,4).clearContent();
  }

  //Receipts Move
  var i = 9
  var reDate = ss.getRange(i,12).getValue()
  var targetSheet = wkbk.getSheetByName("RECEIPTS DS");
  if (reDate !=""){
  while (reDate !="") {
    var reAmt = ss.getRange(i,9).getValue();
    var rePlace = ss.getRange(i,10).getValue();
    var reCat = ss.getRange(i,11).getValue();
    var reDate = ss.getRange(i,12).getValue();
    //Finds first blank cell in column A, to enter new data in:
    var Avals = targetSheet.getRange("A1:A").getValues();
    var targetRow = Avals.filter(String).length + 1;
    var values = ss.getRange("A:A").getValues();
    var reDetail = [[reDate,rePlace,reCat,reAmt]];
    targetSheet.getRange(targetRow,1,1,4).setValues(reDetail);
    targetSheet.getRange(targetRow-1,5,1,3).copyTo(targetSheet.getRange(targetRow,5,1,3));
    ss.getRange(i,9,1,4).clearContent();
    i++
  }
  }

  //Safe Move 3, 9, 13 (dates) 3-8, 9-12, 13-18
    var safeDate = ss.getRange(3,6).getValue();
    var targetSheet = wkbk.getSheetByName("SAFE DS");
  for (var i=3;i<9;i++){  
    var safeIn = ss.getRange(i,2).getValue();
    var safeOut = ss.getRange(i,4).getValue();
    var safeCnt = (safeIn - safeOut);
    var safeType = ss.getRange(i,3).getValue();

  if(safeCnt != 0){
    //Finds first blank cell in column A, to enter new data in:
    var Avals = targetSheet.getRange("A1:A").getValues();
    var targetRow = Avals.filter(String).length + 1;
    var values = ss.getRange("A:A").getValues();

    var safeDetail = [[safeDate, safeType,safeCnt]];
    targetSheet.getRange(targetRow,1,1,3).setValues(safeDetail);
//    targetSheet.getRange(targetRow-1,3).copyTo(targetSheet.getRange(targetRow,3));
    ss.getRange(i,2).clearContent();
    ss.getRange(i,4).clearContent();
  }
}
    ss.getRange(3,6).clearContent();
  //Safe Move 9 (rolls) 3-8, 9-12, 13-18
    var safeDate = ss.getRange(9,6).getValue();
    var targetSheet = wkbk.getSheetByName("SAFE DS");
  for (var i=9;i<13;i++){  
    var safeIn = ss.getRange(i,2).getValue();
    var safeOut = ss.getRange(i,4).getValue();
    var safeCnt = (safeIn - safeOut);
    var safeType = ss.getRange(i,3).getValue();

  if(safeCnt != 0){
    //Finds first blank cell in column A, to enter new data in:
    var Avals = targetSheet.getRange("A1:A").getValues();
    var targetRow = Avals.filter(String).length + 1;
    var values = ss.getRange("A:A").getValues();

    var safeDetail = [[safeDate, safeType,safeCnt]];
    targetSheet.getRange(targetRow,1,1,3).setValues(safeDetail);
    ss.getRange(i,2).clearContent();
    ss.getRange(i,4).clearContent();
  }
}
    ss.getRange(9,6).clearContent();
  //Safe Move (loose) 13-18
    var safeDate = ss.getRange(13,6).getValue();
    var targetSheet = wkbk.getSheetByName("SAFE DS");
  for (var i=13;i<19;i++){  
    var safeIn = ss.getRange(i,2).getValue();
    var safeOut = ss.getRange(i,4).getValue();
    var safeCnt = (safeIn - safeOut);
    var safeType = ss.getRange(i,3).getValue();

  if(safeCnt != 0){
    //Finds first blank cell in column A, to enter new data in:
    var Avals = targetSheet.getRange("A1:A").getValues();
    var targetRow = Avals.filter(String).length + 1;
    var values = ss.getRange("A:A").getValues();

    var safeDetail = [[safeDate, safeType,safeCnt]];
    targetSheet.getRange(targetRow,1,1,3).setValues(safeDetail);
    ss.getRange(i,2).clearContent();
    ss.getRange(i,4).clearContent();
  }
}
    ss.getRange(13,6).clearContent();
}
函数onClickSubmit(e){
var wkbk=SpreadsheetApp.getActiveSpreadsheet();
var ss=wkbk.getSheetByName(“条目”);
//银行资料转移
var bankDeposit=ss.getRange(3,9).getValue();
var BankDrawing=ss.getRange(3,10).getValue();
var bankDate=ss.getRange(3,12).getValue();
var targetSheet=wkbk.getSheetByName(“银行DS”);
//var t=ss.getRange(3,9,1,4).getValues()[0];
//var bankDeposit=t[0];
//var银行提款=t[1];
//var bankDate=t[3];
//var targetSheet=wkbk.getSheetByName(“银行DS”);
如果(银行日期!=“”){
//在A列中查找第一个空白单元格,以便在其中输入新数据:
var Avals=targetSheet.getRange(“A1:A”).getValues();//这通常是
function onClickSubmit(e) {
  var wkbk = SpreadsheetApp.getActiveSpreadsheet();
  var ss = wkbk.getSheetByName("Entry");
  //Bank Details Move
    var bankDeposit = ss.getRange(3,9).getValue();
    var bankWithdrawal = ss.getRange(3,10).getValue();
    var bankDate = ss.getRange(3,12).getValue();
    var targetSheet = wkbk.getSheetByName("BANK DS");
    //var t=ss.getRange(3,9,1,4).getValues()[0];
    //var bankDeposit = t[0];
    //var bankWithdrawal = t[1];
    //var bankDate = t[3];
    //var targetSheet = wkbk.getSheetByName("BANK DS");
  if(bankDate != ""){
    //Finds first blank cell in column A, to enter new data in:
    var Avals = targetSheet.getRange("A1:A").getValues();//This often returns nulls between data last row and max rows  
    var targetRow = Avals.filter(String).length + 1;
    //var targetRow = targetSheet.getRange(1,1,targetSheet.getLastRow()).getValues().length;
    var values = ss.getRange("A:A").getValues();//Same problem as described above
    var bankAmt = (bankDeposit - bankWithdrawal);
    var bankDetail = [[bankDate, bankAmt]];
    targetSheet.getRange(targetRow,1,1,2).setValues(bankDetail);
    targetSheet.getRange(targetRow-1,3).copyTo(targetSheet.getRange(targetRow,3));
    ss.getRange(3,9,1,4).clearContent();
  }
  //Work Chits Move
    var work1Hours = ss.getRange(5,9).getValue();
    var work1Job = ss.getRange(5,10).getValue();
    var work1Rate = ss.getRange(5,11).getValue();
    var work1Date = ss.getRange(5,12).getValue();
    //try as above to get data all at once
    //var vals=ss.getRange(5,9,1,4).getValues();
    //then use vals[0]...
    var targetSheet = wkbk.getSheetByName("WORK DS");
  if(work1Date != ""){
    //Finds first blank cell in column A, to enter new data in:
    var Avals = targetSheet.getRange("A1:A").getValues();
    var targetRow = Avals.filter(String).length + 1;
    var values = ss.getRange("A:A").getValues();
    var work1Detail = [[work1Date,work1Job,work1Hours,work1Rate]];
    targetSheet.getRange(targetRow,1,1,4).setValues(work1Detail);
    targetSheet.getRange(targetRow-1,5,1,3).copyTo(targetSheet.getRange(targetRow,5,1,3));
    ss.getRange(5,9,1,4).clearContent();
  }
  var work2Hours = ss.getRange(6,9).getValue();
    var work2Job = ss.getRange(6,10).getValue();
    var work2Rate = ss.getRange(6,11).getValue();
    var work2Date = ss.getRange(6,12).getValue();
    var targetSheet = wkbk.getSheetByName("WORK DS");
  if(work2Date != ""){
    //Finds first blank cell in column A, to enter new data in:
    var Avals = targetSheet.getRange("A1:A").getValues();
    var targetRow = Avals.filter(String).length + 1;
    var values = ss.getRange("A:A").getValues();
    var work2Detail = [[work2Date,work2Job,work2Hours,work2Rate]];
    targetSheet.getRange(targetRow,1,1,4).setValues(work2Detail);
    targetSheet.getRange(targetRow-1,5,1,3).copyTo(targetSheet.getRange(targetRow,5,1,3));
    ss.getRange(6,9,1,4).clearContent();
  }
    var work3Hours = ss.getRange(7,9).getValue();
    var work3Job = ss.getRange(7,10).getValue();
    var work3Rate = ss.getRange(7,11).getValue();
    var work3Date = ss.getRange(7,12).getValue();
    var targetSheet = wkbk.getSheetByName("WORK DS");
  if(work3Date != ""){
    //Finds first blank cell in column A, to enter new data in:
    var Avals = targetSheet.getRange("A1:A").getValues();
    var targetRow = Avals.filter(String).length + 1;
    var values = ss.getRange("A:A").getValues();
    var work3Detail = [[work3Date,work3Job,work3Hours,work3Rate]];
    targetSheet.getRange(targetRow,1,1,4).setValues(work3Detail);
    targetSheet.getRange(targetRow-1,5,1,3).copyTo(targetSheet.getRange(targetRow,5,1,3));
    ss.getRange(7,9,1,4).clearContent();
  }

  //Receipts Move
  var i = 9
  var reDate = ss.getRange(i,12).getValue()
  var targetSheet = wkbk.getSheetByName("RECEIPTS DS");
  if (reDate !=""){
  while (reDate !="") {
    var reAmt = ss.getRange(i,9).getValue();
    var rePlace = ss.getRange(i,10).getValue();
    var reCat = ss.getRange(i,11).getValue();
    var reDate = ss.getRange(i,12).getValue();
    //Finds first blank cell in column A, to enter new data in:
    var Avals = targetSheet.getRange("A1:A").getValues();
    var targetRow = Avals.filter(String).length + 1;
    var values = ss.getRange("A:A").getValues();
    var reDetail = [[reDate,rePlace,reCat,reAmt]];
    targetSheet.getRange(targetRow,1,1,4).setValues(reDetail);
    targetSheet.getRange(targetRow-1,5,1,3).copyTo(targetSheet.getRange(targetRow,5,1,3));
    ss.getRange(i,9,1,4).clearContent();
    i++
  }
  }

  //Safe Move 3, 9, 13 (dates) 3-8, 9-12, 13-18
    var safeDate = ss.getRange(3,6).getValue();
    var targetSheet = wkbk.getSheetByName("SAFE DS");
  for (var i=3;i<9;i++){  
    var safeIn = ss.getRange(i,2).getValue();
    var safeOut = ss.getRange(i,4).getValue();
    var safeCnt = (safeIn - safeOut);
    var safeType = ss.getRange(i,3).getValue();

  if(safeCnt != 0){
    //Finds first blank cell in column A, to enter new data in:
    var Avals = targetSheet.getRange("A1:A").getValues();
    var targetRow = Avals.filter(String).length + 1;
    var values = ss.getRange("A:A").getValues();

    var safeDetail = [[safeDate, safeType,safeCnt]];
    targetSheet.getRange(targetRow,1,1,3).setValues(safeDetail);
//    targetSheet.getRange(targetRow-1,3).copyTo(targetSheet.getRange(targetRow,3));
    ss.getRange(i,2).clearContent();
    ss.getRange(i,4).clearContent();
  }
}
    ss.getRange(3,6).clearContent();
  //Safe Move 9 (rolls) 3-8, 9-12, 13-18
    var safeDate = ss.getRange(9,6).getValue();
    var targetSheet = wkbk.getSheetByName("SAFE DS");
  for (var i=9;i<13;i++){  
    var safeIn = ss.getRange(i,2).getValue();
    var safeOut = ss.getRange(i,4).getValue();
    var safeCnt = (safeIn - safeOut);
    var safeType = ss.getRange(i,3).getValue();

  if(safeCnt != 0){
    //Finds first blank cell in column A, to enter new data in:
    var Avals = targetSheet.getRange("A1:A").getValues();
    var targetRow = Avals.filter(String).length + 1;
    var values = ss.getRange("A:A").getValues();

    var safeDetail = [[safeDate, safeType,safeCnt]];
    targetSheet.getRange(targetRow,1,1,3).setValues(safeDetail);
    ss.getRange(i,2).clearContent();
    ss.getRange(i,4).clearContent();
  }
}
    ss.getRange(9,6).clearContent();
  //Safe Move (loose) 13-18
    var safeDate = ss.getRange(13,6).getValue();
    var targetSheet = wkbk.getSheetByName("SAFE DS");
  for (var i=13;i<19;i++){  
    var safeIn = ss.getRange(i,2).getValue();
    var safeOut = ss.getRange(i,4).getValue();
    var safeCnt = (safeIn - safeOut);
    var safeType = ss.getRange(i,3).getValue();

  if(safeCnt != 0){
    //Finds first blank cell in column A, to enter new data in:
    var Avals = targetSheet.getRange("A1:A").getValues();
    var targetRow = Avals.filter(String).length + 1;
    var values = ss.getRange("A:A").getValues();

    var safeDetail = [[safeDate, safeType,safeCnt]];
    targetSheet.getRange(targetRow,1,1,3).setValues(safeDetail);
    ss.getRange(i,2).clearContent();
    ss.getRange(i,4).clearContent();
  }
}
    ss.getRange(13,6).clearContent();
}