win32com操作word 第二集:Application&Documents接口
本课程《win32com操作word API精讲&项目实战》以视频为主,文字教程为辅,公众号ID:一灯编程。
先回答一个网友私信问题: win32com和微软的word接口文档有什么关系
win32com的底层调用的是word的接口,理论上,想查看win32com的接口情况,只需要看微软官方的文档即可。文档地址: https://learn.microsoft.com/zh-cn/dotnet/api/microsoft.office.interop.word.application?view=word-pia
令入门者云里雾里的API关系
微软word接口文档的组织形式说不上有什么问题,但其接口规模巨大(接近900个,每个接口中少则十几个,多则几百个的属性和方法)的接口及错综综复杂的接口交叉引用足以将一部分入门者拒之门外,着实繁杂。往往看到一个接口即便有详细的说明,就是无法知晓如何使用,各种尝试也不得要领,往往最常见的问题是:到底谁来调用这个接口。
要想快速抓住word编程的七寸,请一定要认真阅读下方的讲解。
第一点 回忆一下,我们是如何操作一个文档的
1、打开客户端 2、创建或打开一个文档 3、选中某些资源或鼠标点击准备写入内容 4、设置格式:页面设置、字体颜色、缩进等等 5、保存文档 6、关闭客户端
瞧,其实就那么简单,别看文档写得乌泱乌泱的,从文档操作的角度去思考,其实这个事并没有那么复杂。现在只需要记住:
Application接口是用来控制客户端的启动和关闭的,甭管它有多少个直接子级API Documents接口是用来创建和打开文档的,通过Application.Documents即可调用。记住创建文档和打开文档回返回一个Document对象,要使用变量接受这个对象,这样才方便我们对这个文档进行操作。
现在再回过来对照,客户端打开了,文档也有了,那使用什么方法来选中资源呢?接口中有Selection和Range可以实现选中文档的资源,官方推荐在文档级编程中,优先使用Range接口。
这不来了嘛,就是用Range接口来选中资源。那么谁才有这个资格来调用Range接口呢?答案是:Document,也就是文档对象,所以上面提到,创建文档或保存文档需要使用变量来接受,就是为了方便后续的操作。
第二点 字体、字号、行间距、页面设置等等这些如何实现呢
先将word的资源分类:
1、内容类资源,如文字、图片、表格、图表、形状及公式等 2、文档设置类资源,如页眉页脚、文档页面设置
上方两点分类,通通都能通过Document接口搞定,因为这些资源只在文档中才存在呀,即便是页面设置,也是设置某个文档的!所以,即便看对应的文档,我们也能快速知晓调用者就是Document。
再者,如果选中了某段文字,想为文字设置格式,各种格式也有独立的接口,那么又是谁来调用这些格式接口呢?答案自然是:Range。使用Range选中某个资源,那自然是使用Range来调用这些格式接口。
瞧瞧,就是那么简单。
第二课的代码演示
ok,进入第二集的代码演示阶段,跟着敲一篇,简单的一批。
Application和Documents接口演示
Applicatioin和Documents是两个入门级API,前者控制客户端,后者保存着所有的文档对象
from win32com.client import Dispatch # 此乃调度器
client = Dispatch('kwps.Application')
# 如果要启动微软的word客户端可使用下方办法
# client = Dispatch('word.Application')
client.Visible = True
# 到这,客户端已经能启动了,但尚未打开文档
# client是一个客户端对象,即Application对象
# Documents是Application的直接子级API,通过Application直接调用Documents
# 创建一个新文档并返回一个Document对象
d1 = client.Documents.Add() # 有默认参数,正常创建无需传参
# 打开一个文档并返回一个Document对象
d2 = client.Documents.Open(
FileName=file_name,
)
# Open方法的参数多达15个,第一个参数是需要打开的文档路径,必填参数,文件不存在时抛出异常
# 如果文档要密码才能打开则使用需要将密码传给Open,如下
d2 = client.Documents.Open(
FileName=file_path, # 文件路径
ConfirmConversions=True, # 文件不是word格式时是否会弹窗要求强制转换格式
ReadOnly=False, # 是否以只读方式打开
AddToRecentFiles=True, # 是否将文件添加到“文件”->"最近使用"中
PasswordDocument='密码' # 所需要的密码
)
# 注:Open还可以使用位置参数传参,其各个参数的位置要严格按照文档参数的位置来设置
此时,我们是不是已经有了两个文档对象了?一个Add
方法所创建的d1,一个是Open
方法所返回的d2。要想单独操作某个文档,就直接使用变量d1
或d2
去调用Document
接口中的方法和属性就OK了。
第一课的内容非常简单,其重点并非是Application和Documents如何使用,而是要建立起一个"用户思维",即再复杂的编程,最后都是给用户使用的,我们站在用户的角度的感受,该如何去操作一个文档:打开文档、操作文档,上方的变量中,d1
和d2
都是要操作的对象,围绕Document
这个对象,再去调用各种各样的接口来实现需求。
下节课,我们中开始重点介绍Document
的属性和方法啦!
有疑问,可私信也可评论区交流哈。
win32com操作word 第二集:Application&Documents接口的更多相关文章
- win32com操作word(1):几个重要的对象(28.35)
Pywin32模块为python封装了操作windows底层API函数的功能.而win32com是Pywin32下面的一个模块,专门负责操作com组件. 由于office工具(Word.Excel等) ...
- Asp.Net 操作word 第二篇[推荐]
引言:前段时间有项目要用c#生成Word格式的计算报告,通过网络查找到很多内容,但是都很凌乱,于是自己决定将具体的步骤总结整理出来,以便于更好的交流和以后相似问题可以迅速的解决! 现通过具体的示例演示 ...
- win32com操作word(3):导入VBA常量
导入VBA常量方法:http://blog.sina.com.cn/s/blog_a73687bc0101k8x8.html 我们之前说过,win32com组件为python提供处理COM组件(.dl ...
- win32com操作word(2):常用用法
一.对象的位置关系: 1.Range属性位于(部分): Selection__Section__Cell__Paragraph__Table__Bookmark__Comment__Row__List ...
- WORD Application.Documents.Open函数返回null的一种解决方法
DCOM Config Setting for "Microsoft Office Word 97 - 2003 Document" 内部配置一切正常,但调用Application ...
- VC+++ 操作word
最近完成了一个使用VC++ 操作word生成扫描报告的功能,在这里将过程记录下来,开发环境为visual studio 2008 导入接口 首先在创建的MFC项目中引入word相关组件 右键点击 项目 ...
- python操作word(改课文格式)【最终版】
python操作word的一些方法,前面写了一些感悟,有点跑题,改了下题目,方便能搜索到.心急的可以直接拉到最后看代码,我都加了比较详细的注释. 从8.3号早上9点,到8.8号下午5点半下班,终于把这 ...
- Java文件操作系列[3]——使用jacob操作word文档
Java对word文档的操作需要通过第三方组件实现,例如jacob.iText.POI和java2word等.jacob组件的功能最强大,可以操作word,Excel等格式的文件.该组件调用的的是操作 ...
- python操作word入门
1.安装pywin32 http://sourceforge.net/projects/pywin32 在files里去找适合你的python版本.截止此文,最新版本是pywin32-219快捷路径: ...
- C# 操作Word知识汇总
转自:http://blog.csdn.net/jiutao_tang/article/details/6574740 1. 微软官方实例: 段落.表格.图表 HOW TO:利用 Visual C# ...
随机推荐
- 深度学习环境搭建常用网址、conda/pip命令行整理(pytorch、paddlepaddle等环境搭建)
前言:最近研究深度学习,安装了好多环境,记录一下,方便后续查阅. 1. Anaconda软件安装 1.1 Anaconda Anaconda是一个用于科学计算的Python发行版,支持Linux.Ma ...
- Log4shell漏洞研究及其挖矿案例分析
本文首发于云影实验室,为本人创作,现转载到个人博客,记录一下. 原文链接:https://mp.weixin.qq.com/s/O2xHr2OEHiga-qTnbWTxQg Apache Log4j是 ...
- Python基础之模块:3、os模块 sys模块 json模块 json实战
目录 一.os模块 1.创建目录 2.删除目录 3.查看指定路径下目录内容 4.删除/重命名文件 5.获取/切换当前目录 6.动态获取项目根路径 7.拼接/切割路径 8.判断文件.目录是否存在 9.判 ...
- CPU体系(2):ARM Store Buffer
本文主要翻译自 Arm Cortex-M7 Processor Technical Reference Manual r1p2 其中章节 Memory System / L1 caches / Sto ...
- Android开发之线程间通信
Android开发之线程间通信 当我们的软件启动的时候,计算机会分配进程给到我们运行的程序,在进程中包含多个线程用于提高软件运行速度. 在android网络请求中,我们知道在日常开发中不能在子线程中跟 ...
- 卸载virtualbox中linux虚拟机的增强工具
报错信息 vboxclient:the virtualbox kernel service is not running 前言 我由virtualbox换到vmware 遇到了这个问题,很烦每次都通知 ...
- 数电第二周总结_by_yc
数电第二周总结_CC 重点: 模块实例化.仿真测试.数值表示.参数.表达式. 模块实例化端口连接方法: A.顺序端口连接:需严格按照模块定义时的顺序 B.明明端口连接:对端口信号顺序不做要求 Ex-1 ...
- 【Java SE进阶】Day01 Object类、日期时间类、System类、StringBuilder类、包装类
一.Object类 1.概述:Java语言的根类/超类,默认继承自Object类 2.常用方法 toString():返回对象的字符串表示--对象类型@内存地址值 可以对其重写@Override eq ...
- MetaTown:一个可以自己构建数字资产的平台
摘要:华为云Solution as Code重磅推出<基于MetaTown构建数字资产平台>解决方案. 本文分享自华为云社区<基于MetaTown构建数字资产平台>,作者: 阿 ...
- 干货 | 如何快速实现 BitSail Connector?
简介 本文面向 BitSail 的 Connector 开发人员,通过开发者的角度全面的阐述开发一个完整 Connector 的全流程,快速上手 Connector 开发. 目录结构 首先开发者需要通 ...