我正在设置一个工具,用于根据行的使用期限(> = 30天)将行转移到其他电子表格。
我已经确定要根据条件(> = 30天)删除该行,但是我似乎无法弄清楚如何成功地将行移到上方。我一直在研究两段代码,似乎它们只需要进行一两次调整,但我无法弄清楚这些调整是什么。
第一个:
function CopyDataToNewFile() {
var ss SpreadsheetApp.openById('ID'); // sss = source spreadsheet
var sheet = ss.getSheetByName('Sheet1'); // sh = source sheet
var ass = SpreadsheetApp.openById('ID'); // ass = archive spreadsheet
var as = ass.getSheetByName('Sheet2'); // as = archive sheet
var datarange = sheet.getDataRange(); //Get full range of data source
var a_datarange = as.getDataRange(); // Get full range of archive
var lastrow = datarange.getLastRow(); // get last row of data source
var values = datarange.getValues(); // get all data in a 2D array
var A1Range = datarange.getA1Notation(); //get A1 notation source
var monthOld = Date.now() + -30 * 24 * 3600 * 1000; //adds 1 month to today
for (i = lastrow; i >= 1; i--) {
var tempDate = values[i - 1][4];
if ((tempDate != "") && (tempDate <= monthOld)) {
sheet.getRange(datarange.getRow(), 1, 1, sheet.getLastRow()).moveTo(a_datarange);
} //closes if
} //closes for loop
} //closes function
在这里,我收到错误消息: “目标范围和源范围必须在同一电子表格上。(第49行,文件“删除”):
我相信这意味着 moveTo()不能在这里使用,但是我不知道该用什么。
第二
function MoveOldEntries() {
var sss = '1kKFvRT4hCclHQRsQ_4Z3wNifGirXczfViCi31Nw_wD0';
var ass = '1K2xDQEGnFcUcs3u3Cj86z6UsxR35kdRV_awMFFeXKt0';
var s_sheet1 = SpreadsheetApp.openById(sss).getSheets()[0];
var a_sheet1 = SpreadsheetApp.openById(ass).getSheets()[0];
var lr = s_sheet1.getLastRow();
var rows = s_sheet1.getDataRange();
var numRows = rows.getNumRows();
var values = rows.getValues();
for (i = lr; i >=1; i--) {
var oldDate = Date.now() + - 90 * 24 * 3600 * 1000; // or var oldDate = new Date('values[i][1]')
var curDate = new Date();
var tempDate = values[i-1][4]
if ((tempDate!="") && (tempDate <= (oldDate))) {
a_sheet1.appendRow([values])
}
}
}
这会将正确的行数返回到存档表,但这是乱码:
[Ljava.lang.Object;@1534974f
[Ljava.lang.Object;@5fd49386
[Ljava.lang.Object;@199384d5
[Ljava.lang.Object;@6cd6e3a6
[Ljava.lang.Object;@152fec74
[Ljava.lang.Object;@58300fb3
[Ljava.lang.Object;@1e50f226
任何关于更改内容的想法都值得赞赏。我已经为此工作了好几天!
答案 0 :(得分:1)
使用以下代码。由于您无法移动,因此需要获取值,进行过滤,然后将值设置为目标。
function CopyDataToNewFile() {
var ss = SpreadsheetApp.openById('ID'); // sss = source spreadsheet
var sheet = ss.getSheetByName('Sheet1'); // sh = source sheet
var values = sheet.getDataRange().getValues(); // get all data in a 2D array
var ass = SpreadsheetApp.openById('ID'); // ass = archive spreadsheet
var as = ass.getSheetByName('Sheet2'); // as = archive sheet
var monthOld = Date.now() + (-30 * 24 * 3600 * 1000); //adds 1 month to today
var results = [];
values.forEach(function(row) {
var tempDate = row[4];
if (tempDate != '' && tempDate <= monthOld) {
results.push(row);
}
});
// results.unshift(values[0]); // uncomment this if you want the column names from source sheet to copy
as.getRange(as.getLastRow()+1, 1, results.length, results[0].length).setValues(results);
}