繁体   English   中英

Google Appscript:将表格中的数据复制到最后一行中的另一张表格并清除表格

[英]Google Appscript: Copy Data from a Form Sheet to Another Sheet in Last Row and Clear Form

试图让 Appscript 运行,但我似乎无法弄清楚最后几个步骤。

背景:我有一个带有两个选项卡的 Google 表格,#1 称为“数据表单”,它包含一个可填写的表单以捕获交易信息,然后将其输入到名为“已发布交易”的选项卡 #2 中。 这是个人预算电子表格..

无论如何,下面的脚本旨在获取“数据表单”上输入的信息,根据A列是否有任何数据来验证“已发布交易”选项卡上最后一行的数据。 (为了进一步澄清,“已发布交易”选项卡在 GI 列中有公式,这禁止我使用简单的“查找最后一行”脚本。)

正如现在所写的那样,我收到一条错误消息“异常:数据中的列数与范围内的列数不匹配。数据有 6,但范围有 1。RecordNewTransaction @ Code.gs:24”

有什么建议可以使它正常工作吗?

更新:

var dataRange = datasheet.getRange(lastRow+1,1,1,datasheet.getLastColumn()-3);

经过多次尝试和错误尝试,我需要编辑上面显示的行。 当前和完整脚本现在按预期执行,如下所示。 还显示了我试图完成的图像片段以供参考。

function RecordNewTransaction() {
var ss        = SpreadsheetApp.getActiveSpreadsheet();
var formSS    = ss.getSheetByName("Data Form"); //Form Sheet
var datasheet = ss.getSheetByName("Posted Transactions"); //Data 
//Input Values
var values = [[formSS.getRange("B4").getValue(),
               formSS.getRange("B6").getValue(),
               formSS.getRange("B8").getValue(),
               formSS.getRange("B10").getValue(),
               formSS.getRange("B12").getValue(),
               formSS.getRange("B14").getValue()]];

var columnToCheck = datasheet.getRange("A:A").getValues();
var lastRow = getLastRowSpecial(columnToCheck);
Logger.log(lastRow);

var dataRange = datasheet.getRange(lastRow+1,1,1,datasheet.getLastColumn()-3);
Logger.log(dataRange);
var dataValues = dataRange.getValues();

Logger.log(dataValues);

dataRange.setValues(values);
Logger.log(dataRange.setValues(values))

formSS.getRange('B4:B14').clearContent();

};

function getLastRowSpecial(range){
var rowNum = 0;
var blank = false;
for(var row = 0; row < range.length; row++){

  if(range[row][0] === "" && !blank){
    rowNum = row;
    blank = true;
  }else if(range[row][0] !== ""){
    blank = false;
  };
};
return rowNum;
  };

数据录入表

数据输入表的结果发布在分配的工作表上

尝试

var dataRange = datasheet.getRange(lastRow,1,values.length,values[0].length)

请参阅上面的编辑问题,其中包含所需的修订脚本。

这里的问题是我的结果表的 GI 列包含公式(以灰色显示),需要修改下面的这一行以获取最后一列 -3,否则脚本会查看太多不需要的列. 还必须将“lastRow”修改为“lastRow+1”,因为这会覆盖我已经输入的最后一行数据,+1 将使新数据 go 成为下一个可用行。

var dataRange = datasheet.getRange(lastRow+1,1,1,datasheet.getLastColumn()-3);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM