Файл Excel поврежден при попытке изменить 1 ячейку с помощью python openpyxl. - PullRequest
0 голосов
/ 15 ноября 2018

Я пытаюсь изменить 1 ячейку в файле Excel 2013 с поддержкой макросов, используя openpyxl. Это должно быть относительно простой задачей. У меня есть следующий код, который работает, но по какой-то причине, когда я позже пытаюсь открыть измененный файл Excel, я получаю сообщение об ошибке из Excel.

"Мы нашли проблему с некоторым содержимым в" книге ", которую вы хотите восстановить?"

если я восстановлю файл, он удалит много содержимого из файла, но я все еще вижу, что единственная ячейка, которую я хотел изменить, содержит правильные данные.

когда я открываю журнал ошибок, я получаю следующее сообщение:

<?xml version="1.0" encoding="UTF-8" standalone="true"?>
-<recoveryLog xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
<logFileName>error086600_01.xml</logFileName>
<summary>Errors were detected in file 'C:\Files\2018 Workflow\Stress Due Date (NA) --- TR9999999 Pckg#9 - Emergency Equipment - 9 - 9 - 9\Panel Analysis --- 9 Version A.xlsm'</summary>
-<repairedParts summary="Following is a list of repairs:">
<repairedPart xml:space="preserve">Repaired Part: /xl/worksheets/sheet1.xml part. </repairedPart>
 </repairedParts>
 </recoveryLog>

Ниже приведен мой код на python, я просмотрел документацию и похоже, что он должен работать, но почему он портит мои файлы?

""" 
The next part of the script will modify the stress panel excel documents 
"""    
wb = load_workbook(filename = os.path.join(new_path,new_panel + excel_ext), read_only = False, keep_vba = True) 
ws = wb.get_sheet_by_name("Adapter_Panel_Tool")
ws['C2'] = "Adapter Panel Quick Stress Analyses Tool - " +  packet_list['Installations list'][0]
wb.save(os.path.join(new_path,new_panel  + " Version A" + excel_ext))
wb.close()


#checks if there are 2 files: the filled one and the empty one and deletes the empty if it exist. 
is_file_filled_out = os.path.isfile(os.path.join(new_path,new_panel + " Version A" +  excel_ext))
is_there_empty_file = os.path.isfile(os.path.join(new_path, new_panel + excel_ext))
if is_file_filled_out == True and is_there_empty_file == True:
    os.remove(os.path.join(new_path,new_panel + excel_ext))
    print("\n\n The following file will be remove: \n" + new_panel + excel_ext + "\n\n" )
    print("The prefilled template has been created: \n " + new_path + new_panel + excel_ext)

1 Ответ

0 голосов
/ 28 ноября 2018

Прежде всего, попробуйте открыть файл Excel в безопасном режиме. Если он откроется, вы работаете над надстройкой COM. Попробуйте удалить их, а затем откройте файл.

...