Xin hướng dẫn xóa cùng số dòng trên multisheet bằng google script

Liên hệ QC

gameonly308

Thành viên hoạt động
Tham gia
4/5/09
Bài viết
197
Được thích
10
Chào các bác, em có script xóa dòng trên 1 sheet là A001, bây giờ em muốn sửa để nó cũng xóa dòng trên nhiều sheet có tên dạng A002, B45, B25, [a001], [C01] ... thì làm thế nào ạ. Mong các bác xem giúp em!
Mã:
function deleteOldRowsData() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("A001");
  var datarange = sheet.getDataRange();
  var lastrow = datarange.getLastRow();
  var values = datarange.getValues();// get all data in a 2D array

  var currentDate = new Date();
  var daysago = new Date().setDate(currentDate.getDate() - 32 );
  var yearago = new Date().setDate(currentDate.getDate() - 365);

  for (i=lastrow;i>=2;i--) {
    var tempdate = values[i-1][0];// arrays are 0 indexed so row1 = values[0] and col3 = [2]
    if(tempdate < daysago)  {
      if(tempdate < yearago)  {continue;}
      sheet.deleteRows(3, i);
      break;
    }
  }
}
 
var tempdate = values[i-1][0];
Xét có đúng 01 cột thì ôm làm gì cả một sheet to đùng cho mệt?
var datarange = sheet.getDataRange();

Chỉ cần lấy 1 cột thôi.

PHP:
function RunForSheets(){
var list_sheets = ["A0001", "A002", "B45", "..."]
list_sheets.foreach(sheet_name => deleteOldRowsData(sheet_name));
}


function deleteOldRowsData(sheet_name_) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName(sheet_name_);
// ...
}
 
Xét có đúng 01 cột thì ôm làm gì cả một sheet to đùng cho mệt?
var datarange = sheet.getDataRange();

Chỉ cần lấy 1 cột thôi.

PHP:
function RunForSheets(){
var list_sheets = ["A0001", "A002", "B45", "..."]
list_sheets.foreach(sheet_name => deleteOldRowsData(sheet_name));
}


function deleteOldRowsData(sheet_name_) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName(sheet_name_);
// ...
}
có thể cho hết vào functioin deleteOldRowsData được ko ạ, tại em muốn tạo stringer để đến thời gian nhất định nó sẽ check row và xóa tự động ạ!
 
có thể cho hết vào functioin deleteOldRowsData được ko ạ, tại em muốn tạo stringer để đến thời gian nhất định nó sẽ check row và xóa tự động ạ!
Trigger chứ không phải stringer.

Giờ gọi function RunForSheets() là được. Function deleteOldRowsData() là hàm con, cháu không phải động tới.
 
Em làm rồi mà bị lỗi ạ @befaint
Mã:
function RunForSheets(){
var list_sheets = ["A0001", "A002"]
.foreach(list_sheets)
 deleteOldRowsData(list_sheets);
}
function deleteOldRowsData() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName();
  var datarange = sheet.getDataRange();
  var lastrow = datarange.getLastRow();
  var values = datarange.getValues();// get all data in a 2D array

  var currentDate = new Date();
  var daysago = new Date().setDate(currentDate.getDate() - 32 );
  var yearago = new Date().setDate(currentDate.getDate() - 365);

  for (i=lastrow;i>=2;i--) {
    var tempdate = values[i-1][0];// arrays are 0 indexed so row1 = values[0] and col3 = [2]
    if(tempdate < daysago)  {
      if(tempdate < yearago)  {continue;}
      sheet.deleteRows(3, i);
      break;
    }
  }
}
 
Mình ---- nhìn ----- thật ----- tinh ---- và ----- đọc ----- từng ----- chữ ---- thật ----- chuẩn ----- vào.
em làm nguyên si thì bị lỗi này ạ hicc.
[20-11-05 11:11:21:471 ICT] TypeError: Cannot read property 'getDataRange' of null
at deleteOldRowsData
Mã:
function RunForSheets(){
var list_sheets = ["A0001", "A002", "B45", "..."]
list_sheets.foreach(sheet_name => deleteOldRowsData(sheet_name));
}

function deleteOldRowsData(sheet_name_) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName(sheet_name_);
  var datarange = sheet.getDataRange();
  var lastrow = datarange.getLastRow();
  var values = datarange.getValues();// get all data in a 2D array

  var currentDate = new Date();
  var daysago = new Date().setDate(currentDate.getDate() - 32 );
  var yearago = new Date().setDate(currentDate.getDate() - 365);

  for (i=lastrow;i>=2;i--) {
    var tempdate = values[i-1][0];// arrays are 0 indexed so row1 = values[0] and col3 = [2]
    if(tempdate < daysago)  {
      if(tempdate < yearago)  {continue;}
      sheet.deleteRows(3, i);
      break;
    }
  }
}
 
Ca ô có gì đâu. Cứ tài liệu chính chủ mà đọc.


Cannot read property 'getDataRange' of null => Google dịch: xyzzzzz

Kết luận: Tên sheet truyền vào không có => null

View attachment 248687
Bác ơi bác sửa hoàn thiện giúp em với ạ, e làm mãi mà ko được :(. Em làm cái mẫu để lsau gặp còn biết cách làm ạ, tìm trên net ko có dạng vậy.
Bài đã được tự động gộp:

Ca ô có gì đâu. Cứ tài liệu chính chủ mà đọc.


Cannot read property 'getDataRange' of null => Google dịch: xyzzzzz

Kết luận: Tên sheet truyền vào không có => null

View attachment 248687
Em xin lỗi đã làm phiền bác nhiều, e đã sửa được rồi ạ!
 
Lần chỉnh sửa cuối:
Web KT
Back
Top Bottom