function onEdit(e) {
try {
var s = e.source.getActiveSheet();
var r = e.range;
// Kiểm tra tên trang tính
if (s.getName() == "Vin Gia lam") {
// Kiểm tra nếu ô chỉnh sửa nằm trong cột I (9) hoặc J (10)
if (r.getColumn() == 9 || r.getColumn() == 10) {
Logger.log("Sửa đổi tại ô: " + r.getA1Notation()); // Ghi thông tin ô đã chỉnh sửa vào log
var row = r.getRow(); // Lấy dòng của ô vừa chỉnh sửa
// Kiểm tra nếu cột I (9) được chỉnh sửa
if (r.getColumn() == 9) {
// Xác định vị trí cột P và Q (cột 16 và 17)
var historyColumnStart = 16; // Cột P là cột 16
// Lấy giá trị cũ của ô trước khi thay đổi
var oldValue = e.oldValue; // Lấy giá trị cũ từ sự kiện onEdit
if (oldValue) {
// Lưu giá trị cũ vào các ô từ cột P trở đi (P, Q, R, S, T)
var historyRange = s.getRange(row, historyColumnStart, 1, 5); // Lưu vào cột P đến T
var historyValues = historyRange.getValues(); // Lấy các giá trị lịch sử đã lưu
// Di chuyển các giá trị cũ về phía trước
for (var i = 3; i >= 0; i--) { // Chỉ đẩy 4 cột (P, Q, R, S) lên trước
historyValues[0][i + 1] = historyValues[0];
}
// Đưa giá trị cũ vào cột P
historyValues[0][0] = oldValue;
// Cập nhật lại giá trị vào các cột P đến T
historyRange.setValues(historyValues);
}
}
// Kiểm tra nếu cột J (10) được chỉnh sửa
if (r.getColumn() == 10) {
// Cột U là cột 21
var historyColumnStart = 21; // Cột U là cột 21
// Lấy giá trị cũ của ô trước khi thay đổi
var oldValue = e.oldValue; // Lấy giá trị cũ từ sự kiện onEdit
if (oldValue) {
// Lưu giá trị cũ vào cột U
var historyRange = s.getRange(row, historyColumnStart, 1, 1); // Lưu vào cột U
historyRange.setValue(oldValue);
}
}
// Cập nhật thời gian hiện tại vào cột O
var nextCell = s.getRange(r.getRow(), 15); // Cột O
var currentTime = new Date();
nextCell.setValue(currentTime);
nextCell.setNumberFormat("yyyy-MM-dd HH:mm:ss");
}
}
} catch (e) {
Logger.log("Lỗi: " + e.message); // Log any error
}
}
Em hỏi vì sao khi file googlesheet của em thì code chạy mà khi chia sẽ file mà họ thay đổi dữ liệu thì nó lại không hiện ạ. Anh chị giúp em với ạ
try {
var s = e.source.getActiveSheet();
var r = e.range;
// Kiểm tra tên trang tính
if (s.getName() == "Vin Gia lam") {
// Kiểm tra nếu ô chỉnh sửa nằm trong cột I (9) hoặc J (10)
if (r.getColumn() == 9 || r.getColumn() == 10) {
Logger.log("Sửa đổi tại ô: " + r.getA1Notation()); // Ghi thông tin ô đã chỉnh sửa vào log
var row = r.getRow(); // Lấy dòng của ô vừa chỉnh sửa
// Kiểm tra nếu cột I (9) được chỉnh sửa
if (r.getColumn() == 9) {
// Xác định vị trí cột P và Q (cột 16 và 17)
var historyColumnStart = 16; // Cột P là cột 16
// Lấy giá trị cũ của ô trước khi thay đổi
var oldValue = e.oldValue; // Lấy giá trị cũ từ sự kiện onEdit
if (oldValue) {
// Lưu giá trị cũ vào các ô từ cột P trở đi (P, Q, R, S, T)
var historyRange = s.getRange(row, historyColumnStart, 1, 5); // Lưu vào cột P đến T
var historyValues = historyRange.getValues(); // Lấy các giá trị lịch sử đã lưu
// Di chuyển các giá trị cũ về phía trước
for (var i = 3; i >= 0; i--) { // Chỉ đẩy 4 cột (P, Q, R, S) lên trước
historyValues[0][i + 1] = historyValues[0];
}
// Đưa giá trị cũ vào cột P
historyValues[0][0] = oldValue;
// Cập nhật lại giá trị vào các cột P đến T
historyRange.setValues(historyValues);
}
}
// Kiểm tra nếu cột J (10) được chỉnh sửa
if (r.getColumn() == 10) {
// Cột U là cột 21
var historyColumnStart = 21; // Cột U là cột 21
// Lấy giá trị cũ của ô trước khi thay đổi
var oldValue = e.oldValue; // Lấy giá trị cũ từ sự kiện onEdit
if (oldValue) {
// Lưu giá trị cũ vào cột U
var historyRange = s.getRange(row, historyColumnStart, 1, 1); // Lưu vào cột U
historyRange.setValue(oldValue);
}
}
// Cập nhật thời gian hiện tại vào cột O
var nextCell = s.getRange(r.getRow(), 15); // Cột O
var currentTime = new Date();
nextCell.setValue(currentTime);
nextCell.setNumberFormat("yyyy-MM-dd HH:mm:ss");
}
}
} catch (e) {
Logger.log("Lỗi: " + e.message); // Log any error
}
}
Em hỏi vì sao khi file googlesheet của em thì code chạy mà khi chia sẽ file mà họ thay đổi dữ liệu thì nó lại không hiện ạ. Anh chị giúp em với ạ