说到docx的用法,度娘一大堆,眼花缭乱的。这里就不啰嗦了,基本上就是新建个Document对象,然后往上边加标题、段落、表格。附带设置这些对象的字型字号啥的。不过有一点,docx和python-docx是两个库,看帖的时候要小心。建议看官方文档

接着看看我们的目标:

为了实现这种编号,我先是想修改本地docx的样式来解决,生成文档的时候只设置成几级标题,不设置任何样式,在本机修改默认样式模板。结果,没啥用。

然后我想会不会在docx的标题样式里有相关的设置,然后就找到了这个

编号样式还没有实现,果然大神研发鄙视python还是有道理的。那现在只能从样式模板上入手了,找了半天也没有发现指定模板的的方法,docx库的默认模板和本地的模板不是指一个东东。

无奈了,最后选择笨办法,手工赋值:比较难受的是因为要操作全局变量取编号,但目录和广度和深度都是不确定因素,所以只能定死。

思路就是使用全局变量n来判断目录的广度,使用num确定目录的深度,读取各个全局变量listxx里的编号将编号加到item名前。如果有更美观的实现方式,请诸位看客一定留言告知。

代码如下:

import os

import os.path

from docx import Document

from docx.enum.style import WD_STYLE_TYPE

from docx.enum.text import WD_PARAGRAPH_ALIGNMENT

from docx.oxml.ns import qn

from docx.shared import Inches, Pt, RGBColor

#初始化doc对象、

def Init():

global doc

doc = Document()

doc.styles["Normal"].font.name = u'宋体'

doc.styles["Normal"].font.size = Pt(12)

doc.styles["Normal"]._element.rPr.rFonts.set(qn('w:eastAsia'), u'宋体')

doc.styles["heading 1"].font.size=Pt(20)

name = doc.add_paragraph()

run = name.add_run(r'本周主要内容')

run.font.size = Pt(25)

run.font.name = u"宋体"

run._element.rPr.rFonts.set(qn('w:eastAsia'), u'宋体')

name.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER

# head = doc.add_heading("", level=1)

# run = head.add_run(u"主要内容")

# run.font.size = Pt(12)

# run.font.color.rgb = RGBColor(0, 0, 0)

# run.font.name = u"宋体"

# run._element.rPr.rFonts.set(qn('w:eastAsia'), u'宋体')

# head.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER

def Save(dst):

global doc

try:

doc.save(dst)

return True

except IOError as e:

last_err = e.strerror

return False

#设置段落

def AddListText(text):

global doc

p = doc.add_paragraph(style='List Number')

run = p.add_run(text)

run.font.size = Pt(15)

run.font.name = u"宋体"

run._element.rPr.rFonts.set(qn('w:eastAsia'), u'宋体')

def AddLineText(text):

global doc

name = doc.add_paragraph(style='List Number')

run = name.add_run(text)

run.font.size = Pt(15)

run.font.name = u"宋体"

run._element.rPr.rFonts.set(qn('w:eastAsia'), u'宋体')

global numlist1,numlist2,numlist22,numlist3,numlist33,n

n = 0

numlist1 = ['一、','二、','三、','四、','五、','六、','七、','八、','九、','十、']

numlist2 = ['(一)、', '(二)、', '(三)、', '(四)、', '(五)、', '(六)、', '(七)、', '(八)、', '(九)、', '(十)、']

numlist22 = ['(一)、', '(二)、', '(三)、', '(四)、', '(五)、', '(六)、', '(七)、', '(八)、', '(九)、', '(十)、']

numlist3 = ['1、','2、','3、','4、','5、','6、','7、','8、','9、','10、']

numlist33 = ['1、','2、','3、','4、','5、','6、','7、','8、','9、','10、']

def Addhead(text,num):

global doc

if num == 1 :

listnum = num - 1

head = doc.add_heading("", level=num)

run = head.add_run(numlist1.pop(listnum)+text)

run.font.name = u"宋体"

elif num == 2:

listnum = num - 2

head = doc.add_heading("", level=num)

print(n)

if n == 1:

try:

run = head.add_run(numlist2.pop(listnum) + text)

except Exception as e:

print(e)

run.font.name = u"宋体"

else:

try:

run = head.add_run(numlist22.pop(listnum) + text)

except Exception as e:

print(e)

run.font.name = u"宋体"

elif num == 3:

listnum = num - 3

if n == 1:

head = doc.add_heading("", level=num)

run = head.add_run(numlist3.pop(listnum) + text)

run.font.name = u"宋体"

else:

head = doc.add_heading("", level=num)

run = head.add_run(numlist33.pop(listnum) + text)

run.font.name = u"宋体"

Init()

def _showdir(path, depth):

for item in os.scandir(path):

# AddListText(item.name)

print("| " * depth + "+--" + item.name)

# AddLineText(" " * depth + " " + item.name)

Addhead(item.name, depth + 1)

#递归出口

if item.is_dir():

_showdir(item.path, depth + 1)

def showdir(path, depth):

for item in os.scandir(path):

global n

n += 1

print("| " * depth + "+--" + item.name)

Addhead(item.name, depth + 1)

#递归出口

if item.is_dir():

_showdir(item.path, depth + 1)

file = r'C:\Users\zhaobw\Desktop\demo.docx'

Save(file)

if __name__ == '__main__':

path = r'C:\Users\zhaobw\Desktop\测试'

showdir(path, 0)

# showlistdir(path, 0)

总结:

这一节完后了docx的测试,需求基本上都已经完成了。下一步将逻辑代码贴到gui里,或者调用都可以。

pythondocx批量提取目录及内容_一个可以选择目录生成doc目录内容的小工具(三) -python-docx...相关推荐

  1. python做测试小工具_自制快速冒烟测试小工具--基于python多线程(2)

    原标题:自制快速冒烟测试小工具--基于python多线程(2) 新书 速递 文 |愈知愈无知 快速冒烟测试小工具-(1)分析及准备 三.代码实现-封装 1. 创建包和文件夹目录 Config:存放配置 ...

  2. delphi 企业微信消息机器人_GitHub - guoxianlong/insight: Insight是一个可以管理企业微信群机器人的小工具,可以非常方便的往群里发布即时消息和定时消息。...

    最科幻的企业微信群机器人管理工具 非常方便的发布群即时消息和定时消息,解放双手,提升沟通效率 部署教程 更新日志(2020.05.31) 修复设置为智能跳过工作日时,周日依然提醒问题. 前端修复定时成 ...

  3. 一个可以编辑sqlite数据库的 数据库编辑小工具 sqlite数据库 替换字段,sql替换数据库中某个字段的所有值

    一个可以编辑sqlite数据库的 数据库编辑小工具,由于showdoc是不支持mysql数据库的,而我们需要去修改部分数据的时候需要用到sqlite数据库工具,因此这里推荐这个轻量工具: DB.Bro ...

  4. 通过web系统实现淘宝营销引流,小说或者视频上传之后自动生成二维码,通过二维码分享之后引入微信或者扣扣加群,群满自动切换到下一个,以及数据统计分析和若干个小工具集成

    通过web系统实现淘宝营销引流,小说或者视频上传之后自动生成二维码,通过二维码分享之后引入微信或者扣扣加群,群满自动切换到下一个,以及数据统计分析和若干个小工具集成. 主要实现技术: 1.大文件视频分 ...

  5. 旅游网站的主页代码_一个在优化的网站主页内容应该如何设计?

    现在搜索引擎上面的网站只要是互联网行业的网站都是做了优化的只能说是效果好与不好,只要是注重做优化的网站都会非常重视网站主页的设计,那么一个在优化的网站主页内容应该如何设计呢?接下来我们就来了解一下: ...

  6. CAD批量提取数值lisp插件_一键批量提取CAD填充图案边界线

    好课推荐: 零基础CAD:点我CAD家装:点我 周站长CAD:点我CAD机械:点我revit教程:点我CAD建筑:点我CAD三维:点我全屋定制:点我 ps教程:点我苹果版CAD:点我 3dmax教程: ...

  7. python 无法引入同级目录的方法_再见 virtualenv!K神教你轻松管理多个Python环境...

    点击上方"菜鸟学Python",选择"星标"公众号 超级无敌干货第一时间推给你!!! 小编电脑上有多个 Python 开发环境,每次都是用 virtualenv ...

  8. 一个批量生成联系人数据(vcf)的小工具

    一个批量生成联系人数据的小工具(vcf) 1.Python代码 代码如下(示例): import random def create_contact(number):surname = [" ...

  9. java 插桩 工具_一个基于Eclipse的通用Java程序插桩工具.pdf

    第38卷第7期 计算机科学 V01.38NO.7 Science 2011 2011年7月 Computer July 一个基于Eclipse的通用Java程序插桩工具 郑晓梅 (南京中医药大学信息技 ...

最新文章

  1. ACMNO.18 C语言-选择排序 用选择法对10个整数从小到大排序。 输入 10个整数 输出 排序好的10个整数
  2. mysql设计数据集市_数据集市设计
  3. 免费!Excel数据分析训练营!让你1招建立可视化数据分析思维模型!​
  4. 【网址收藏】Fedora 34安装Wine、微信
  5. 用“连接”勾勒角色:《死亡搁浅》亡人的设计及其背后的故事谜题
  6. OEA框架 2.9 Pre-Alpha 源码公布
  7. Doris之资源管理
  8. tornado Python mysql_python tornado mysql 内容管理后台部署
  9. BOOST库介绍(七)——时间处理相关的库
  10. linux查看scsi设备id号,scsi_id查询
  11. 计算机转游戏,利用双计算机调试游戏程序 (转)
  12. 功率曲线k值_锂电池放电曲线全面解析
  13. Java项目《谷粒商城》高级篇 个人错误总结
  14. photoshop涂抹工具
  15. charles(抓包神器)
  16. 程序员为什么不会修电脑
  17. Ubuntu+QT+SSL+MQTT
  18. php-fpm status,使用php-fpm状态页观察当前的php-fpm状态
  19. cadence SPB17.4 - allegro添加过孔
  20. Exchange 2010通配符SSL证书安装文档

热门文章

  1. python2和3的区别字符编码格式上下文管理is和==的区别
  2. 2ex1逆向寒假生涯(24/100)
  3. KPCR:CPU控制区(Processor Control Region)
  4. win7更新powershell到5.1
  5. c/c++字符串混淆工具
  6. 消息机制学习笔记(四)—— 内核回调机制
  7. Windows保护模式学习笔记(五)—— 任务段任务门
  8. 6.windows线程切换_主动切换
  9. 过滤输入字符串中的危险字符
  10. 寒假每日一题(入门组)【week1 完结】