- Java锁的逻辑(结合对象头和ObjectMonitor)
- 还在用饼状图?来瞧瞧这些炫酷的百分比可视化新图形(附代码实现)⛵
- 自动注册实体类到EntityFrameworkCore上下文,并适配ABP及ABPVNext
- 基于Sklearn机器学习代码实战
本课程《win32com操作word API精讲&项目实战》视频平台以视频为主,本平台以文字为主,公众号ID:一灯编程 。
本节课主要讲解使用 Range 操作 Font 接口中的字体、字号、下划线、删除线、字体颜色、高亮及底纹颜色。 讲解中所涉及到的文档请自备,演示中,文档内容共两段,内容如下:
在娱乐圈,沈腾和马丽是大家公认的最佳搭档,事业上他们相伴十几年,一起走红毯,一起上春晚,一起拍电影,成就了惺惺相惜的友情。 记者:采访前我专门给沈腾发了信息,今天我要采访马丽,你想对她说什么?他给我回复的你猜是什么?
from win32com.client import Dispatch
client = Dispastch('word.Application')
client.Visible = 1
doc = client.Documents.Open('演示文档.docx')
# 选中第一段,下方的所有演示都会操作该Range对象
rng = doc.Paragraphs(1).Range # 或者doc.Paragraphs.Item(1).Range
在之前的课程中,我们使用了以下的方式选中某个段落:
rng = doc.Range(0,0)
rng.MoveEnd(4,1)
这是鉴于课程尚未讲解 Paragraphs 接口所采取的方案,实际开发中,哪种方式便利就使用哪种方式。在此,让我们再次简单重温一下word编程 对象集合 的概念(这个概念对于初学者而言往往不容易领悟).
word编程中,存在大量的 集合 ,如 Documents 集合, Paragraphs 集合, Words 集合, Characters 集合等等, 集合 用来管理word编程某种类型的资源, 我们可以将集合比喻为公司的部门 。每个部门管理各自的员工, Documents 是所有文档对象( Dcument )的集合,这个部门的员工等同于每个文档对象, Documents 可以很方便地统计当前共有多少个文档,可随时切换并操作某个文档.
我们在选中演示文档第一段时,就是用了 Paragraphs 对象集合,通过 索引1 选中了第一段,单个段落对象 Paragraph 表示某个段落,并提供了 Range 属性,使用该属性就可以创建一个 Range 对象从而表示选中了某范围.
实际上,大部分资源类型的对象都有 Range 属性,这极大地方便我们创建选中范围以便操作资源.
# 获取或设置字体,文档中能展示出来的字体才能设置
rng.Font.Name
rng.Font.Name = '黑体'
# 获取或设置字号,支持int和float,推荐使用float
rng.Font.Size
rng.Font.Size = 14.0
注意混合格式的问题,当前范围内如何存在多种字号或字体,使用当前范围的 Range 是获取不到结果的,在对格式要求严格的开发项目中,我们需要使用别的方法来处理,具体方案在项目实战部分hiu讲到.
# 获取或设置范围内容的字体加粗
rng.Bold
rng.Bold = True # 赋值False可取消加粗
# 获取或设置下划线
# 使用rng.Font.UnderLine 也可以 两者都有UnderLine的属性
rng.UnderLine = 1 # 赋值0可取消下划线
# 获取或设置删除线
# 赋值False可取消删除线
rng.Font.StrikeThrough = True
下划线说明:
通过常量来控制下划线的类型,对应文档: https://learn.microsoft.com/zh-cn/dotnet/api/microsoft.office.interop.word.wdunderline?view=word-pia 。
其中 0 表示无下划线, 7 是默认的单下划线.
rng.Font.Color = 255
Color 仅支持 int32 的值,微软在接口中内置了不少的颜色的 int32 数值,常用的要记得,如 0 为黑色, 255 为红色。对应文档: https://learn.microsoft.com/zh-cn/dotnet/api/microsoft.office.interop.word.wdcolor?view=word-pia 。
当我们使用自定义颜色时,不能直接将 rgb 值赋给 Color ,需要其转换为 int32 才可以使用,具体操作办法,公众号ID:一灯编程,回复 rgb .
Font 接口也提供了 ColorIndex 来操作字体颜色,与 Color 的区别有二,一是前者只能使用内置的索引值来操作颜色,不能像 Color 一样可使用自定义颜色,二是前者还可以用来控制字体边框的颜色.
高亮颜色是客户端中的笔刷,像我们生活中使用的荧光笔一样,在纸上做标记.
# 获取或设置高亮颜色
rng.HighLightColorIndex = 7
在word的接口中,但凡带有 Index 字样的都是索引值,其最大的特点就是不支持自定义,这里也一样,我们只能使用指定的 HighLightColorIndex ,对应文档: https://learn.microsoft.com/zh-cn/dotnet/api/microsoft.office.interop.word.wdcolorindex?view=word-pia 。
注意, HighLightColorIndex 接口在 Range 接口下被封装成属性,在 Font 接口中并没有这个属性。 高亮颜色是荧光笔在字上面划过的效果,它会覆盖下面要演示的底纹颜色 。
# 获取或设置底纹颜色
rng.Shading.BackgroundPatternColor = 255
底纹颜色不只有文本才有,所以它有一个独立的接口为 Shading ,很巧,它又被封装到了 Range 中成了众多属性之一.
BackgroundPatternColor 和上面的 Color 一样,仅支持 int32 。 记得,底纹颜色会被高亮覆盖 .
ok,今天的内容就先到这,下节课我们接着将。有问题请留言、私信.
最后此篇关于win32com操作wordAPI精讲第七集Range(五)字体格式精讲的文章就讲到这里了,如果你想了解更多关于win32com操作wordAPI精讲第七集Range(五)字体格式精讲的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
COM 内存泄漏最常见的原因是什么? 我读过将初始化的 CComBSTR 的地址作为 [out] 参数传递给函数会导致泄漏。我正在寻找像这样枚举其他常见的编程错误。 最佳答案 未能为 COM 对象使用
在COM服务器执行过程中分配一 block 内存,然后通过一个输出参数将该内存块传递给客户端是很常见的。然后,客户端有义务使用 CoTaskMemFree() 等方法释放该内存。 问题是,这 bloc
我有一些 MFC 代码(自定义 CWnd 控件和一些要公开的类),我需要将它们制作成带有接口(interface)的 activex/COM 对象。使用 MFC 支持制作 ATL 项目并以这种方式制作
Devenv.com 是 visual studio 命令行界面,当您键入 devenv/? 时,devenv 的帮助会出现在控制台上。但是,如果没有任何选项,devenv.com 只会调用 deve
如何将 COM 接口(interface)的引用作为 COM 库中的参数传递? 这是示例: 1)客户端代码成功创建coclass并接收到pFunctionDiscovery中的接口(interface
我正在使用 django,我在 s3 中存储了诸如 imgs 之类的东西(为此我使用的是 boto),但最近我收到了这个错误: 'foo.bar.com.s3.amazonaws.com' doesn
我已经使用组件服务 MSC 对话框创建了一个 COM+ 应用程序。我将一个现有的 COM 对象导入到这个新的 COM+ 应用程序中。 我知道可以通过 COM+ 应用程序调用该 COM 对象。我可以简单
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 11 年前。 Improve thi
我正在使用通过 COM Interop 包装器公开的第三方 dll。但是,其中一个 COM 调用经常卡住(至少从不返回)。为了至少让我的代码更健壮一些,我异步包装了调用(_getDeviceInfoW
很多年前我读到有一个简单的 php 脚本可以将您的网站重定向到 http://example.com/google.com 到 google.com它适用于正斜杠右侧的任何域。我忘记了这个脚本是什么或
我正在实现我的第一个进程外 COM 服务器(我的第一个 COM 服务器,就此而言)。我已经按照步骤编写了一个 IDL 文件,为代理/ stub DLL 生成代码,编译 DLL,并注册它。 当我检查注册
是否可以在未知接口(interface)上增加 RCW 引用计数? (即不是底层 COM 对象的引用计数) 我有一些旧的 COM 服务器代码 int Method1(object comobject)
我注意到许多关于 COM 的书籍等都指出,在 COM 聚合中实现一个可用作内部对象的对象相对容易。但是,除非我遗漏了什么,否则聚合似乎只能在极其有限的场景中成功,因此只有在明确识别出这种场景时才应提供
假设我正在开发一个安装 COM 组件并安装程序注册它们的应用程序。这很好用。 现在该软件需要从内存棒上运行。如何注册我的库运行时并确保在运行应用程序后清理注册表? 最佳答案 您总是在 XP 或更高版本
我们已经使用Microsoft的ActiveX/COM(VB6)技术开发了一个软件系统。去年,我对自动化构建过程和整个SCM越来越感兴趣。我集中搜索了网络的大部分内容,以获取有关如何使用基于COM的软
我对 com 线程模型有点困惑。 我有一个 inproc 服务器,我想创建一个可从任何线程访问的接口(interface),而不管 CoInitializeEx 中使用的线程模型和/或标志。 当将接口
我的包以旁加载方式安装,并不断遇到特定于应用程序的权限错误。 是的,许多人建议在 regedit 和组件服务中手动更改权限和所有者。 我的应用实际上在组件服务(DCOMCNFG、DCOMCNFG -3
我正在使用第三方应用程序,并调用创建 的实例。我的 COM 对象。这个调用成功了,但是第三方应用程序上的函数没有返回指向创建对象的指针(我不知道为什么)。有没有办法获得指向我的对象的指针? 为了澄清,
我有一个用 C# 编写的托管 COM 对象和一个用 C++(MFC 和 ATL)编写的 native COM 客户端和接收器。客户端创建对象并在启动时向其事件接口(interface)提供建议,并在其
我的应用程序需要注册两个 COM DLL。如果用户有必要的访问权限,它会自动完成,否则可以使用 regsvr32 完成。 . 现在在一些工作站上会发生以下情况: 开始cmd.exe作为管理员 注册第一
我是一名优秀的程序员,十分优秀!