Chào mọi người,
Dạo này mình đang làm một dự án nhỏ trên Google Sheets và gặp phải vấn đề cần tạo ra các mã ID duy nhất cho từng dòng dữ liệu. Làm thủ công thì dễ sai sót và mất thời gian, nên mình đã tìm tòi và viết một đoạn Apps Script nhỏ để giải quyết vấn đề này một cách tự động.
Ý tưởng rất đơn giản: mỗi khi có một dòng dữ liệu mới được thêm vào, script sẽ tự động sinh ra một ID duy nhất dựa trên một số tiêu chí (ví dụ: ngày tháng, tiền tố cố định, và một số thứ tự tăng dần).
Đây là đoạn code mình đã dùng:
function generateUniqueId() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var lastRow = sheet.getLastRow();
var sheetName = sheet.getName();
// Lấy tiền tố dựa trên tên sheet (ví dụ: 'INV' cho sheet 'Invoices')
var prefix = sheetName.substring(0, 3).toUpperCase();
// Lấy ngày tháng hiện tại theo định dạng YYYYMMDD
var today = new Date();
var dateStr = Utilities.formatDate(today, Session.getScriptTimeZone(), "yyyyMMdd");
// Số thứ tự tăng dần (ví dụ: 001, 002, ...)
var sequenceNumber = "000" + (lastRow + 1);
sequenceNumber = sequenceNumber.substring(sequenceNumber.length - 3);
var uniqueId = prefix + "-" + dateStr + "-" + sequenceNumber;
// Ghi ID vào cột đầu tiên của dòng mới
sheet.getRange(lastRow + 1, 1).setValue(uniqueId);
}
function onEdit(e) {
var range = e.range;
var sheet = range.getSheet();
var editedRow = range.getRow();
// Chỉ chạy khi có dữ liệu được nhập vào một sheet cụ thể và không phải cột ID
if (sheet.getName() === "Dữ liệu" && range.getColumn() !== 1 && editedRow > 1) {
// Kiểm tra xem ô ID đã có giá trị chưa
if (sheet.getRange(editedRow, 1).getValue() === "") {
generateUniqueId();
}
}
}
Lưu ý:
- Bạn cần thay đổi tên sheet và logic tạo ID cho phù hợp với nhu cầu của mình.
- Đoạn code
onEdit(e)sẽ tự động chạy mỗi khi có chỉnh sửa trong sheet. Tuy nhiên, để nó hoạt động ổn định, bạn có thể cần thiết lập một trigger (bộ kích hoạt) trong Apps Script để chạy hàmgenerateUniqueIdkhi có dòng mới được thêm vào.
Hy vọng chia sẻ này hữu ích cho mọi người. Nếu có cách làm hay hơn hoặc gặp vấn đề gì, mọi người cùng thảo luận nhé!