Я создаю простую структуру для создания отчетов по документам 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...
Хотя это сработало, процесс поиска ошибок приводит к моему вопросу: есть ли способ отлаживать и / или проверять XML-код Microsoft Word, сгенерированный python-docx? Что касается проверки, есть ли способ проверить, что файл docx, созданный с помощью python-docx, действителен и может быть открыт в Microsoft Word (без необходимости открывать его с помощью Word)? Что касается отладки, есть ли способ, которым я могу просмотреть и отладить XML-код docx, чтобы определить, где находится проблема (и, возможно, получить некоторые подсказки относительно того, где проблема возникает в коде Python)? Такой инструмент или метод, вероятно, сэкономили бы мне значительное количество времени в поиске ошибок, который я описал выше, и, возможно, также сэкономит мне время в будущем. Большое спасибо за ваше время и мысли.