>>> from helper import info; info()
页面更新时间: 2020-03-21 22:37:49
操作系统/OS: Linux-4.19.0-8-amd64-x86_64-with-debian-10.3 ;Python: 3.7.3
其他的一些问题¶
设置单元格的字体风格¶
设置某些单元格行或列的字体风格,可以帮助你强调
电子表格中重点的区域。例如,在这个产品电子表格中, 程序可以对 potato
、 garlic
和 parsnip
等行使用粗体。或者也许你希望对每磅价格超过5美元的
行使用斜体。手工为大型电子表格的某些部分设置字体
风格非常令人厌烦,但程序可以马上完成。
为了定义单元格的字体风格,需要从 openpyxl.styles
模块导入 Font()
函数。
>>> from openpyxl.styles import Font
这让你能输入 Font()
,代替 openpyxl.styles.Font()
(参见2.8节“导入模块”,复习这种方式的 import
语句)。
这里有一个例子,它创建了一个新的工作簿,将A1单元格设置为 24点、斜体。在交互式环境中输入以下代码:
>>> import os, openpyxl
>>> wb = openpyxl.Workbook()
>>> sheet = wb['Sheet']
>>> italic24Font = Font(size = 24, italic = True)
>>> sheet['A1'].font = italic24Font
>>> sheet['A1'] = 'Hello world!'
>>> wb.save('/tmp/styled-1.xlsx')
OpenPyXL
模块用 Style
对象来表示单元格字体
风格设置的集合,字体风格保存在 Cell
对象的 style
属性中。将
Style
对象赋给 style
属性,可以设置单元格的字体风格。
在这个例子中, Font(size=24,italic=True)
返回一个 Font
对象,保存在 italic24Font
中。 Font()
的关键字参数 size
和
italic
, 配置了 Font
对象的 style
属性。这个 Font
对象被传递给 Style(font=italic24Font)
调用, 该函数的返回值保存在
styleObj
中。如果 styleObj
被赋给单元格的 style
属性,
所有字体风格的信息将应用于单元格A1。
Font
对象¶
Font
对象的 style
属性影响文本在单元格中的
显示方式。要设置字体风格属性,就向 Font()
函数
传入关键字参数。表12-2展示了 Font()
函数可能的 关键字参数。
表 Font style
属性的关键字参数
关键字参数 |
数据类型 |
描述 |
---|---|---|
name |
字符串 |
字体名称,诸如’Calibrf 或’Times New Roman’ |
size |
整型 |
大小点数 |
bold |
布尔型 |
True表示粗体 |
italic |
布尔型 |
True表示斜体 |
可以调用 Font()
来创建一个 Font
对象, 并将这个 Font
对象保存在一个变量中。然后将它传递 给 Style()
,得到的 Style
对象保存在一个变量中, 并将该变量赋给 Cell
对象的 style
属性。例如, 下面的代码创建了各种字体风格:
>>> wb = openpyxl.Workbook()
>>> sheet = wb.get_sheet_by_name('Sheet')
>>>
>>> fontObj1 = Font(name='Times New Roman', bold=True)
>>> sheet['A1'].font = fontObj1
>>> sheet['A1'] = 'Bold Times New Roman'
>>>
>>> fontObj2 = Font(size=24, italic=True)
>>> sheet['B3'].font = fontObj2
>>> sheet['B3'] = '24 pt Italic'
>>>
>>> wb.save('/tmp/styles-2.xlsx')
这里,我们将一个 Font
对象保存在 fontObj1
中, 并用它创建一个
Style
对象,该对象保存在 styleObj1
中,然后将A1的
Cell
对象的 style
属性设置为 styleObj
。我们针对另一个
Font
对象和 Style
对象重复这个过程,
设置第二个单元格的字体风格。运行这段代码后,电子表格中 A1
和 B3
单元格的字体风格将设置为自定义的字体风格。
对于单兀格 A1,我们将字体名称设置为 'Times New Roman'
, 并将
bold
设置为 true
,这样我们的文本将以粗体Times New Roman
的方式显示。 我们没有指定大小,所以使用 openpyx
的默认值11。
在单元格 B3
中,我们的文本是斜体,大小是24。
我们没有指定字体的名称,所以使用 openpyxl
的默认值 Calibri
。
公式¶
公式以一个等号开始,可以配置单元格, 让它包含通过其他单元格计算得到的
值。在本节中,你将利用 openpyxl
模块,
用编程的方式在单元格中添加公式,就像 添加普通的值一样。例如:
sheet['B9']= '=SUM(B1:B8)'
这将 =SUM(B1:B8)
作为单元格B9的值。这将B9单元格设置
为一个公式,计算单元格B1到B8的和。图12-5展示了它的效果。
图12-5单元格B9包含了一个公式,计算单元格B1到B8的和
为单元格设置公式就像设置其他文本值一样。 在交互式环境中输入以下代码:
>>> import openpyxl
>>> wb = openpyxl.Workbook()
>>> sheet = wb.get_active_sheet()
>>> sheet['A1'] = 200
>>> sheet['A2'] = 300
>>> sheet['A3'] = '=SUM(A1:A2)'
>>> wb.save('/tmp/writeFormula.xlsx')
单元格 A1
和 A2
分别设置为 200
和300
。 单元格 A3
设置为一个公式,求出 A1
和 A2
的和。
如果在Excel中打开这个电子表格, A3
的值将显示为500
。
也可以读取单元格中的公式,就像其他值一样。但是,
如果你希望看到该公式的计算结果,而不是原来的公式, 就必须将
load_workbook()
的 data_only
关键字参 数设置为 True
。这意味着 Workbook
对象要么
显示公式,要么显示公式的结果,不能兼得(但是针对
一个电子表格文件,可以加载多个 Workbook
对象)。
在交互式环境中输入以下代码,看看有无 data_only
关键字参数时,加载工作簿的区别:
>>> import openpyxl
>>> wbFormulas = openpyxl.load_workbook('/tmp/writeFormula.xlsx')
>>> sheet = wbFormulas.get_active_sheet()
>>> sheet['A3'].value
'=SUM(A1:A2)'
>>> wbDataOnly = openpyxl.load_workbook('/tmp/writeFormula.xlsx',data_only=True)
>>> sheet = wbDataOnly.active
>>> sheet['A3'].value
这里,如果调用 load_workbook()
时带有 data_only=True
, A3
单元格就显示为 500
,即公式的结果,而不是公式的文本。
Excel公式为电子表格提供了一定程度的编程能力, 但对于复杂的任务,很快就会失去控制。 例如,即使你非常熟悉Excel的公式,要想弄清楚
=IFERROR(TRIM(IF(LEN(VLOOKUP(F7,Sheet2!$A$1:$B$10000,2,FALSE))>0,SUBSTITUTE(VLOOKUP(F7,Sheet2!$A$l:$B$10000,2,FALSE)," ",""),"")),"")
实际上做了什么也是一件非常头痛的事。 Python代码的可读性要好得多。