将多个非空行复制到新工作表



我正试图保存我从网站上获得的每日反馈;"反馈";表单转换为另一个谷歌表单,我称之为";"反馈数据库";

A列:日期B列:时间C列:电子邮件地址D列:反馈

数据行从第3行开始。

我目前正在做的是基于我所掌握的基本知识来保存数据:

  1. 复制";"反馈";薄板
  2. 将其保存到";数据库";薄板
  3. 回到";"反馈";并删除行3,使得行4中的数据变为行3中的数据

我有另一个函数,它计算行数,并根据行数运行saveFeedback_Data((函数。

我知道我在第3步中所做的不是一种正确的方式,如果你们能推荐一种更好的方式来执行这一功能,并通过评论来理解,我将不胜感激。

感谢你的帮助,

function saveFeedback_Data() {

var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.setActiveSheet(spreadsheet.getSheetByName('feedback'), true);
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];



var  Date= sheet.getRange('feedback !A3').getValue(); 
var Time = sheet.getRange('feedback !B3').getValue();
var Email = sheet.getRange('feedback !C3').getValue();
var Feedback = sheet.getRange('feedback !D3').getValue();


var sheet_dest = ss.getSheetByName("Database");
sheet_dest.appendRow([Date,Time, Email,Feedback]);

Logger.log('Issue Date : ' + Date + ' Issue time : ' + Time + ' Email Address : ' + Email + ' Feedback : ' + Feedback + 'n');


//now deleting the row 
spreadsheet.setActiveSheet(spreadsheet.getSheetByName('feedback'), true);
spreadsheet.getRange('3:3').activate();
spreadsheet.getActiveSheet().deleteRows(spreadsheet.getActiveRange().getRow(), spreadsheet.getActiveRange().getNumRows());
spreadsheet.getRange('A10').activate();

}

保存反馈数据

这将比快十倍

function saveFeedback_Data() {
const ss = SpreadsheetApp.getActive();
const sh = ss.getSheetByName('Feedback');
const shsr = 3;
const dbsh = ss.getSheetByName('Database');
const rg = sh.getRange(shsr, 1, sh.getLastRow() - shsr + 1, 4);
const vs = rg.getValues().filter(r => !r.every(e => !e));//gets all non blank rows at one time
dbsh.getRange(dbsh.getLastRow() + 1, 1, vs.length, vs[0].length).setValues(vs);//moves all data at one time
rg.clearContent();//clears all data at one time
}

你可以转到谷歌应用程序脚本参考,使用搜索框找到任何你不理解的功能。如果它是一个纯JavaScript函数,请点击此处

相关内容

最新更新