Есть ли способ скопировать содержимое файла Word в список для дальнейшего использования? - PullRequest
0 голосов
/ 16 апреля 2019

Я пытаюсь скопировать содержимое файла слова в список, к которому я смогу получить доступ позже, чтобы вставить его в новый файл слова.Проще говоря, я пытаюсь использовать функцию, которая выполняет копирование и вставку выделения из документа Word одновременно.Проблема, с которой я сталкиваюсь, заключается в пустых «линиях» / промежутках между разделами.Этот интервал важен для макета документа.Я могу скопировать строки, которые содержат объекты и числа, но когда дело доходит до пустой строки.Выкладывает ошибку.

Я искал решение на этом и других форумах и не нашел ничего, имеющего отношение к этой конкретной проблеме

import tkinter as tk
from tkinter.filedialog import askopenfilename
from docx import Document  # Invokes Document command from docx


def get_para_data(output_doc_name, paragraph):
"""
Write the run to the new file and then set its font, bold, alignment, 
color etc. data.
"""

output_para = output_doc_name.add_paragraph()
    for run in paragraph.runs:
        output_run = output_para.add_run(run.text)
        # Run's bold data
        output_run.bold = run.bold
        # Run's italic data
        output_run.italic = run.italic
        # Run's underline data
        output_run.underline = run.underline
        # Run's color data
        output_run.font.color.rgb = run.font.color.rgb
        # Run's font data
        output_run.style.name = run.style.name
        # Paragraph's alignment data
        output_para.paragraph_format.alignment = 
        paragraph.paragraph_format.alignment
return output_run
n = 4

# IMPORT WORD DOCUMENT
root = tk.Tk()
root.withdraw()
doc_path = askopenfilename(title="Choose Word File")  # returns the file 
path as variable for future use
document = Document(doc_path)  # Imports Word Document to Modify
t = len(document.paragraphs)  # gives the number of lines in document
print('Total Number of lines =', t)  # this is a check for now
result = Document()
output_paragraph = [None]*t
i = 0
for para in document.paragraphs:
    output_paragraph[i] = get_para_data(result, document.paragraphs[i])
    i += 1

Первая итерация проходит отлично, но как только мы получаемко второй итерации и пустой строке вылетает и выдает несколько ошибок.

Traceback (последний вызов был последним): файл "C: \ Program Files \ JetBrains \ PyCharm Community Edition 2018.3.2 \ helpers \ pydev \ pydevd.py", строка 1741, в main ()

Файл "C: \ Program Files \ JetBrains \ PyCharm Community Edition 2018.3.2 \ helpers \ pydev \ pydevd.py", строка 1735, в main globals = debugger.run (setup ['file'],Нет, нет, is_module)

Файл "C: \ Program Files \ JetBrains \ PyCharm Community Edition 2018.3.2 \ helpers \ pydev \ pydevd.py", строка 1135, в файле pydev_imports.execfile (файл, глобальные переменные), местные жители) # выполнить скрипт

Файл "C: \ Program Files \ JetBrains \ PyCharm Community Edition 2018.3.2 \ helpers \ pydev_pydev_imps_pydev_execfile.py", строка 18, в execfile exec (compile (contents + "\ n)", file, 'exec'), glob, loc)

Файл" C: /Users/SmithC113/PycharmProjects/ASCII_Word/point_creator.py ", строка 51, в output_para [i] = get_para_data (результат,document.paragraphs [i])

Файл "C: /Users/SmithC113/PycharmProjects/ASCII_Word/point_creator.py", строка 35,в get_para_data return output_run UnboundLocalError: локальная переменная 'output_run', на которую ссылается перед присваиванием

1 Ответ

0 голосов
/ 24 апреля 2019

Добавление оператора if для идентификации пустого абзаца и присвоения значения [Нет]. Исправлена ​​проблема.

    import tkinter as tk
    from tkinter.filedialog import askopenfilename
    from docx import Document  # Invokes Document command from docx


    def get_para_data(output_doc_name, paragraph):
    """
    Write the run to the new file and then set its font, bold, alignment, color etc. 
    data.
    """
    output_run = []
    output_para = output_doc_name.add_paragraph()
    for run in paragraph.runs:
        if paragraph:
            output_run = output_para.add_run(run.text)
            # Run's bold data
            output_run.bold = run.bold
            # Run's italic data
            output_run.italic = run.italic
            # Run's underline data
            output_run.underline = run.underline
            # Run's color data
            output_run.font.color.rgb = run.font.color.rgb
            # Run's font data
            output_run.style.name = run.style.name
            # Paragraph's alignment data
            output_para.paragraph_format.alignment = paragraph.paragraph_format.alignment
        else:
            output_run = [None]
     return output_run


n = 4
# IMPORT WORD DOCUMENT
root = tk.Tk()
root.withdraw()
doc_path = askopenfilename(title="Choose Word File")  # returns the file path as 
variable for future use
document = Document(doc_path)  # Imports Word Document to Modify
t = len(document.paragraphs)  # gives the number of lines in document
print('Total Number of lines =', t)  # this is a check for now
result = Document()
output_paragraph = [None]*t
i = 0
for para in document.paragraphs:
    output_paragraph[i] = get_para_data(result, document.paragraphs[i])
    i += 1
...