Bắt đầu nhanh về thư viện

Tạo một thư viện Apps Script mà bạn có thể dùng để xoá các hàng trùng lặp trong dữ liệu bảng tính.

Mục tiêu

  • Thiết lập tập lệnh.
  • Chạy tập lệnh.

Điều kiện tiên quyết

Để sử dụng mẫu này, bạn cần có các điều kiện tiên quyết sau:

  • Tài khoản Google (có thể cần có sự phê duyệt của quản trị viên đối với tài khoản Google Workspace).
  • Một trình duyệt web có quyền truy cập Internet.

Thiết lập tập lệnh

Để tạo thư viện, hãy làm theo các bước sau:

  1. Đăng nhập vào Tài khoản Google của bạn.
  2. Để mở trình soạn thảo tập lệnh, hãy truy cập vào script.google.com.
  3. Ở trên cùng bên trái, hãy nhấp vào Dự án mới.
  4. Xoá mọi mã trong trình soạn thảo tập lệnh rồi dán mã bên dưới vào.

    sheets/removingDuplicates/removingDuplicates.gs
    /**
     * Removes duplicate rows from the current sheet.
     */
    function removeDuplicates() {
      const sheet = SpreadsheetApp.getActiveSheet();
      const data = sheet.getDataRange().getValues();
      const uniqueData = {};
      for (let row of data) {
        const key = row.join();
        uniqueData[key] = uniqueData[key] || row;
      }
      sheet.clearContents();
      const newData = Object.values(uniqueData);
      sheet.getRange(1, 1, newData.length, newData[0].length).setValues(newData);
    }
  5. Nhấp vào biểu tượng Lưu Biểu tượng Lưu.

  6. Ở trên cùng bên trái, hãy nhấp vào Dự án không có tiêu đề.

  7. Đặt tên tập lệnh là Xoá hàng trùng lặp rồi nhấp vào Đổi tên.

  8. Nhấp vào Triển khai > Triển khai mới.

  9. Bên cạnh Chọn loại, hãy nhấp vào Bật loại triển khai Biểu tượng để bật các loại hình triển khai > Thư viện.

  10. Nhập nội dung mô tả về thư viện, chẳng hạn như Xoá hàng trùng lặp. Bất kỳ ai có quyền truy cập vào thư viện đều có thể xem nội dung mô tả này.

  11. Nhấp vào Triển khai.

  12. Ở bên trái, hãy nhấp vào biểu tượng Cài đặt dự án Biểu tượng cài đặt dự án.

  13. Trong phần Mã nhận dạng, hãy sao chép mã nhận dạng tập lệnh để sử dụng ở bước sau.

Chạy tập lệnh

Để sử dụng thư viện, bạn phải có ít nhất quyền xem đối với dự án Apps Script của thư viện đó. Vì đã tạo thư viện nên bạn có các quyền cần thiết để sử dụng thư viện đó. Nếu bạn muốn cho phép người khác sử dụng thư viện, hãy cấp cho họ quyền xem dự án Apps Script.

Để sử dụng thư viện này, hãy làm theo các bước sau:

  1. Mở một bảng tính Google Trang tính có dữ liệu chứa các hàng trùng lặp. Để sử dụng bảng tính mẫu, hãy tạo bản sao của bảng tính Mẫu hàng trùng lặp.
  2. Nhấp vào Tiện ích > Apps Script.
  3. Bên cạnh Thư viện, hãy nhấp vào biểu tượng Thêm thư viện .
  4. Trong phần Mã tập lệnh, hãy dán mã tập lệnh từ dự án Apps Script của thư viện mà bạn đã sao chép ở phần trước.
  5. Nhấp vào Tìm kiếm.
  6. Trong phần Phiên bản, hãy chọn 1.
  7. Nhấp vào Thêm.
  8. Xoá mọi mã trong trình soạn thảo tập lệnh rồi dán mã bên dưới vào.

    function runLibrary() {
     Removeduplicaterows.removeDuplicates();
    }
    
  9. Trong trình đơn thả xuống hàm, hãy chọn runLibrary.

  10. Nhấp vào Chạy.

  11. Quay lại bảng tính để xem dữ liệu đã cập nhật mà không có hàng trùng lặp.

Xem lại mã

Để xem xét mã Apps Script cho giải pháp này, hãy nhấp vào Xem mã nguồn bên dưới:

Xem mã nguồn

Trước tiên, tập lệnh thực hiện một lệnh gọi duy nhất đến bảng tính để truy xuất tất cả dữ liệu. Bạn có thể chọn đọc từng hàng trong trang tính, nhưng các thao tác JavaScript sẽ nhanh hơn đáng kể so với việc giao tiếp với các dịch vụ khác như Trang tính. Bạn càng thực hiện ít lệnh gọi, quá trình này càng diễn ra nhanh. Điều này rất quan trọng vì mỗi lần thực thi tập lệnh có thời gian chạy tối đa là 6 phút.

sheets/removingDuplicates/removingDuplicates.gs
const sheet = SpreadsheetApp.getActiveSheet();
const data = sheet.getDataRange().getValues();

Biến data là một mảng 2 chiều JavaScript chứa tất cả các giá trị trong trang tính. newData là một mảng trống mà tập lệnh đặt tất cả các hàng không trùng lặp.

sheets/removingDuplicates/removingDuplicates.gs
const newData = Object.values(uniqueData);

Vòng lặp for đầu tiên lặp lại trên từng hàng trong mảng 2 chiều data. Đối với mỗi hàng, vòng lặp thứ hai sẽ kiểm tra xem một hàng khác có dữ liệu khớp có tồn tại trong mảng newData hay không. Nếu không phải là hàng trùng lặp, hàng đó sẽ được đẩy vào mảng newData.

sheets/removingDuplicates/removingDuplicates.gs
uniqueData[key] = uniqueData[key] || row;

Cuối cùng, tập lệnh sẽ xoá nội dung hiện có của trang tính và chèn nội dung của mảng newData.

sheets/removingDuplicates/removingDuplicates.gs
sheet.clearContents();
const newData = Object.values(uniqueData);
sheet.getRange(1, 1, newData.length, newData[0].length).setValues(newData);

Sửa đổi

Bạn có thể chỉnh sửa thư viện theo ý muốn để phù hợp với nhu cầu của mình. Dưới đây là một nội dung sửa đổi không bắt buộc.

Xoá các hàng có dữ liệu trùng khớp trong một số cột

Thay vì xoá hoàn toàn các hàng khớp, bạn nên xoá các hàng có dữ liệu khớp chỉ trong một hoặc hai cột. Để làm việc đó, bạn có thể thay đổi câu lệnh có điều kiện.

Trong mã mẫu, hãy cập nhật dòng sau:

    if(row.join() == newData[j].join()){
      duplicate = true;
    }

Thay thế dòng đó bằng mã sau:

    if(row[0] == newData[j][0] && row[1] == newData[j][1]){
      duplicate = true;
    }

Câu lệnh có điều kiện ở trên sẽ tìm thấy các giá trị trùng lặp mỗi khi hai hàng có cùng dữ liệu trong cột đầu tiên và cột thứ hai của trang tính.

Người đóng góp

Mẫu này do Romain Vialard, một Chuyên gia nhà phát triển của Google, tạo ra. Theo dõi Romain trên Twitter @romain_vialard.

Mẫu này do Google duy trì với sự trợ giúp của Chuyên gia phát triển của Google.

Các bước tiếp theo