Hướng dẫn python open password protected excel file pandas - python mở mật khẩu bảo vệ tập tin excel pandas

Dựa trên đề xuất được cung cấp bởi @ikeoddy, điều này sẽ đặt các mảnh lại với nhau:

Làm thế nào để mở tệp excel được bảo vệ bằng mật khẩu bằng Python?

# Import modules
import pandas as pd
import win32com.client
import os
import getpass

# Name file variables
file_path = r'your_file_path'
file_name = r'your_file_name.extension'

full_name = os.path.join(file_path, file_name)
# print(full_name)

Nhận nhập mật khẩu dòng lệnh trong Python

# You are prompted to provide the password to open the file
xl_app = win32com.client.Dispatch('Excel.Application')
pwd = getpass.getpass('Enter file password: ')

Sách bài tập.Open Phương pháp (Excel)

xl_wb = xl_app.Workbooks.Open(full_name, False, True, None, pwd)
xl_app.Visible = False
xl_sh = xl_wb.Worksheets('your_sheet_name')

# Get last_row
row_num = 0
cell_val = ''
while cell_val != None:
    row_num += 1
    cell_val = xl_sh.Cells(row_num, 1).Value
    # print(row_num, '|', cell_val, type(cell_val))
last_row = row_num - 1
# print(last_row)

# Get last_column
col_num = 0
cell_val = ''
while cell_val != None:
    col_num += 1
    cell_val = xl_sh.Cells(1, col_num).Value
    # print(col_num, '|', cell_val, type(cell_val))
last_col = col_num - 1
# print(last_col)

Câu trả lời của Ikeoddy:

content = xl_sh.Range(xl_sh.Cells(1, 1), xl_sh.Cells(last_row, last_col)).Value
# list(content)
df = pd.DataFrame(list(content[1:]), columns=content[0])
df.head()

Python win32 com đóng cửa sổ làm việc excel

xl_wb.Close(False)

Nếu bạn đang cố gắng sử dụng gấu trúc để đọc tệp excel được mã hóa mật khẩu và nhận được thông báo sau:

xlrd.biffh.XLRDError: Can't find workbook in OLE2 compound document

Sau đó, bạn đã đến đúng nơi! Thông báo này có nghĩa là chúng tôi đang cố gắng đọc một tệp được mã hóa mật khẩu mà không cung cấp mật khẩu. Trong hướng dẫn ngắn này, tôi sẽ chỉ cho bạn cách đọc tệp Excel được mã hóa bằng mật khẩu vào gấu trúc.

Thư viện

Giải pháp tốt nhất mà tôi đã tìm thấy cho đến nay là thư viện MSOFFCRYPTO. Mặc dù tên của nó, thư viện này không liên quan gì đến tiền điện tửmsoffcrypto library. Despite its name, this library has nothing to do with cryptocurrency…

Chúng tôi sẽ sử dụng PIP để cài đặt nó, lưu ý tên cài đặt msoffcrypto-tool:msoffcrypto-tool:

pip install msoffcrypto-tool

Đọc tệp excel được mã hóa trực tiếp vào gấu trúc

Thư viện MSOFFCRYPTO có phương thức load_key () để chuẩn bị mật khẩu cho tệp excel. Sau đó, phương thức giải mã () mở khóa tệp và lưu nó vào đĩa.msoffcrypto library has a method load_key() to prepare password for the Excel file. Then the decrypt() method unlocks the file and saves it to disk.

Vì chúng tôi muốn đọc tệp excel được mã hóa trực tiếp vào gấu trúc, việc lưu vào đĩa sẽ không hiệu quả. Do đó, chúng ta có thể viết nội dung tệp tạm thời vào bộ đệm trong bộ nhớ (RAM). Để làm điều này, chúng tôi sẽ cần sử dụng thư viện IO.io library.

import msoffcrypto
import io
import pandas as pd

temp = io.BytesIO()

IO.Bytesio () cho phép viết nội dung cho buff trong bộ nhớ (RAM). Điều này giúp xử lý tệp nhanh hơn nhiều so với ghi vào đĩa.io.BytesIO() allows writing contents to an in-memory buff (RAM). This helps process the file much faster than writing to the disk.

Hướng dẫn python open password protected excel file pandas - python mở mật khẩu bảo vệ tập tin excel pandas
Một tin nhắn bí mật bên trong một tệp excel

Trong ví dụ của chúng tôi, mật khẩu là ‘1234, hãy đảm bảo thay thế nó bằng mật khẩu của riêng bạn khi bạn kiểm tra mã này. Đoạn mã dưới đây mở tệp Excel được mã hóa Secret Secret.xlsx, ở định dạng nhị phân bằng chế độ ‘RB, mở khóa tệp, sau đó lưu nội dung (tệp Excel) vào vị trí bộ đệm trong bộ nhớ (RAM) được gọi là TEMP.temp.

with open('secret.xlsx', 'rb') as f:
    excel = msoffcrypto.OfficeFile(f)
    excel.load_key('1234')
    excel.decrypt(temp)

Bây giờ, nhiệt độ này là tệp Excel Target của chúng tôi với mật khẩu bị tước. Chúng ta có thể tiến hành với pd.read_excel () bình thường để đọc nó!temp is our target Excel file with password stripped. We can proceed with the normal pd.read_excel() to read it!

Hướng dẫn python open password protected excel file pandas - python mở mật khẩu bảo vệ tập tin excel pandas
Đọc tệp excel bằng gấu trúc

Đặt nó lại với nhau

Ở đây bạn có nó, một tập lệnh ngắn và ngọt ngào để đọc các tệp excel được mã hóa trực tiếp vào gấu trúc, lưu ý chúng tôi chưa sửa đổi tệp excel gốc cũng như không tạo các tệp không cần thiết trên đĩa trong quá trình!

import msoffcrypto
import io
import pandas as pd

temp = io.BytesIO()

with open('secret.xlsx', 'rb') as f:
    excel = msoffcrypto.OfficeFile(f)
    excel.load_key('1234')
    excel.decrypt(temp)

df = pd.read_excel(temp)
del temp

Làm cách nào để mở tệp Excel được bảo vệ mật khẩu?

Làm thế nào để không được bảo vệ bảng excel bằng mật khẩu..
Nhấp chuột phải vào tab tờ và chọn bảng không được bảo vệ từ menu ngữ cảnh ..
Trên tab Đánh giá, trong nhóm thay đổi, nhấp vào bảng không được bảo vệ ..
Trên tab Home, trong nhóm ô, nhấp vào định dạng và chọn bảng không được bảo vệ từ menu thả xuống ..

Pandas có thể đọc một tệp excel mở không?

Đọc một tập tin Excel vào một bản dữ liệu gấu trúc.Hỗ trợ XLS, XLSX, XLSM, XLSB, ODF, ODF và Tệp ODT được đọc từ hệ thống tập tin hoặc URL cục bộ.Hỗ trợ một tùy chọn để đọc một tờ hoặc một danh sách các tờ.. Supports xls , xlsx , xlsm , xlsb , odf , ods and odt file extensions read from a local filesystem or URL. Supports an option to read a single sheet or a list of sheets.

Pandas có tốt cho Excel không?

Tốc độ - Pandas nhanh hơn nhiều so với Excel, điều này đặc biệt đáng chú ý khi làm việc với số lượng dữ liệu lớn hơn.Tự động hóa - Rất nhiều nhiệm vụ có thể đạt được với gấu trúc là cực kỳ dễ dàng để tự động hóa, giảm số lượng các nhiệm vụ tẻ nhạt và lặp đi lặp lại cần được thực hiện hàng ngày.Pandas is much faster than Excel, which is especially noticeable when working with larger quantities of data. Automation - A lot of the tasks that can be achieved with Pandas are extremely easy to automate, reducing the amount of tedious and repetitive tasks that need to be performed daily.