Google Apps Script - 将一张包含今天日期的工作表中的行复制到另一张工作表中
2019-05-22
2530
我想在一个电子表格中执行的操作是,查看工作表“源”,如果 B 列中的单元格包含今天的日期,则复制该单元格的 A:B 之间的单元格并粘贴到工作表“目标”中的下一个空行。
对包含今天日期的所有单元格重复此操作。
如果我正在寻找文本,这种方法是可行的,但本质上,我试图让它在日期更改时每天自动运行,而我无法使日期函数正常工作。
基本上,在每天开始时,它都会从另一个自动工作表复制今天的数据,并将其粘贴到另一张工作表昨天数据的下一行。
我对所有这些都很陌生,任何帮助都将不胜感激。
function copy_test() {
var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Source"); //Source sheet
var ds = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Destination"); //Destination sheet
var testrange = ss.getRange('B:B'); //Column to check for today's date
var testvalue = (testrange.getValues()); //What value to check
var today = Utilities.formatDate(new Date(), 'GMT-0', 'dd/MM/yyyy');
var data = [];
var j = [];
//Condition to check in B:B, if true, copy the same row to data array
for (i=0;i<testvalue.length;i++) {
if (testvalue[i] == today) {
data.push.apply(data,ss.getRange(i+1,1,1,3).getValues());
//Copy matched ROW numbers to j
j.push(i);
}
}
//Copy data array to destination sheet
ds.getRange(ds.getLastRow()+1,1,data.length,data[0].length).setValues(data);
}
我收到的错误是:
TypeError:无法从未定义中读取属性“length”。 (第 20 行,文件“首次测试”)
2个回答
尝试一下:
function copy_test() {
var ss=SpreadsheetApp.getActive();
var ssh=ss.getSheetByName("Source");
var dsh=ss.getSheetByName("Destination");
var rg=ssh.getRange(1,1,ssh.getLastRow(),3);//I just took the first three columns instead
var vA=rg.getValues();
var dt=new Date();
var today=new Date(dt.getFullYear(),dt.getMonth(),dt.getDate()).valueOf();//midnight
for(var i=0;i<vA.length;i++) {
var d=new Date(vA[i][1]);//column B
if (new Date(d.getFullYear(),d.getMonth(),d.getDate()).valueOf() == today) {
dsh.appendRow(vA[i]);
}
}
}
Cooper
2019-05-22
以防将来有人遇到此问题。我对原始代码进行了更多修改,并设法使其正常工作:
function copyrange() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('Source'); //source sheet
var testrange = sheet.getRange('B:B');
var testvalue = (testrange.setNumberFormat("@").getValues());
var ds = ss.getSheetByName('Destination'); //destination sheet
var data = [];
var j =[];
var dt = new Date();
var today = Utilities.formatDate(new Date(), 'GMT-0', 'dd/MM/yyyy')
//Condition to check in B:B, if true, copy the same row to data array
for (i=0;i<testvalue.length;i++) {
if (testvalue[i] == today) {
data.push.apply(data,sheet.getRange(i+1,1,1,3).getValues());
//Copy matched ROW numbers to j
j.push(i);
}
}
//Copy data array to destination sheet
ds.getRange(ds.getLastRow()+1,1,data.length,data[0].length).setValues(data);
}
特别是
var testvalue
,我在其中添加了
setNumberFormat
,以将日期作为文本,因为这是
if (testvalue[i] == today)
唯一可行的方法。
感谢 @Cooper 对此进行尝试。
ICY
2019-05-24