Защитите лист Excel с помощью AllowFormattingCells, используя python win32com - PullRequest
0 голосов
/ 28 апреля 2020

Я использую python с win32com для работы Excel с целью автоматизации некоторых работ.

Я пытаюсь защитить Excel, но разрешаю форматирование ячеек с помощью AllowFormattingCells=True

Однако это не смогли. Я пока не могу изменить шрифт или цвет ячеек.

Вот мой сценарий

# to Protect excel sheet with password if given
# or to UnProtect excel sheet with password if given

import argparse
import win32com.client
import os
import glob

if __name__ == '__main__':

    parser = argparse.ArgumentParser(description='Protect/Unprotect sheet of Project file')
    parser.add_argument('excel_files', nargs='+',help='Work sheet Excel files(support wildcards *?)')
    parser.add_argument('-p','--password', help='password')
    parser.add_argument('-u','--unlock', action='store_true',help='Unprotect Work sheet Excel files(default false)')

    args=parser.parse_args()
    src_excel_files=args.excel_files
    password=args.password
    unlock =args.unlock

    excel_files=[]
    for src in src_excel_files:
        excel_files+=glob.glob(src)
    # remove duplicate
    excel_files=list(dict.fromkeys(excel_files))

    app = win32com.client.Dispatch("Excel.Application")
    for file in excel_files:
        abspath = os.path.abspath(file)
        print('Open file %s ...'%(abspath),end='')
        try:
            wb = app.Workbooks.Open(abspath, UpdateLinks=0)
            sheet = wb.Worksheets("Sheet1")
        except:
            print('Failed')
            continue

        if sheet.ProtectContents:
            print('Locked-->',end='')
        else:
            print('Unlocked-->',end='')


        if unlock:
            try:
                if password is None:
                    sheet.UnProtect()
                else:
                    sheet.UnProtect(Password=password)
            except:
                pass
        else:
            try:
                if password is None:
                    sheet.Protect(AllowFormattingCells=True, AllowFormattingColumns=True,AllowFormattingRows=True)
                else:
                    sheet.Protect(Password=password,AllowFormattingCells=True, AllowFormattingColumns=True,AllowFormattingRows=True)
            except:
                pass

        if sheet.ProtectContents:
            print('Locked, \tAllowFormattingCells=',sheet.Protection.AllowFormattingCells)
        else:
            print('Unlocked')

        wb.Save()
        wb.Close()

    app.quit()

    print('END')


Может ли кто-нибудь мне помочь?

Спасибо.

...