将数据从一张纸保存到另一张纸的最后一行

时间:2018-07-12 01:30:24

标签: google-apps-script google-sheets

已编辑以将代码添加到底部。

我正在创建一个将由员工填写的发票表,然后单击“保存并清除”按钮,该按钮将在销售报告中找到下一个空行,并将发票中的某些字段保存到销售报告中。我有两个可行的解决方案,但似乎都无法解决,需要一些时间才能完成。以下是我正在处理的工作表的副本,该工作表已去除了无关的信息。因为我已经将它剥开了,所以我没有慢的问题。

最初,我尝试为每个要保存的单元格创建一个数组,然后将其放入报表中。然后,我将值复制并粘贴到报表上,以使清除功能不会删除发票和报表。

第二,我具有激活lastRow + 1中某些单元格的代码,然后在执行操作时对每个单元格进行复制/粘贴。

这两种方法都不是最有效的方法,但我不知道如何使用getValuessetValues函数。或者,如果这些适用于我要尝试的操作。

谢谢!

首次尝试(带有修改):

data = ["=Invoice!$E$3", "=Invoice!$E$2","=row()+100000-2","=Invoice!$E$30","=Invoice!$E$4","=Invoice!$C$6","=Invoice!$C$10","=Invoice!$E$6","=Invoice!$E$10","Parts","=Invoice!$H$11"]
SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sales Report").appendRow(data);

var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sales Report");
sheet.getRange('$A$47:$K$100').copyTo(sheet.getRange('$A$47:$K$100'), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false); 

SpreadsheetApp.getActive().getSheetByName('Invoice').getRange(6,3 ).clearContent();
SpreadsheetApp.getActive().getRange('B12:C28').clearContent();
SpreadsheetApp.getActive().getRange('E29').clearContent();

第二次尝试(带有修改):

var spreadsheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sales Report');
var row = spreadsheet.getLastRow() + 1;
spreadsheet.getRange('Invoice!E3').copyTo(spreadsheet.getRange('A' + row), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
spreadsheet.getRange('Invoice!E2').copyTo(spreadsheet.getRange('B' + row), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
spreadsheet.getRange('C' + (row - 1) + 1).copyTo(spreadsheet.getRange('C' + row), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
spreadsheet.getRange('Invoice!E30').copyTo(spreadsheet.getRange('D' + row), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
spreadsheet.getRange('Invoice!E4').copyTo(spreadsheet.getRange('E' + row), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
spreadsheet.getRange('Invoice!C6').copyTo(spreadsheet.getRange('F' + row), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
spreadsheet.getRange('Invoice!C10').copyTo(spreadsheet.getRange('G' + row), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
spreadsheet.getRange('Invoice!E6').copyTo(spreadsheet.getRange('H' + row), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
spreadsheet.getRange('Invoice!E10').copyTo(spreadsheet.getRange('I' + row), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
spreadsheet.getRange('J' + (row - 1)).copyTo(spreadsheet.getRange('J' + row), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
spreadsheet.getRange('Invoice!H11').copyTo(spreadsheet.getRange('K' + row), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);

SpreadsheetApp.getActive().getSheetByName('Invoice').getRange(6,3 ).clearContent();
SpreadsheetApp.getActive().getRange('B12:C28').clearContent();
SpreadsheetApp.getActive().getRange('E29').clearContent();

1 个答案:

答案 0 :(得分:0)

这应该使您开始进行批值操作(和一些概念)。
要记住的关键是JavaScript数组是从0开始的,而Spreadsheet接口使用的是从1开始的:单元格A1或单元格R1C1位于数组索引0、0。
Apps脚本def kth_word(s, k): word_count = 0 for i in range(0, len(s) - 1): if s[i] == " " and s[i+1] != " ": word_count+=1 #try to find how many characters to print until the space if word_count == k-1: new ="" j = i+1 while j < len(s) and s[j] != " ": new+=s[j] j = j+1 print(new) #check how new is doing, normally works good return new 提供的Spreadsheet Service还将“主要维度”解释为行,因此“ 2D” JavaScript SpreadsheetApp的第一个索引是行,第二个索引是该特定行的列。 (Sheets REST API可以指定使用列作为第一个索引来解释数组。)

Array

参考文献: