25/10/2018, 09:00

Cách sửa file Excel bị nặng chậm, và gỡ bỏ mật khẩu bảo vệ

Với bài Bí kíp giảm cân tập 1, chúng ta biết cách để dùng công cụ ASAP cũng như cách thủ công để xóa bỏ đi các Object và Name trong file Excel. Tuy nhiên khi tập tin Excel đã có quá nhiều Text box, các Objects dư thừa, thì việc “giảm cân” thông qua công cụ sẽ không còn hiệu quả. Hôm ...

Với bài Bí kíp giảm cân tập 1, chúng ta biết cách để dùng công cụ ASAP cũng như cách thủ công để xóa bỏ đi các Object và Name trong file Excel. Tuy nhiên khi tập tin Excel đã có quá nhiều Text box, các Objects dư thừa, thì việc “giảm cân” thông qua công cụ sẽ không còn hiệu quả. Hôm nay, mình giới thiệu với các bạn một cách khác, sẽ giúp các bạn thao tác nhanh chóng hơn.

Trong khuôn khổ bài viết này có đề cập đến việc mở khóa mật khẩu bảo vệ sheet, mật khẩu bảo vệ cấu trúc workbook, và mật khẩu VBA áp dụng khi các bạn cần chỉnh sửa lấy lại file của mình khi bị quên mật khẩu. Mọi thao tác can thiệp vào tập tin của không phải của mình, các bạn sẽ phải tự chịu trách nhiệm với việc mình làm. Vì vậy, các bạn cũng nên cẩn trọng khi thao tác liên quan đến mật khẩu.

Và các ứng dụng cần thiết cho công việc này, các bạn có thể bấm vào link để download và cài đặt:

  • Phần mềm chỉnh sửa nội dung file xml: Notepad++.
  • Phần mềm giải nén và nén tập tin .zip, .rar: Winrar hoặc 7-zip.org
  • HexEdit: với phần mền HxD, dùng để chỉnh sửa file vbaProject.bin file mật khẩu VBA.

Nào chúng ta cùng bắt đầu tìm hiểu nhé!

  1. Tập tin Office đều lưu trữ theo XML, đổi tên và giải nén.

    Các tập tin Office (Excel, Word, PowerPoint) thực ra đều là một file được nén lại từ rất nhiều file khác, và nội dung file lưu theo chuẩn XML. Nói vậy nghĩa là sao? Có bao giờ bạn thử đổi tên mở rộng của file Office thành .zip và giải nén chúng chưa? Ví dụ bạn có tập tin: File-Excel.xlsx, bạn thử đổi phần .xlsx (phần mở rộng) thành .zip và giải nén ra thành thư mục.


    Trường hợp nếu trong My Computer bạn không thấy phần mở rộng của file, thì bạn cần chọn [x] File name extensions (Nếu bạn dùng Windows phiên bản thấp hơn, bạn sẽ tìm thấy ở phần Folder Options).

    Sau khi xuất ra, bạn đã có thư mục tuần tự như sau, việc của chúng ta sẽ quan tâm đến các file theo tuần tự sau:


    Lúc này chúng ta quan tâm đến các tập tin, thư mục sau:

    1. workbook.xml: File chứa thông tin về Workbook, nơi chứa name và mật khẩu protect structure.
      • Protect Workbook:


        Với file này, chúng ta sẽ tìm thấy dữ liệu liên quan đến cấu trúc file, và đặc biệt là đây là nơi chứa mật khẩu Protect Workbook. Protect Workbook Structure: nhằm hạn chế người dùng thay đổi cấu trúc file ví dụ như không cho thay đổi tên Sheet, hoặc di chuyển sắp xếp các sheet v.v… Lưu ý: phần này khác với mật khẩu khi mở file và mật khẩu hỏi khi mở file không đề cập đến trong bài viết này.

        Để sửa file này và gỡ bỏ đi mật khẩu Protect Workbook này, chúng ta làm tuần tự theo các bước sau:

        Bước 1: Chúng ta click phải vào file workbook.xml, chọn Open with Notepad++.

        Bước 2: Tìm đoạn “<workbookProtection …/>”, và xóa đi.

        Bước 3: Lưu file workbook.xml đã chỉnh sửa.


        Vậy là chúng ta đã tiến hành bỏ đi mật khẩu bảo vệ workbook. Và lưu ý khi xóa phải đúng tag của workbookProtection, cấu trúc tag thường mở đầu “<workbookProtection” và kết thúc bằng “/>“.

      • Name rác

        Các name rác vì sao lại xuất hiện? Phần là vì virus, phần còn lại do chính chúng ta “xả rác” mà không hay biết! Vì thao tác sao chép, move/copy sheet, hoặc copy dữ liệu rồi dáng, vô tình kéo theo các “đồng chí mang bí danh” lúc nào không hay biết.  Các name sẽ là “<definedName>[…]</definedName>“, và Name rác thường là có lỗi: “<definedName>#REF</definedName>“.

        Để tìm và thay thế nhanh chóng, chúng ta làm theo các bước sau

        Bước 1: Mở file Workbook.xml với Notepad++. Đặt dấu con trỏ ngay vị trí đầu tiên của file (ngay trước “<?xml”).

        Bước 2: Nhấn CTRL+H (tìm và thay thế), sau đó chọn ở phần [x] Regular Expression trong phần Search Mode.

        Bước 3: Tìm với từ khóa sau: “(<definedNames.*>#REF!</definedName>)“. (Không bao gồm dấu nháy kép “”)

        Bước 4: Sau đó tìm kiếm thử, tìm thấy sẽ được đánh dấu (highlight), và bạn chọn Replace All (nhấn ALT + A).

        Bước 5: Lưu file lại Workbook.xml, và đóng Notepad++.

    2. vbaProject.bin: File chứa thông tin về VBA Projects.

      Để tiến hành bỏ mật khẩu VBA Project, các bạn có thể làm theo các bước sau:

      Bước 1: Mở file vbaProject.bin với ứng dụng HxD Hex Editor.
      (ở đây mình cài HxD có biểu tượng sẵn HxD chỉ cần double click để mở, hoặc click phải chọn Open With và tìm ứng dụng HxD Hex Editor.)

      Bước 2: Nhấn Ctrl+F tìm từ khóa: “DPB” và sửa chữ “DPB” thành “DPx”.

      Bước 3: Lưu lại, và đóng ứng dụng HxD

      Bước 4: Sau khi nén lại file, mở file Excel nếu gặp thông báo bạn chọn Yes, nếu có thông báo tiếp bạn chọn OK.

      Bước 5: Nhấn ALT+F11 để mở cửa sổ Visual Basic.

      Bước 6: Click phải vào tên file, chọn VBA Projects Properties… Chọn tab Protection, và bỏ chọn [ ] “Lock project for viewing”. Vậy là xong, lưu và đóng file.


      Vậy là chúng ta đã bỏ được mật khẩu VBA Project.

    3. drawingsdrawing[…].xml và sheetssheet[…].xml: File chứa thông tin về các đối tượng object, textbox.

      Đây chính nơi là các file chứa các object (các textbox, hình ảnh). Vì sao lại là xảy ra tình trạng gọi là “rác”. Là vì mặc định các textbox, hoặc các hình ảnh sẽ tự động thu nhỏ (resize) theo các dòng cột, khi bạn ẩn dòng cột đi, thì vô tình các textbox, hình ảnh cũng bị thay đổi kích thước theo. Và lúc này kích thước các textbox gần như là 0, nên chúng ta không thể nhìn thấy được, và lại nằm lẫn trong ô, nên khi kéo công thức xuống, vô tình các hình ảnh cũng tự sao chép ra.

      Vậy, làm sao để xóa sửa việc này? Tương ứng với các objects trong mỗi sheet[…].xml tương ứng với mỗi file drawing[…].xml, trong sheet[…].xml sẽ có chỗ chứa sẽ là “<drawing …/>“. Để xóa nội dung đi, ta làm tương tự với workbook.xml [phần 1], sẽ mở tuần tự các file sheet[..].xml ra và tìm xóa đi các đoạn chứa “<drawing… />“.

      Để xóa nhanh chóng, chúng ta làm tuần tự theo các bước sau:
      Bước 1: Chọn tất cả các file sheet[…].xml trong thư mục sheets, click phải chọn Open with Notepad++.

      Bước 2: Nhấn CTRL+H, và chọn [x] RegEx ở Search Mode.

      Bước 3: Tìm đoạn sau: “(<drawing r:id=”.*”/>)” (không bao gồm dấu nháy kép).

      Bước 4: Nhấn Replace All in Opened Documents (Phím tắt ALT + O).

      Bước 5: Chọn File => Save All (hoặc nhấn CTRL+SHIFT+S) và đóng Notepad++ lại.

      Bước 6: Chúng ta tìm đến trong thư mục drawings

      Bước 7: Xóa hết tất cả các file bên trong. Vậy là xong.

      Ảnh minh họa thao tác Bước 1 -> Bước 4

      Ảnh minh họa bước 7

      Sau khi nén lại file, và mở với Excel, bạn sẽ gặp lần lượt các thông báo sau.

      Cuối cùng, là bạn đã loại bỏ đi toàn bộ các object dư thừa, không cần thiết. Nếu bạn có Object cần sử dụng, thì có thể tạo lại, hoặc tìm xóa thủ công những cái không dùng. Thao tác trên sẽ xóa đi toàn bộ object trong file Excel.

    4. sheetssheet[…].xml: Gỡ bỏ sheet protection mà không cần mật khẩu.

      Đôi khi chúng ta đặt mật khẩu bảo vệ sheet, rồi sau đó, chúng ta lại quên mất, vậy làm sao để bỏ đi để chỉnh sửa lại file? Rất đơn giản với các bước sau:

      Bước 1: Chọn tất cả sheet[…].xml trong thư mục sheets, và Mở với Notepad++.

      Bước 2: Bạn nhấn CTRL+H để mở công cụ Find & Replace trong Notepad++.

      Bước 3: Vẫn như trên, bạn chọn [x] Regular Expenssion trong Search Mode.

      Bước 4: Tìm theo từ khóa: “<sheetProtection .*/>” (không bao gồm dấu nháy kép).

      Bước 5: Chọn Replace All in All Opened Documents (nhấn ALT+O).

      Bước 6: Nhấn CTRL+SHIFT+S, hoặc chọn File => Save all để lưu lại tất cả.

  2. Đóng gói file lại với định dạng file .zip, và đổi tên như cũ.

    Sau khi hoàn tất các phần bên trên, bạn có thể làm tất cả hoặc chỉ một trong các đề mục nhỏ bên trên. Sau khi hoàn tất phần trên, chúng ta làm theo các bước sau:

    Bước 1: Ra ngoài thư mục chứa sau khi giải nén ban đầu. Chọn tất cả các file, và chọn 7zip -> Chọn Add to “[tên file…].zip”. Để nén lại toàn bộ thư mục và file vào trong file .zip.

    Bước 2: Tiến hành đổi tên và mở file. Lưu ý, file bạn ban đầu theo định dạng thế nào thì đổi lại như vậy. (Nếu ban đầu là: .xlsx, thì sẽ là .xlsx, tương tự .xlsm, sẽ là .xlsm).

  3. File .xlsb thì không giống cho lắm? Phải làm sao?

    Với file theo định dạng Binary, bạn mở ra sẽ không tìm thấy .xml mà chỉ thấy .bin, vậy làm sao để sửa?
    Đơn giản, hãy mở file và lưu lại với định dạng .xlsx, hoặc .xlsm (nếu có macro) để thực hiện các việc trên. Xong xuôi, ta lại lưu trở lại .xlsb.

  4. Có cách nào nhanh hơn không? Có VBA!

    Với VBA bạn hoàn toàn có thể làm việc này chỉ với cái click chuột để thực hiện toàn bộ các việc trên.
    Cùng đón chờ tập 3, với VBA.

0