2. 加解密execl表

要求:

  • 操作excel
  • 加解密excel某行数据
  • 加解密excel某列数据
#!/usr/bin/python
# _*_ coding: utf-8 _*_
"""
@Author  : summer
@File    : 加解密.py
@Software: PyCharm
"""

import os
import base64
import openpyxl


class encryption_decryption():
    def __init__(self, filename, sheet_name="Sheet1", row=None, column=None):
        self.filename = filename
        self.row = row
        self.column = column
        self.sheet_name = sheet_name
        self.row = row
        self.wb = None
        if not self.check_filename():
            exit("%s 文件不在" % self.filename)

    def check_filename(self):
        flag = False
        if os.path.exists(self.filename):
            wb = openpyxl.load_workbook(self.filename)
            self.wb = wb
            flag = True
        return flag

    # 加密某行数据
    def encryption_row(self):
        sheet = self.wb[self.sheet_name]         # 获取到哪一页
        for cell in list(sheet.rows)[self.row]:  # 第row行
            cell.value = base64.b64encode(str(cell.value).encode('UTF-8'))
        self.wb.save('加密行.xlsx')

    # 解密某行数据
    def decryption_row(self):
        sheet = self.wb[self.sheet_name]         # 获取到哪一页
        for cell in list(sheet.rows)[self.row]:  # 第row行
            cell.value = str(base64.b64decode(cell.value), 'utf-8')
        self.wb.save('解密行.xlsx')

    # 加密某列数据
    def encryption_column(self):
        sheet = self.wb[self.sheet_name]
        for cell in list(sheet.columns)[self.column]:  # 第column列
            cell.value = base64.b64encode(str(cell.value).encode('UTF-8'))
        self.wb.save('加密列.xlsx')

    # 解密某列数据
    def decryption_column(self):
        sheet = self.wb[self.sheet_name]
        for cell in list(sheet.columns)[self.column]:  # 第column列
            cell.value = str(base64.b64decode(str(cell.value)), 'utf-8')
            self.wb.save('解密列.xlsx')


if __name__ == '__main__':

    # 加密某行
    obj = encryption_decryption(r".\example.xlsx", "Sheet1", row=2)
    obj.encryption_row()
    # 解密某行
    obj.decryption_row()

    # 加密某列
    obj = encryption_decryption(r".\example.xlsx", column=2)
    obj.encryption_column()
    # 解密某列
    obj.decryption_column()

改进版

#!/usr/bin/python
# _*_ coding: utf-8 _*_
"""
@Time    : 2019/1/23 16:22
@File    : 加解密.py
@Software: PyCharm
"""

import os
import base64
import openpyxl


class encryption_decryption():
    def __init__(self, filename, sheet_name="Sheet1", row=None, column=None):
        self.filename = filename
        self.row = row
        self.column = column
        self.sheet_name = sheet_name
        self.row = row
        self.wb = None
        if not self.check_filename():
            exit("%s 文件不在" % self.filename)

    def check_filename(self):
        if os.path.exists(self.filename):
            self.wb = openpyxl.load_workbook(self.filename)
            return True
        return False

    def base(self, col_row, mode, outfilename):
        sheet = self.wb[self.sheet_name]  # 获取到哪一页
        if col_row == "行":  # 行
            for cell in list(sheet.rows)[self.row]:
                if mode == "加密":
                    cell.value = base64.b64encode(str(cell.value).encode('UTF-8'))
                elif mode == "解密":
                    cell.value = str(base64.b64decode(cell.value), 'utf-8')
                else:
                    exit("编码方式不对。只能有,加密encrypt和解密decrypt")
        elif col_row == "列":
            for cell in list(sheet.columns)[self.column]:  # 第column列
                if mode == "加密":
                    cell.value = base64.b64encode(str(cell.value).encode('UTF-8'))
                elif mode == "解密":
                    cell.value = str(base64.b64decode(str(cell.value)), 'utf-8')
                else:
                    exit("编码方式不对。只能有,加密encrypt和解密decrypt")
        else:
            exit("行列不对。只能有选择加密行或者加密列")
        self.wb.save(outfilename)

    def data(self, col_row, mode, outfilename):
        self.base(col_row, mode, outfilename)


if __name__ == '__main__':

    # 加解密行
    obj = encryption_decryption(r".\example.xlsx", "Sheet1", row=2)
    obj.data("行", "加密", "加密行测试.xlsx")
    obj.data("行", "解密", "解密行测试.xlsx")

    # 加解密列
    obj = encryption_decryption(r".\example.xlsx", "Sheet1", column=2)
    obj.data("列", "加密", "加密列测试.xlsx")
    obj.data("列", "解密", "解密列测试.xlsx")