编辑docx中字符的一个方法
来源:互联网 发布:景安备案域名购买 编辑:程序博客网 时间:2024/06/06 07:06
# -*- coding: utf-8 -*-"""filename : net_csdn_bbs_topics392218239.pyauthor: hu@daonao.com QQ: 443089607 weixin: huzhenghui weibo: http://weibo.com/443089607category : python-docxoriginal url : http://bbs.csdn.net/topics/392218239original title : python_docx 读取文档段落中的单个字符title : 编辑docx中字符的一个方法csdn blog url :weibo article url :weibo message url :为了清晰直观展现python严格要求的缩进,请访问博客链接详细说明见源代码中的注释"""# standard importimport copyimport loggingimport randomimport osimport docxlogging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')logging.debug('start')STR_SCRIPT_DIR, STR_SCRIPT_FILE = os.path.split(__file__)logging.debug('STR_SCRIPT_DIR : %s', STR_SCRIPT_DIR)logging.debug('STR_SCRIPT_FILE : %s', STR_SCRIPT_FILE)STR_SCRIPT_PREFIX = os.path.splitext(STR_SCRIPT_FILE)[0]logging.debug('STR_SCRIPT_PREFIX : %s', STR_SCRIPT_PREFIX)# 这是需要搜索并加粗的关键字符串STR_KEYWORD = 'boldme'# 以下代码用于创建一个空白的测试文档,随机生成字符串,随机插入关键字符串DOCUMENT_ORIGINAL = docx.Document()for int_p in range(random.randint(10, 20)): paragraph = DOCUMENT_ORIGINAL.add_paragraph() for int_r in range(random.randint(10, 20)): str_run = '' for int_c in range(random.randint(10, 20)): str_run += random.choice('1234567890abcdefghijklmnopqrstuvwxyz') # 随机插入关键字符串 if random.randint(0, 100) < 5: str_run += STR_KEYWORD for int_c in range(random.randint(10, 20)): str_run += random.choice('1234567890abcdefghijklmnopqrstuvwxyz') paragraph.add_run(str_run)for paragraph in DOCUMENT_ORIGINAL.paragraphs: logging.debug('generated paragraph : %s', paragraph.text)STR_ORIGINAL_FILE = os.path.join(STR_SCRIPT_DIR, STR_SCRIPT_PREFIX + '.original.docx')logging.debug('STR_ORIGINAL_FILE : %s', STR_ORIGINAL_FILE)DOCUMENT_ORIGINAL.save(STR_ORIGINAL_FILE)# 重新打开测试文档DOCUMENT_NEW = docx.Document(STR_ORIGINAL_FILE)# 遍历文档中的段落for paragraph in DOCUMENT_NEW.paragraphs: bool_found = False # 遍历段落中的run查找是否包含关键字符串 for run in paragraph.runs: if STR_KEYWORD in run.text: logging.debug('Found keyword : %s', run.text) bool_found = True if bool_found is True: # 深度复制段落中的内容 list_runs = copy.deepcopy(paragraph.runs) # 清空段落中的内容 paragraph.clear() # 遍历已复制的段落中的内容 for run in list_runs: # 判断该run是否包含关键字符串 if STR_KEYWORD in run.text: bool_first_part = True # 按照关键字符串拆分该run for str_part in run.text.split(STR_KEYWORD): # 判断是否为第一部分 if bool_first_part is True: bool_first_part = False else: # 如果不是第一部分,则在段落中加入关键字符串并设置粗体 paragraph.add_run(STR_KEYWORD).bold = True # 在段落中加入被拆分的部分 paragraph.add_run(str_part, run.style) else: # 如果该run不包含关键字符串则直接加入段落 paragraph.add_run(run.text, run.style)# 保存至新的文件STR_NEW_FILE = os.path.join(STR_SCRIPT_DIR, STR_SCRIPT_PREFIX + '.new.docx')logging.debug('STR_NEW_FILE : %s', STR_NEW_FILE)DOCUMENT_NEW.save(STR_NEW_FILE)#end of file
阅读全文
0 0
- 编辑docx中字符的一个方法
- [C++ ] MFC 中 另类的 控制编辑框 字符方法~!
- 编辑框中限制字符数的方法
- 【Java】中常用的几种 DOCX 转 PDF 方法
- Java中常用的几种DOCX转PDF方法
- JavaScript中删除字符串最后一个字符的方法
- C++中字符串取一个字符的一种方法
- 去除一个字符串中重复字符的方法
- officeXP打开docx文档的方法
- winform中datagridview 在单元格选中状态下(非编辑状态)输入一个字符产生重复的问题
- 在office2003中打开office2007文件的补丁(.docx文件,pptx文件打开方法)
- 在office2003中打开office2007文件的补丁(.docx文件,pptx文件打开方法)
- 一个表单中有编辑和删除两个按钮分别调用后台action的不同方法
- GitHub中wiki的Markdown编辑方法!!
- 怎样把编辑框中的光标移动到编辑框中字符的最后面?
- 查找字符串中出现最多的字符和个数(两种方法一个普通方法 一个是正则表达式方式)
- 删除最后一个字符的方法。
- 删除最后一个字符的方法。
- 各位相加
- 过山车
- linux系统开机自启动:init upstart systemd
- VIM高手进阶操作
- 服务器外网无法访问,本地确可以!阿里云服务器外网无法访问解决方案,腾讯云外网无法访问
- 编辑docx中字符的一个方法
- linux内存管理之段式管理
- iPhone 开发经典语录集锦
- C
- This is a test
- sizeof()获取数据类型的字节数
- VNC 在ubuntu desktop下只显示空白桌面
- JZOJ2017.08.07 B组
- python 装饰器