b791611879 2019-06-23 19:22 采纳率: 0%
浏览 883

为什么我创建一个已有的word 对象,添加段落时,如果有段落样式的时候就报错

from docx import Document # 导入docx基础库
from docx.enum.style import WD_STYLE_TYPE # 样式库
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT # 对齐式库
from docx.shared import Pt # 单独调整几个字的样式
import os
import time

class WordOperate:
"""
World相关操作
"""
def init(self, failename=None):
"""
初始化函数
:failename:文件路径
"""
self.failename = failename
self.save_path = os.path.join(os.getcwd(), str(time.strftime('%Y%m%d%H%M%S',time.localtime(time.time()))), r'new_doc'+r'.docx')
if failename is None:
self.doc = Document()
else:
self.doc = Document(self.failename)

def read_text(self):
    """
    读取文档中text段落,返回list
    """
    try:
        paragraph_list = []
        for paragraph in self.doc.paragraphs:
            paragraph_list.append(paragraph.text)
        return paragraph_list
    except Exception as e:
        return print(e)

def read_table(self):
    """
    读取文档中表格,返回list
    返回格式[table[行[列数据]]]
    """
    try:
        tables = self.doc.tables
        table_rsult = []
        for i in range(len(tables)):
            table = tables[i]
            table_text = WordOperate.read_table_rows(table)
            table_rsult.append(table_text)
        return table_rsult
    except Exception as e:
        return print(e)

def read_table_rows(table):
    """
    读取table所有行数据
    """
    reust = []
    for rows in range(len(table.rows)):
        result_rows = WordOperate.read_table_columns(rows, table)
        reust.append(result_rows)
    return reust

def read_table_columns(rows, table):
    """
    读取一行所有列数据
    """
    result_rows = []
    for columns in range(len(table.columns)):
        result_row = table.cell(rows, columns).text
        result_rows.append(result_row)
    return result_rows

def write_heading(self, text, level=0):
    """
    添加标题
    :text:标题内容
    :level:标题级别,默认为0
    """
    self.doc.add_heading(text, level=level)

def write_paragraph(self, text, style='Normal'):
    """
    添加段落
    :text:段落内容
    :style:段落样式,默认Normal
    查看样式调用 search_paragraph_styles
    """
    paragraph = self.doc.add_paragraph(text, style=style)
    return paragraph

def write_text(self, text, paragraph, style=None):
    """
    段落后添加文字
    :text:文字内容
    :paragraph:需要追加文字的段落
    :style:文字样式,默认Title Char
    查看样式调用 search_character_styles
    """
    if style is None:
        text = paragraph.add_run(text)
    else:
        text = paragraph.add_run(text, style=style)
    return text

def search_paragraph_styles(self):
    """
    查看段落样式调用
    """
    print('以下为段落样式:')
    for s in self.doc.styles:
        if s.type == WD_STYLE_TYPE.PARAGRAPH:
            print(s.name)

def search_character_styles(self):
    """
    查看字体样式调用
    """
    print('以下为字体样式:')
    for s in self.doc.styles:
        if s.type == WD_STYLE_TYPE.CHARACTER:
            print(s.name)

def write_picture(self):
    pass

def write_table(self):
    pass

def style_paragraph(self):
    pass

def style_character(self):
    pass

def save_word(self):
    if os.path.exists(self.save_path) is True:
        pass
    else:
        os.mkdir(os.path.join(os.getcwd(), str(time.strftime('%Y%m%d%H%M%S',time.localtime(time.time())))))
    self.doc.save(self.save_path)
    return print('文件保存成功,存储路径为:', self.save_path)

if name == "__main__":
docx = WordOperate(r'C:\Users\14836\OneDrive\Python学习\test\file\新建 Microsoft Word 文档.docx')
paragraph = doc.write_paragraph('5456465', 'ListNumber')
doc.write_text('wqqwqw', paragraph, 'Title Char')
docx.save_word()

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥60 版本过低apk如何修改可以兼容新的安卓系统
    • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
    • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
    • ¥50 有数据,怎么用matlab求全要素生产率
    • ¥15 TI的insta-spin例程
    • ¥15 完成下列问题完成下列问题
    • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
    • ¥15 YoloV5 第三方库的版本对照问题
    • ¥15 请完成下列相关问题!
    • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?