/
/
/
/
/
09. Tra soát đến file lưu Drive | Code lấy thông tin file

09. Tra soát đến file lưu Drive | Code lấy thông tin file

Google Sheets

  • Lấy thông tin file nằm ở nhiều thư mục khác nhau
  • Lấy thông tin file nằm cả ở thư mục mẹ và thư mục con

function onOpen() {
  var ui = SpreadsheetApp.getUi();
  ui.createMenu(‘Menu’)
      .addItem(‘Lấy dữ liệu từ thư mục’, ‘layfile_trongthumuc’)
      .addToUi();
}
function layfile_trongthumuc() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var dataSheet = spreadsheet.getSheetByName(‘DATA’);
  // Kiểm tra nếu sheet DATA tồn tại
  if (!dataSheet) {
    SpreadsheetApp.getUi().alert(‘Không tìm thấy sheet có tên DATA’);
    return;
  }
  // Lấy tất cả các ID thư mục từ cột B, bắt đầu từ dòng 2
  var folderIds = dataSheet.getRange(‘B2:B’).getValues();
  // Danh sách chứa dữ liệu để ghi vào sheet
  var list = [];
  var sttCounter = 1; // Khởi tạo số thứ tự ngoài hàm đệ quy
  // Lặp qua từng ID thư mục
  folderIds.forEach(function(row) {
    var folderId = row[0];
    // Kiểm tra nếu ID thư mục có giá trị hợp lệ
    if (folderId) {
      try {
        var folder = DriveApp.getFolderById(folderId);  // Lấy thư mục theo ID
        sttCounter = processFolder(folder, list, sttCounter);  // Gọi hàm đệ quy và truyền `sttCounter` để tiếp tục đếm
      } catch (e) {
        list.push([‘Lỗi: ‘ + e.message, ”, ”, ”, ”, ”, ”]); // Ghi lỗi nếu có
      }
    }
  });
  // Ghi dữ liệu vào sheet DATA, bắt đầu từ dòng 2
  if (list.length > 0) {
    dataSheet.getRange(2, 4, list.length, list[0].length).setValues(list); // Ghi vào cột D, E, F, G, H, I, J
    // Sắp xếp dữ liệu theo cột I (Thời điểm tạo file) và cột FolderName (tên thư mục), giữ nguyên cột Số thứ tự
    var lastRow = dataSheet.getLastRow(); // Lấy dòng cuối cùng có dữ liệu
    // Chỉ sắp xếp từ cột E (tên thư mục) đến cột J (thời điểm chỉnh sửa), không bao gồm cột D (Số thứ tự)
    dataSheet.getRange(2, 5, lastRow – 1, list[0].length – 1).sort([
      {column: 5, ascending: true}, // Sắp xếp theo tên thư mục (cột E)
      {column: 9, ascending: true}  // Sau đó sắp xếp theo cột I (Thời điểm tạo file)
    ]);
  } else {
    SpreadsheetApp.getUi().alert(‘Không tìm thấy tệp nào trong các thư mục.’);
  }
}
// Hàm đệ quy để duyệt qua các thư mục con và lấy thông tin file, đồng thời cập nhật số thứ tự
function processFolder(folder, list, sttCounter) {
  var folderName = folder.getName(); // Lấy tên thư mục
  var folderUrl = folder.getUrl(); // Lấy URL của thư mục
  var files = folder.getFiles();
  // Lấy thông tin về các tệp trong thư mục hiện tại
  while (files.hasNext()) {
    var file = files.next();
    var createdDate = file.getDateCreated(); // Lấy thời điểm tạo file
    var lastUpdatedDate = file.getLastUpdated(); // Lấy thời điểm chỉnh sửa file gần nhất
    list.push([sttCounter++, folderName, folderUrl, file.getName(), file.getUrl(), createdDate, lastUpdatedDate]); // Đánh số thứ tự liên tục
  }
  // Lặp qua các thư mục con và gọi đệ quy
  var subfolders = folder.getFolders();
  while (subfolders.hasNext()) {
    var subfolder = subfolders.next();
    sttCounter = processFolder(subfolder, list, sttCounter); // Đệ quy để duyệt qua thư mục con, và cập nhật `sttCounter`
  }
  return sttCounter; // Trả lại giá trị `sttCounter` để tiếp tục tăng
}
Chia sẻ: