
在正式开始今天的文章之前,我首先想说一个事,记得知乎有资深程序员说过这样一个事,“就python而言,你在编写代码的时候,肯定会遇到自己不熟悉的第三方库,但是一个合格的程序员可以自己去查看这个不熟悉的第三方库的官方介绍文章,然后找到自己想要的功能,最后就结合自己的具体需要,复现介绍文章的代码就行了”,我是十分认同这个说法的
回到正题,今天我在我加入的一个python学习群遇到这样一个需求,请看下面的截图

看到上面两个截图,可能还是会有人暂时不明白提问者的具体需求,我先解释一下,经常操作excel表格的人都知道,你往Excel表格的某一个单元格中填充大量文本的时候,如果没有换行,那么此时你的单元格内容大概率是下面的截图的样子
单元格的内容没有换行,非常难看此时我们如果点击一下excel里面的自动换行功能,整个单元格展示的时候就好看多了,如下图:
点击自动换行后的单元格展示效果所以我们在Excel表格里面填充内容的时候,如果内容很多,还是要考虑阅读者的感受,自动换行的功能还是要用一下的
我们接着回到正题,群内也有不少人出主意,有些人甚至说可以用vba和python结合使用,实现他的需求

当时我一直在围观,看到群内聊的热火朝天,也充分引起了我的兴趣,觉得也加入研究的队列,于是我仔细询问了提问者的需求,决定挑战一下

我首先总结一下具体的需求,所有的内容都放到一个合并单元格中,内容要根据甲方的意思分行展示,而且文本中有特别指定的内容要以红色展示
和往常一样,我首先做的还是先问了一遍度娘,不出所料,csdn这个老流氓又出场了,和他以前的作风一样,还是要你开会员才会告诉你具体的做法,不过我已经和这个家伙打过很多交道了,我明白了或许python的openpyxl库应该可以完美实现这次的需求,说干就干,于是我跑去openpyxl库的官方介绍网站详细阅读了起来,果然让我找到了解决办法
openpyxl库官方介绍网站部分截图openpyxl库提出了“富文本”(直译)这个概念,大白话来说,就是可以直接让你修改一个单元格中部分指定文本的格式(如字体,颜色,字体大小等等),正好完美解决我们其中的部分需求(上文提到的文本中有特别指定的内容要以红色展示)
再回到我们的其他需求,“内容要根据甲方的意思分行展示”,其实甲方(就是一开始在群内的提问者)已经在填充的文本中需要分行的位置写好了分行符“\n”,但是他最终的效果就是,你还需要人工在Excel表格的单元格中再点击一下这个填充了内容的单元格,这时电脑屏幕的excel表格才会把内容分行展示出来,所以还是不够完美
其实之所以会出现这个问题(还需要人工额外点击单元格页面才会展示分行的效果),就是你还没有设置这个单元格的文本对齐方式
excel单元格的文本对齐方式openpyxl这个第三方库的作者也想到了这个东西,于是也提供了Alignment这个方法来帮助我们设置单元格的文本对齐方式(有兴趣的朋友可以去openpyxl的官方网站去看一下)
至此,我们已经把解决思路都捋清了,剩下的就是敲键盘的事情了,以下是完整的代码截图
完整代码截图上面的代码,有基础的朋友估计已经看懂了,估计就是富文本的部分rich_string那一行我再解释一下
openpyxl库的官方网站是举例说明这个富文本的操作的

其实就是把你需要单独设置格式的文本放到TextBlock这个方法中(从字面的意思也可以猜到,就是为需要单独设置文本提供了一个区域,和其他不需要单独设置格式的文本隔离),后面的InlineFont,就是让你填写你需要设置的各种文本格式,openpyxl库也做了详细的介绍,我们要做的就是对照着介绍,写上自己需要设置的文本格式就行了
方法InlineFont的参数说明截图我只想提醒一句,就是方法InlineFont中的参数b(默认是True),是告诉计算机是否将你指定的文本按你的要求单独设置格式,设置为False的话就不会有任何变化,另外我这次只是为部分文本染色,所以只设置了颜色,颜色要输入RGB的十六进制数字而不是直接输入颜色的英文单词
FF0000就是红色的RGB十六进制数字合并单元格的操作要放到最后才做,此时Excel就是遵循左上规则,自动把位于左上角的单元格的内容当做合并单元格后的内容
上面的文本都是往A1单元格填充
设置对齐方式后再合并单元格代码运行截图(涉及隐私,所以做了打码处理)

至此,这个需求解决了,感谢你看到现在,如果你对python感兴趣,又或者是对我的代码有别的意见,欢迎私聊或发表你的意见,本人文笔不好,文章有不足之处的话,敬请见谅,另外不要私聊我发什么“111获取资料”的内容,我不是培训机构,也不是csdn
PS:对python感兴趣的朋友,可以去搜公众号“早起Python”,然后让群主拉你进群,我也在这个群里面,欢迎大家一起讨论python的技术