Я создаю простую инфраструктуру для создания отчетов документов Microsoft Word с использованием библиотеки python -docx. Иногда, когда я генерирую документ, я сталкиваюсь с проблемой, при которой файл docx успешно генерируется python -docx, но затем файл docx не открывается в Microsoft Word и появляется сообщение об ошибке, подобное этому: Сообщение «Неуказанная ошибка» в Microsoft Word
Прорабатывая мой код шаг за шагом - постепенно вставляя все больше и больше содержимого в документ python -docx, а затем пытаясь открывать сгенерированный файл docx после каждого добавление контента - я смог идентифицировать код, который вызывал ошибку. Как оказалось, ошибка была вызвана тем, что я попытался вставить пустой pandas кадр данных, используя следующий код:
def insert_as_table(df: pd.DataFrame, document: Document) -> Document:
# compute parameters
n_rows = len(df) + 1
n_cols = len(df.columns)
# create table object
table = document.add_table(rows=n_rows, cols=n_cols)
# fill header cells with text
for header_cell, col in zip(table.rows[0].cells, df.columns):
header_cell.text = str(col)
# fill cells with strings
for i, row in df.iterrows():
for table_cell, (j, data) in zip(table.rows[i + 1].cells, row.iteritems()):
table_cell.text = str(data)
return document
Мое решение состояло в том, чтобы добавить проверку входных данных - проверить, что кадр данных не был пустым до при попытке вставить его:
def insert_as_table(df: pd.DataFrame, document: Document) -> Document:
if df.empty:
raise ValueError('df is empty. Cannot insert an empty dataframe as a table.')
etc...
Хотя это сработало, процесс поиска ошибок приводит к моему вопросу: есть ли способ отладки и / или проверки кода Microsoft Word XML, сгенерированного python -docx? Что касается проверки, могу ли я проверить, что файл docx, сгенерированный python -docx, действителен и сможет быть открыт в Microsoft Word (без необходимости открывать его с помощью Word)? Что касается отладки, есть ли способ, которым я могу просмотреть и отладить код docx XML, чтобы определить, где находится проблема (и, возможно, получить некоторые подсказки относительно того, где проблема генерируется в коде Python)? Такой инструмент или метод, скорее всего, сэкономили бы мне значительное количество времени на поиске ошибок, которые я описал выше, и, возможно, сэкономят мне время и в будущем. Большое спасибо за ваше время и мысли.