于是果断选择了“xlwings”作为我操作excel的模块。不得不说,xlwings是一个非常好的模块,根据网上的教程以及官方文档 [2] 我很快完成了数据读写部分的程序,而且测试了一下,整体读写的速度都很快。

但是在测试的过程中,遇到的第一个问题来了。

xlsx文件被锁定了怎么办?

下图就是我在debug完了以后,再次打开我的xlsx文件想去看看效果的时候弹出来的通知

查阅资料后,发现是因为我们在debug过程中结束程序后,没有执行到app.quit()语句来关闭xlwings创建的app,所以后台这个xlsx进程并没有关闭。

所以解决这个问题的方法很简单,打开任务管理器,找到上图进程,然后结束进程即可。

xlwings如何设置字体、颜色等属性

这部分是今天主要解决的问题。目前网上我所看到的所有关于xlwings的资料都没有提到设置字体的方面,甚至我在官方文档 [2] 中也没有看到关于设置字体的函数,在贴吧里还看到有兄弟说xlwings不能修改字体:

正好我的软件里面需要修改xlsx文件中的字体及其颜色,而且我的软件已经使用xlwings模块写了很大一部分了,再换模块显然是不划算的,所以我决定深入研究一下。

我在使用xlwings完成按列降序排列的时候参考了@RobbenEmi 的博文 [3] ,非常感谢@RobbenEmi,虽然他的博文很短,但是他一定是做过深入研究的。

受@RobbenEmi 博文 [3] 的启发,我感觉突破口可能在xlwings的api方法上,于是我返回官方文档 [2] 重新查找相应的函数方法,如下图所示。

看到这句话,再结合@RobbenEmi 的博文 [3] ,我去微软官网查看了一下office VBA参考中的Font.Color方法

再结合xlwings官方文档中说的使用api()方法返回的是pywin32或appscript对象,我在网上查阅了pywin32如何操作xlsx文件,参考了@帅胡 的博文 [4] ,我实现了使用xlwings模块设置字体、颜色、加粗等属性。

如下源码展示如何获取相应的属性。

# coding: utf-8
import xlwings as xw
app=xw.App(visible=False,add_book=False)
filepath = '../data/test.xlsx'
wb=app.books.open(filepath)
sht = wb.sheets('Sheet1')
font_name = sht.range('A1').api.Font.Name	# 获取字体名称
font_size = sht.range('A1').api.Font.Size	# 获取字体大小
bold = sht.range('A1').api.Font.Bold		# 获取是否加粗,True--加粗,False--未加粗
color = sht.range('A1').api.Font.Color		# 获取字体颜色
print(font_name)
print(font_size)
print(bold)
print(color)
wb.save()
wb.close()
app.quit()

  打印的结果如下

  相应xlsx文件中的信息如下

  xlwings模块获取结果与实际xlsx文件字体属性吻合,因为xlwings模块相同的语句既可以获取property又可以set property,所以设置相应属性的源码如下。

# coding: utf-8
import xlwings as xw
app=xw.App(visible=False,add_book=False)
filepath = '../data/test.xlsx'
wb=app.books.open(filepath)
sht = wb.sheets('Sheet1')
font_name = sht.range('A1').api.Font.Name	# 获取字体名称
font_size = sht.range('A1').api.Font.Size	# 获取字号
bold = sht.range('A1').api.Font.Bold		# 获取是否加粗,True--加粗,False--未加粗
color = sht.range('A1').api.Font.Color		# 获取字体颜色
print(font_name)
print(font_size)
print(bold)
print(color)
print('-----设置-----')
sht.range('A1').api.Font.Name = 'Times New Roman'	# 设置字体为Times New Roman
sht.range('A1').api.Font.Size = 15			# 设置字号为15
sht.range('A1').api.Font.Bold = True		# 加粗
sht.range('A1').api.Font.Color = 0x0000ff	# 设置为红色RGB(255,0,0)
font_name = sht.range('A1').api.Font.Name	# 获取字体名称
font_size = sht.range('A1').api.Font.Size	# 获取字体大小
bold = sht.range('A1').api.Font.Bold		# 获取是否加粗,True--加粗,False--未加粗
color = sht.range('A1').api.Font.Color		# 获取字体颜色
print(font_name)
print(font_size)
print(bold)
print(color)
wb.save()
wb.close()
app.quit()

  打印的结果如下

  相应xlsx文件中的信息如下

  现在你可以使用xlwings自由地设置你想要的任何字体属性了!

  细心的你一定会观察到,我这段设置字体属性的源码中,设置字体颜色的那句代码的赋值,并不是红色RGB(255,0,0)的十六进制6位颜色码,这是怎么回事呢?

  在下一篇博文(【python】关于颜色码的几种常用表示及其相互转换)中,我会讨论RGB颜色码的一些问题,相信你会在下篇博文找到答案。

[1] @zx576, Python-Excel 模块哪家强
[2] xlwings官方文档
[3] @RobbenEmi, python xlwings excel 根据列排序
[4] @帅胡, 利用 pywin32 操作 excel

如有疑问,邮件是最快联系我的方式:wm_chen@yeah.net

app=xw.App(add_book=False) wb = app.books.add() # 创建一个临时表格 wb.sheets.add(name='hello_friend') sht = wb.sheets['hello_friend'] # 选中hello_friend的sheet,也可以用sheets[0]去选中 sht.range("A1").value = 1 # 给指定单元格赋值
最近在使用Xlwings的时候,发现有对Excel表格进行设置字体大小和颜色操作。想必小伙伴们在日常的工作中也遇到了这样的问题,为此我这里总结一些操作供大家参考: 一、创建表格 import xlwings as xw App = xw.App(visible=False, add_book=False) wb = App.books.add() sheet = wb.sheets.add('test_sets') # Expands the range according to the mode
接着新建一个test.xlsxexcel文件。 # visible-是否打开相应excel文件,即是否可视化当前工作簿; # add_book=True,此时立即创建一个有sheet表的工作簿 # add_book=False, 如果不进行字体手动设置的话,生成的文字字体格式就会千奇百怪,如下图 Doc = Document() Doc.add_heading("刚来csdn,这就是博客么,I了") Doc.add_paragraph("Python ") Doc.add_paragraph("Python 对word进行操作") Doc.save("Python_word.docx") 可以看到自动配置的字体不是我们平
xlwings 操作excel def open(filename=None,visible=False, readonly=False, password=None,write_password=None): #filename 文件路径,打开,没有文件名则创建 #visible 打开是否可见 #readonly 是否打开只读 #password 文件读取密码 #write_password 设置文件密码 该方法会启动一个打开excel的进程并打开文档,通过visible来控制这个Excel进程是否可见。返回一个Excel对象。 workbook = open(r”C:\Users\M
app = xw.App(visible=True, add_book=False) app.display_alerts = False # 关闭一些提示信息,可以加快运行速度。 默认为 True。 app.screen_updating = True # 更新显示工作表的内容。默认为 True。关闭它也可以提升运行速度。 wb = app.books.add() sht = wb.sheets.act.
xlwings是一个Python库,可以将Python与Microsoft Excel集成,使得可以使用Python代码来操作Excel文件。以下是使用xlwings的一些说明: 1. 安装xlwings 可以使用pip命令来安装xlwings: pip install xlwings 2. 连接Excel 使用xlwings连接Excel文件非常简单,只需要在Python代码中使用以下语句: ```python import xlwings as xw # 连接Excel文件 wb = xw.Book('文件路径') 其中,'文件路径'是Excel文件的路径。 3. 操作Excel 使用xlwings可以对Excel文件进行各种操作,例如读取单元格的值、写入单元格的值、插入行列、删除行列等等。以下是一些常用的操作: ```python # 读取单元格的值 value = wb.sheets['Sheet1'].range('A1').value # 写入单元格的值 wb.sheets['Sheet1'].range('A1').value = 'Hello, world!' # 插入行 wb.sheets['Sheet1'].api.Rows(2).Insert() # 删除列 wb.sheets['Sheet1'].api.Columns('B').Delete() 使用xlwings还可以创建宏,将Python代码转换为Excel宏。以下是一个简单的例子: ```python import xlwings as xw @xw.sub def hello(): wb = xw.Book.caller() wb.sheets[].range('A1').value = 'Hello, world!' 将上面的代码保存为一个Python文件,然后在Excel中打开该文件,点击“开发工具”菜单,选择“Visual Basic”,在弹出的窗口中选择“插入”->“模块”,将Python代码复制到模块中。然后点击“开发工具”菜单,选择“宏”,选择“hello”,点击“运行”,就可以在Excel中看到“Hello, world!”了。 以上是使用xlwings的一些说明,更多详细的内容可以参考xlwings官方文档。