本系列文章将介绍如何使用Python读写主要Microsoft Office文档(Word,Excel和PowerPoint)

======================================================================================================================================

1. 操作Office文档的两种方法

本系列文章所指『Office文档』,特指Word文档、Excel工作簿和PowerPoint幻灯片。其他Office软件产生的文档不在讨论范围。

对一个Office文档进行读写,除了可以直接读写磁盘上的实质文件,还可以通过Office应用程序提供的COM接口进行。 COM接口相当于一个『官方中介』。而提供直接读写磁盘文件的库,相当于『小中介』。在Office 2003/2004以及以前,Office文档只采用微软私有的二进制格式,而这些私有格式直到2006年才公开于众。也就是说,小中介们以前都靠逆向工程以及各种猜测才实现了Office文档的读写。

时至今日,『官方中介』以及『小中介』都各有优劣。利用COM接口,优点在于能够使用到几乎Office所有的功能,并且由于COM的跨语言特性,知识迁移非常容易;缺点在于仅限于Windows + Office平台,操作系统和软件缺一不可。利用直接读写接口,优点在于跨平台,只要Python能够支持的平台基本上都可以,不需要Windows也不需要Office软件;缺点在于只能够使用一些基本的功能。

本系列文章只介绍如何使用直接读写接口操作Office文档。若想了解COM接口的使用,请参考pywin32的文档以及微软MSDN。

2. Hello Word!

下面的例子可以运行于任何平台(PC、Mac、树莓派……)。但是,如果想看到产生的文档,你还是需要一个能打开Office文档的应用。没有安装微软Office的话,其他替代软件比如AbiWord、OpenOffice、WPS之类的都可以。

首先安装python-docx这个Python库

$ pip install python-docx -U

(注意,在PyPi里还有一个叫docx的库,已经停止更新,不建议使用)

这个库依赖于lxml,在Windows下可能需要编译器。如果在安装python-docx过程中发现找不到编译器或者编译lxml错误的现象,可到 https://pypi.python.org/pypi/lxml/2.3/ 下载和安装预编译的版本。

只需要4行代码就可以创建一个Word文档:

from docx import Document

document = Document()

document.add_paragraph('Hello,Word!')

document.save('demo.docx')

第一行引入docx库和Document类。Document类即代表了『文档』,第二行创建了Document类的一个实例document,相当于『这篇文档』。紧接着,我们在文档中利用add_paragraph函数添加一个段落,段落的内容是Hello,Word!。最后,用save函数将文档保存在磁盘上。

运行这个脚本,就得到了文件demo.docx。用Office软件打开,看看里面的内容。

3. 插入图片

下面一个任务是在一个Word文档里添加255个圆圈,颜色为红色由浅入深。显然,这个任务在Word里人工完成是非常麻烦的。但用代码就非常简单了。

from docx import Document

from PIL import Image,ImageDraw

from io import BytesIO

document = Document() #新建文档

p = document.add_paragraph() #添加一个段落

r = p.add_run() #添加一个游程

img_size = 20

for x in range(255):

im = Image.new("RGB", (img_size,img_size), "white")

draw_obj = ImageDraw.Draw(im)

draw_obj.ellipse((0,0,img_size-1,img_size-1), fill=255-x)#画圆

fake_buf_file = BytesIO()#用BytesIO将图片保存在内存里,减少磁盘操作

im.save(fake_buf_file,"png")

r.add_picture(fake_buf_file)#在当前游程中插入图片

fake_buf_file.close()

document.save("demo.docx")

画图我们利用了常用的PIL库。这段代码还展示了所谓『游程』的概念,在接下来的篇章中将加以介绍。

致谢:

感谢wanghz49指出用BytesIO

python的hello word_Hello Word —— 使用Python读写Office文档之一相关推荐

  1. 如何在谷歌Chrome新版浏览器中打开并编辑Word/Excel/PPT等Office文档?(视频演示)

    如何在谷歌Chrome新版浏览器中打开并编辑Word/Excel/PPT等Office文档?

  2. Vue 预览word,excel,ppt等office文档-内网访问(基于onlyoffice,后端返回文件流)

    Vue 预览word,excel等office 先看效果!! 需求背景:在前端页面中预览office文件且是内网访问,服务器不可访问外网的前提. 因此微软的接口就废掉了,因为他接口的条件是可以访问外网 ...

  3. office文档管理服务器编辑,_卓正软件 - PageOffice官方网站 - 在线编辑Word、Excel的Office文档控件...

    Office 组件 在线显示.编辑.保存Word文档 √ √ √ 在线显示.编辑.保存Excel文档 √ √ √ 在线显示.编辑.保存PowerPoint文档 √ √ √ 在线播放PowerPoint ...

  4. 前端实现pdf,word,doc等Office文档格式在线预览

    在做一些后台管理或者h5页面的时候 通常会遇到Office文档格式的在线预览功能.虽然看似简单,里面却隐藏着很大的坑.简单是因为现在有各种插件可以下载实现,坑是因为涉及到一些兼容性和安全性等各种千奇百 ...

  5. python写word表格_使用表格—— 使用Python读写Office文档之三

    本文介绍使用Python在Word中创建一个表格,以及读取表格中的数据. =============================================================== ...

  6. 双击word,excel等office文档很慢

    解决方法: 选择[文件]菜单下的[选项]命令,打开[选项]对话框,选择[校准]选项,禁用[键入时检查拼写].[键入时检查语法]和[随拼写检查语法]选项. 删除C:\Documents and Sett ...

  7. java 转换word doc docx 等office文档 为pdf,无需破解 aspose ,无水印

    我的目标:在浏览器页面上直接预览word,excel,pdf 等 为何会有该需求? 踩过的坑: 解决思路1: 用收费版的aspose或者 spire doc 转换后,再去除水印 优化完后的代码,`TO ...

  8. 原创Python图文详解,堪称「最强文档」还有自动化办公、爬虫pdf速下!

    最近由我原创的 <Python最强-基础学习文档>,开始火爆整个 Python 圈,发布仅一周的时间,下载量将近破万 ! 为什么这么火?本文档共68页,将Python基础部分讲得细致入微! ...

  9. 自从学会Python后,无视百度文库VIP,所有文档免费下载阅读

    最近要用到百度文库查资料,但是很多都需要付费VIP或者下载券,还不能复制,就有点苦逼! 还好小编会Python,在Python面前真的所有VIP都是小意思,啥视频网站,资料网站等等,统统无视收费机制! ...

最新文章

  1. 性别从后台获取得值的那点事儿
  2. 小米2s屏幕_米家空气净化器3VS小米空气净化器2 成熟设计的优势
  3. retinaface mnn
  4. VMware View 5.0 Ready! 资源汇总(持续更新)
  5. windows环境下封装条件wait和signal
  6. 通过一个实际例子理解Kubernetes里pod的自动scale - 水平自动伸缩
  7. python 获取行列号两个数组相等_python – 寻找在numpy中找到两个相等长度数组之间精确重叠的最快方法...
  8. php全选按钮怎么写,PHP中的“全选”复选框,其中包含header.php
  9. UI标签库专题一:JEECG智能开发平台 BaseTag(样式表和JS引入标签)
  10. 信息学奥赛一本通(2038:【例5.5】最大数位置)
  11. fastclick select 闪退 bug
  12. SpringBoot集成Es使用ElasticSearchTemplate7.x版本自动注入失败解决
  13. linux下启动应用程序,RedHat Linux 9下启动应用程序
  14. 统计学习方法读书笔记14-逻辑斯蒂回归代码实现与最大熵代码实现
  15. 存储容错:鱼与熊掌可以兼得
  16. Qt播放视频0x8007000e报错 DirectShowPlayerService::doPlay: Unresolved error code 0x8007000e
  17. php unpack 原理,unpack
  18. 一名大二废柴今后目标
  19. java文件下载错误提示_java文件下载出错
  20. JAVA语言编程练习--图形界面--简易登录界面

热门文章

  1. Nexus 6p 内核编译
  2. C++ opencv Erode and Dilate
  3. deep leaning
  4. 如何进行特征选择 实践
  5. ubuntu20.04 网络配置
  6. HTML5css3学习总结(4)canvas绘图
  7. php 引入vue-cli,vue-cli如何引入layui
  8. Python随笔:改变Windows中 pip 的缓存位置与删除 pip 缓存
  9. 一个案例彻底解剖财务分析,财务小白必看
  10. 英伟达最大gpu_绕过CPU,英伟达让GPU直连存储设备