微软Excel可以说是地球上最流行的商业软件,几乎每家公司都以这种或那种方式使用它。熟练掌握Excel是许多工作的必备技能。问题就在这里。手动管理Excel中的数据往往是相当重复和乏味的。如果你能在减少重复的同时仍然利用微软Excel的力量,那不是很好吗?进入Python编程语言。正如Excel是最流行的计算机应用程序之一,Python是最流行的编程语言之一。一旦你[学会了基本的Python],你就可以把Python和Excel结合起来,简化你的工作流程,减轻你的工作量,在更短的时间内完成更多的工作,一般来说就是更有效率。在本教程中,我们将研究如何开始一起使用Python和Exel。
如何使用Pandas加载和保存数据
Pandas是用Python编写的流行的开源库,明确设计用于数据分析和操作。Pandas可以通过称为数据框架的方式直接与Excel文件一起工作。一个数据框架就像你的Python程序内存中的一个电子表格。一个数据框架有索引的行和标题列,它们都存储着所谓的系列。系列存储了行和列中的所有值,几乎和列表一样。因为这两个对象都是可迭代的,所以Pandas使得遍历和拾取数据变得容易。使用数据框架,我们可以做任何我们想要的分析或分组,并将其导出到Excel。爽啊!
安装Pandas
要开始使用Pandas,请确保你已经安装了它。pip install pandas命令应该可以做到这一点。
同时,我们还应该运行pip install openpyxl和pip install xlrds,因为我们也将使用这些模块。
使用潘达斯加载和保存数据
为了开始在Pandas中处理数据,我们需要从文件中导入一些数据。潘达斯的前两个方法是**.read_excel()和.read_csv()**,可以帮助我们完成这个任务。你也可以在潘达斯中从列表或代码中的对象创建数据框架。
Excel数据框
在这第一个例子中,我们有一个名为regiondata.xlsx的文件。它只是有一些简单的样本数据可以查看。
现在我们可以用Python把这个.xlsx文件读成一个数据框,然后输出结果。我们通过调用import pandas 作为 pd 来完成这个任务。我们还可以导入openpyxl模块,这样就可以保存到Excel文件中。一旦我们有了这些,我们只需要用.read_excel()来初始化我们的数据框。
import pandas as pd
from openpyxl.workbook import Workbook
dataframe_excel = pd.read_excel('excel/regiondata.xlsx')
print(dataframe_excel)
你可以看到,Pandas对行使用索引,对列使用标题。在本例中,索引是整数,而我们的标题是字符串,如地区、单位、销售和出口。
CSV数据框架
现在让我们继续使用Pandas将CSV文件读入一个数据框架。为此,我们可以使用pandas[.read_csv()]方法。这里是我们要打开的CSV文件。
import pandas as pd
from openpyxl.workbook import Workbook
dataframe_csv = pd.read_csv('excel/some_names.csv')
print(dataframe_csv)
我们可以看到索引是存在的,但是第一行的数据是作为文件其余部分的头。我们并不希望这样,所以我们需要指定CSV文件中不存在头文件。
为了解决这个问题,我们所要做的就是添加一个页眉参数,并将其设置为无。当我们再次运行时,我们可以看到,现在的标题是基于整数的。
import pandas as pd
from openpyxl.workbook import Workbook
dataframe_csv = pd.read_csv('excel/some_names.csv', header=None)
print(dataframe_csv)
设置列名
如果这些整数是每一列的描述性名称,就会更有帮助。我们可以通过设置列来解决这个问题。我们简单地分配一个列表,每个元素都对应于我们希望命名的列。
import pandas as pd
from openpyxl.workbook import Workbook
dataframe_csv = pd.read_csv('excel/some_names.csv', header=None)
dataframe_csv.columns = ['First', 'Last', 'Address', 'City', 'State', 'Zip', 'Population']
print(dataframe_csv)
Pandas CSV到Excel
现在让我们继续把CSV文件保存为.xlsx类型的Excel文件。这是用.to_excel()方法完成的,并传入文件的路径和名称。
import pandas as pd
from openpyxl.workbook import Workbook
dataframe_csv = pd.read_csv('excel/some_names.csv', header=None)
dataframe_csv.columns = ['First', 'Last', 'Address', 'City', 'State', 'Zip', 'Population']
print(dataframe_csv)
dataframe_csv.to_excel('excel/some_names_modified.xlsx')
这将在我们指定的目录中创建一个新的Excel文件,当我们在Excel中打开该文件时,我们可以看到它有我们所期望的索引和标题。
文本文件数据框
奇怪的是,从文本文件中创建一个数据框也是使用相同的.read_csv()函数完成的。这是因为CSV文件和文本文件之间没有太大区别,只是在格式上有一些小的差别。我们有一个文本文件,其中有超过11000行的数据。Pandas可以超快地读取这个大量的数据。
import pandas as pd
from openpyxl.workbook import Workbook
dataframe_txt = pd.read_csv('excel/some_data.txt', delimiter='t')
print(dataframe_txt)
文件本身是以制表符分隔的,这就是为什么我们需要指定*delimiter='t'*作为.read_csv()函数的第二个参数。Pandas提供了我们在这里看到的输出,由于数据集里有很多行,所以省略了中间的那块行。
如何用Pandas查看和检查数据
当使用Pandas时,从数据中获取你想要的东西是一个操作数据框架的问题。让我们来看看一些选择和查看功能,以及把我们想要的值保存到Excel表格中。
如何在Pandas中使用列
下面的代码是在前面的some_names.csv文件上操作的,在这个文件中我们已经指定了列名。想象一下,如果你不得不处理一个列数太多的电子表格,以至于很难在终端读取数据。你需要知道哪些列包含什么内容,这样你就可以访问你需要进行的数据。为了做到这一点,我们可以使用我们用来分配列的同一个函数。打印出dataframe_csv.columns变量向我们展示了我们正在处理的数据。
import pandas as pd
from openpyxl.workbook import Workbook
dataframe_csv = pd.read_csv('excel/some_names.csv', header=None)
dataframe_csv.columns = ['First', 'Last', 'Address', 'City', 'State', 'Zip', 'Population']
print(dataframe_csv.columns)
Index(['First', 'Last', 'Address', 'City', 'State', 'Zip', 'Population'], dtype='object')
这向我们展示了数据是如何按列分割的,如果我们愿意,现在可以只查看一列。Pandas数据框架是一个多行多列的数据结构,就像一个矩阵。这使得我们可以很容易地处理所有的数据,如果我们想的话,可以只处理一列,或者一行。不需要循环,我们所要做的就是按列名索引。所以,我们说我们要的是名字。那么,我们只需获取 "名字 "的索引,就可以打印出 "名字 "列中的所有数值和它们的索引。
import pandas as pd
from openpyxl.workbook import Workbook
dataframe_csv = pd.read_csv('excel/some_names.csv', header=None)
dataframe_csv.columns = ['First', 'Last', 'Address', 'City', 'State', 'Zip', 'Population']
print(dataframe_csv['First'])
0 Liam
1 Noah
2 Emma
3 Olivia
4 Ava
5 James
Name: First, dtype: object
如果你想访问多个列的数据,你可以传入一个列表。所以我们说我们想要地址和州这两列。我们只需用这两个值构建一个列表,然后用括号符号把它们传进去。现在我们有了地址和州以及它们的索引。
import pandas as pd
from openpyxl.workbook import Workbook
dataframe_csv = pd.read_csv('excel/some_names.csv', header=None)
dataframe_csv.columns = ['First', 'Last', 'Address', 'City', 'State', 'Zip', 'Population']
print(dataframe_csv[['Address', 'State']])
Address State
0 3 Jackson Drive MI
1 81 Emerson Way CO
2 17 Upside Lane TX
3 712 Front Street CA
4 24 Seven Street ID
5 11 Breaker Lane OH
当电子表格有数百行数据时,你可能想只关注某一列的数据子集,例如。这可以通过切片来实现,其语法是你所习惯的标准Python切片方法。在下面这个例子中,我们想看Zip列,但只看前两个结果。突出显示的一行显示了实现这一目的的分片语法。
import pandas as pd
from openpyxl.workbook import Workbook
dataframe_csv = pd.read_csv('excel/some_names.csv', header=None)
dataframe_csv.columns = ['First', 'Last', 'Address', 'City', 'State', 'Zip', 'Population']
print(dataframe_csv['Zip'][0:2])
0 49508
1 80922
Name: Zip, dtype: int64
如何在Pandas中处理行
既然我们已经了解了一些列的知识,让我们来看看如何在Pandas中处理一些行。Pandas会自动对行进行整数索引,我们可以使用这些索引,用[.iloc函数]、来专门定位它们。在下面的例子中,我们传入2作为一个索引,并将其打印到屏幕上。打印出来的数据就是我们期望的那一行。
import pandas as pd
from openpyxl.workbook import Workbook
dataframe_csv = pd.read_csv('excel/some_names.csv', header=None)
dataframe_csv.columns = ['First', 'Last', 'Address', 'City', 'State', 'Zip', 'Population']
print(dataframe_csv.iloc[2])
First Emma
Last Williams
Address 17 Upside Lane
City Watauga
State TX
Zip 76148
Population 120000
Name: 2, dtype: object
如果你看的是Excel中的实际电子表格,上面的代码就是选择这里看到的行。
你也可以向下钻,选择电子表格中的单个单元格。同样,内存中的数据框架就像一个矩阵,就像我们在视觉上看到的那样。让我们考虑一下,我们想访问这里圈出的单元格数据。
用迭代的方式找到这些数据是可能的,但将两个数字或变量以对应于行-列值或坐标系的方式传递给.iloc[]更有效率。所以在我们的例子中,我们想要上面圈出的文字。在Pandas中,我们知道索引的编号是从0开始的,而我们的标头是字符串。同样真实的是,当使用.iloc[]函数时,页眉也对应于从零开始的整数值。第一个参数是行,第二个参数是列。由于这些都是基于零的,所以我们想要整数3的行和整数2的列。
import pandas as pd
from openpyxl.workbook import Workbook
dataframe_csv = pd.read_csv('excel/some_names.csv', header=None)
dataframe_csv.columns = ['First', 'Last', 'Address', 'City', 'State', 'Zip', 'Population']
print(dataframe_csv.iloc[3, 2])
712 Front Street
保存提取的数据
现在我们已经掌握了如何通过列、行或协调器访问数据的知识,我们可以看到,只对我们想要的数据进行钻取是多么容易。考虑到这一点,假设我们想访问数据的一个子集,然后将这些数据存储在自己的电子表格中。我们可以使用我们在这里看到的代码来实现这一目标。
import pandas as pd
from openpyxl.workbook import Workbook
dataframe_csv = pd.read_csv('excel/some_names.csv', header=None)
dataframe_csv.columns = ['First', 'Last', 'Address', 'City', 'State', 'Zip', 'Population']
extracted_data = dataframe_csv[['First', 'Last', 'City']]
stored = extracted_data.to_excel('extracted_data.xlsx', index=None)
在Excel中打开结果文件extracted_data.xlsx,显示它有我们要钻研的确切数据。非常酷!
如何使用Pandas对数据进行过滤和排序
在Pandas中,你可以用几乎无数种方法来过滤和排序数据,我们将在这里看几个更简单的例子。第一个例子只是寻找所有在城市列中有沃辛顿值的行。
import pandas as pd
from openpyxl.workbook import Workbook
dataframe_csv = pd.read_csv('excel/some_names.csv', header=None)
dataframe_csv.columns = ['First', 'Last', 'Address', 'City', 'State', 'Zip', 'Population']
print(dataframe_csv[dataframe_csv['City'] == 'Worthington'])
First Last Address City State Zip Population
4 Zach Price 99 Eleven Way Worthington OH 43085 68000
8 James Miller 11 Breaker Lane Worthington OH 43085 68000
在Pandas中过滤数据时,如果要结合两个条件,可以使用安培尔&操作符,如下图所示。这段代码检查所有城市为肯特伍德*和*第一列的值为Sam的行。
import pandas as pd
from openpyxl.workbook import Workbook
dataframe_csv = pd.read_csv('excel/some_names.csv', header=None)
dataframe_csv.columns = ['First', 'Last', 'Address', 'City', 'State', 'Zip', 'Population']
print(dataframe_csv[(dataframe_csv['City'] == 'Kentwood') & (dataframe_csv['First'] == 'Sam')])
First Last Address City State Zip Population
0 Sam Smith 3 Jackson Drive Kentwood MI 49508 45000
6 Sam Miller 75 High Street Kentwood MI 49508 45000
如果你只想在数据的一个子集上工作,你可以使用.drop()函数来删除列。
import pandas as pd
from openpyxl.workbook import Workbook
dataframe_csv = pd.read_csv('excel/some_names.csv', header=None)
dataframe_csv.columns = ['First', 'Last', 'Address', 'City', 'State', 'Zip', 'Population']
drop = ['Address', 'Population']
dataframe_csv.drop(columns=drop, inplace=True)
print(dataframe_csv)
First Last City State Zip
0 Sam Smith Kentwood MI 49508
1 Sally Holmes Boise ID 83704
2 Noah Johnson C Springs CO 80922
3 Emma Williams Watauga TX 76148
4 Zach Price Worthington OH 43085
5 Olivia Jones C Valley CA 94546
6 Sam Miller Kentwood MI 49508
7 Ava Brown Boise ID 83704
8 James Miller Worthington OH 43085
这里我们可以创建一个默认值为false的新列。然后,我们可以查看其他列中的数据,并根据一个条件将该值改为True。在这个例子中,我们检查State列的值是否为OH,如果是,就继续将我们定义的新列设置为True。
import pandas as pd
from openpyxl.workbook import Workbook
dataframe_csv = pd.read_csv('excel/some_names.csv', header=None)
dataframe_csv.columns = ['First', 'Last', 'Address', 'City', 'State', 'Zip', 'Population']
drop = ['Address', 'Population']
dataframe_csv.drop(columns=drop, inplace=True)
dataframe_csv['T or F'] = False
dataframe_csv.loc[dataframe_csv['State'] == 'OH', 'T or F'] = True
print(dataframe_csv)
First Last City State Zip T or F
0 Sam Smith Kentwood MI 49508 False
1 Sally Holmes Boise ID 83704 False
2 Noah Johnson C Springs CO 80922 False
3 Emma Williams Watauga TX 76148 False
4 Zach Price Worthington OH 43085 True
5 Olivia Jones C Valley CA 94546 False
6 Sam Miller Kentwood MI 49508 False
7 Ava Brown Boise ID 83704 False
8 James Miller Worthington OH 43085 True
在下面两个例子中,我们使用**.sort_values()**方法来对某一列的数据进行排序。
import pandas as pd
from openpyxl.workbook import Workbook
dataframe_csv = pd.read_csv('excel/some_names.csv', header=None)
dataframe_csv.columns = ['First', 'Last', 'Address', 'City', 'State', 'Zip', 'Population']
print(dataframe_csv.sort_values('First'))
First Last Address City State Zip Population
7 Ava Brown 24 Seven Street Boise ID 83704 30000
3 Emma Williams 17 Upside Lane Watauga TX 76148 120000
8 James Miller 11 Breaker Lane Worthington OH 43085 68000
2 Noah Johnson 81 Emerson Way C Springs CO 80922 18000
5 Olivia Jones 712 Front Street C Valley CA 94546 90000
1 Sally Holmes 12 Front Drive Boise ID 83704 30000
0 Sam Smith 3 Jackson Drive Kentwood MI 49508 45000
6 Sam Miller 75 High Street Kentwood MI 49508 45000
4 Zach Price 99 Eleven Way Worthington OH 43085 68000
要对数据进行其他方向的排序,只需将ascending=False作为第二个参数。
import pandas as pd
from openpyxl.workbook import Workbook
dataframe_csv = pd.read_csv('excel/some_names.csv', header=None)
dataframe_csv.columns = ['First', 'Last', 'Address', 'City', 'State', 'Zip', 'Population']
print(dataframe_csv.sort_values('First', ascending=False))
First Last Address City State Zip Population
4 Zach Price 99 Eleven Way Worthington OH 43085 68000
0 Sam Smith 3 Jackson Drive Kentwood MI 49508 45000
6 Sam Miller 75 High Street Kentwood MI 49508 45000
1 Sally Holmes 12 Front Drive Boise ID 83704 30000
5 Olivia Jones 712 Front Street C Valley CA 94546 90000
2 Noah Johnson 81 Emerson Way C Springs CO 80922 18000
8 James Miller 11 Breaker Lane Worthington OH 43085 68000
3 Emma Williams 17 Upside Lane Watauga TX 76148 120000
7 Ava Brown 24 Seven Street Boise ID 83704 30000
用Openpyxl直接控制Excel
Openpyxl是另一个流行的库,适合于搜索某些数据,复制和粘贴到新的Excel文档,或者只是想让你的数据看起来更漂亮。它是一个Python包,允许你的代码与Excel文档直接交互。通过Openpyxl,你不仅可以操作电子表格中的数据,还可以操作电子表格本身的属性。Openpyxl通过将Excel工作簿以及工作表存储为可以用Python代码改变的对象来做到这一点。Openpyxl是最常用的专门处理Excel的模块,因为它允许开发者做任何事情,从样式表到解析数据或创建图表。要开始使用Openpyxl,请用pip install openpyxl命令来安装它。
.load_workbook()
我们有一个名为stock_options.xlsx的文件,我们可以用来做一些例子。在我们开始之前,有必要快速回顾一下Excel术语。
- 工作簿- Excel文件本身被称为工作簿。
- .xlsx扩展名- 单个工作簿被保存在一个扩展名为.xlsx的文件中。
- 工作表(Sheet)- 每个工作簿可以有多个工作表。
- 列- 列是垂直排列的,并使用字母作为标识。
- 行- 行是水平排列的,使用数字来识别。
- 单元格--在列和行的交汇处,就是所谓的单元格。
我们将使用的Excel文件看起来像这样。
要开始处理一个工作簿,我们可以使用代码,就像我们在这里看到的那样。
import openpyxl
workbook = openpyxl.load_workbook('excel/stock_options.xlsx')
print(type(workbook))
打印出工作簿变量显示它是一个工作簿类型的对象。
<class 'openpyxl.workbook.workbook.Workbook'>
如何访问工作表
一个工作簿可能包含多个工作表。在openpyxl中,我们可以用几种方法访问工作表对象。如果你知道你要处理的工作表的名称,这段代码将适合你。
import openpyxl
workbook = openpyxl.load_workbook('excel/stock_options.xlsx')
sheet = workbook['Sheet1']
print(type(sheet))
<class 'openpyxl.worksheet.worksheet.Worksheet'>
如果你不知道你想访问的工作表的名称,你可以通过简单地调用.sheetnames来检查存在哪些名称。
import openpyxl
workbook = openpyxl.load_workbook('excel/stock_options.xlsx')
sheetnames = workbook.sheetnames
print(sheetnames)
['Sheet1', 'Sheet2', 'Sheet3']
如何访问工作表中的单元格
一旦你有了工作表对象,你就可以很容易地访问它的单元格和值。
import openpyxl
workbook = openpyxl.load_workbook('excel/stock_options.xlsx')
sheet = workbook['Sheet1']
cell = sheet['A3']
print(cell.value)
SFIX
你也可以使用.cell()方法访问一个单元格,并将行和列作为整数传递,就像这样。
import openpyxl
workbook = openpyxl.load_workbook('excel/stock_options.xlsx')
sheet = workbook['Sheet1']
cell = sheet.cell(row=4, column=14)
print(cell.value)
0.3745
当你想迭代工作表中的值时,使用.cell()方法的方法很好。比如说。
import openpyxl
workbook = openpyxl.load_workbook('excel/stock_options.xlsx')
sheet = workbook['Sheet1']
for i in range(2, 7):
cell = sheet.cell(row=i, column=1)
print(cell.value)
CCJ
SFIX
FE
WLL
ACC
我们还可以使用切片法来选择单元格的范围。下面是一个例子。
import openpyxl
workbook = openpyxl.load_workbook('excel/stock_options.xlsx')
sheet = workbook['Sheet1']
cell_range = sheet['A1':'A3']
print(cell_range)
((<Cell 'Sheet1'.A1>,), (<Cell 'Sheet1'.A2>,), (<Cell 'Sheet1'.A3>,))
要选择一整列,我们可以简单地指定我们想要的那一列。然后,我们将打印出该列中的项目数量,因为在这么大的文件中,真正打印出整个数据会太多,无法查看。我们可以看到A列中有923个数值。
import openpyxl
workbook = openpyxl.load_workbook('excel/stock_options.xlsx')
sheet = workbook['Sheet1']
column_a = sheet['A']
print(len(column_a))
923
这段代码向我们展示了第1行中所有有数值的单元格。
import openpyxl
workbook = openpyxl.load_workbook('excel/stock_options.xlsx')
sheet = workbook['Sheet1']
row_0 = sheet[1]
print(row_0)
(<Cell 'Sheet1'.A1>, <Cell 'Sheet1'.B1>, <Cell 'Sheet1'.C1>, <Cell 'Sheet1'.D1>, <Cell 'Sheet1'.E1>, <Cell 'Sheet1'.F1>, <Cell 'Sheet1'.G1>, <Cell 'Sheet1'.H1>, <Cell 'Sheet1'.I1>, <Cell 'Sheet1'.J1>,
<Cell 'Sheet1'.K1>, <Cell 'Sheet1'.L1>, <Cell 'Sheet1'.M1>, <Cell 'Sheet1'.N1>, <Cell 'Sheet1'.O1>)
单元格是由字符串标题和整数组合访问的,列只是标题。对于行,我们只使用整数,我们仍然通过我们的工作表来访问它们。就像其他函数一样,如果我们想抓取一行,我们通过一个特定的数字进行索引。但如果我们想抓取多行,我们就使用切分法。
我们可以看的最后一个访问函数是通过列或行进行迭代。当我们在这些对象中迭代时,我们在for循环中使用一个特定的函数。所以我们来看看行的函数。列函数是完全一样的,但词句是对调的。在iter_rows或iter_columns函数中,我们必须为我们的行和列指定最小和最大。我们将设置最小行为1,最大列为3,最大行为2。在循环中,我们再次遍历这些对象。现在你会注意到我们应该打印从最小行1,最小列1,到最大行2和最大列3的单元格。我们可以看到,我们的最小行1对应于第一行,我们的最大行只对应于第二行。所以你看我们只有A1到C2。最大列等于3使我们一直到C。
import openpyxl
workbook = openpyxl.load_workbook('excel/stock_options.xlsx')
sheet = workbook['Sheet1']
for row in sheet.iter_rows(min_row=1, max_col=3, max_row=2):
for cell in row:
print(cell)
<Cell 'Sheet1'.A1>
<Cell 'Sheet1'.B1>
<Cell 'Sheet1'.C1>
<Cell 'Sheet1'.A2>
<Cell 'Sheet1'.B2>
<Cell 'Sheet1'.C2>
创建新的工作簿和工作表
在使用openpyxl时,我们不需要导入一个已经存在的excel文件。下面的代码创建了一个有三个工作表的工作簿。
import openpyxl
workbook = openpyxl.Workbook()
worksheet = workbook.active
worksheet2 = workbook.create_sheet('First Sheet')
worksheet3 = workbook.create_sheet('Second Sheet')
worksheet.title = 'My Awesome Sheet'
print(workbook.sheetnames)
['My Awesome Sheet', 'First Sheet', 'Second Sheet']
为了向工作簿中的一个工作表添加一些数据,我们可以给我们感兴趣的单元格分配一个值。然后,我们将保存工作簿并在Excel中查看它。
import openpyxl
workbook = openpyxl.Workbook()
worksheet = workbook.active
worksheet2 = workbook.create_sheet('First Sheet')
worksheet3 = workbook.create_sheet('Second Sheet')
worksheet.title = 'My Awesome Sheet'
worksheet['A1'] = 'Hello Openpyxl'
workbook.save('excel/awesomeworkbook.xlsx')
如何格式化工作簿
当向他人展示大量的数据集时,以可读性和可理解性的方式进行格式化是有帮助的。如果你想创建一个有风格的、专业的Excel,那么openpyxl提供了完美的格式化工具。在下面的例子中,我们使用openpyxl中的一些可用的格式化工具,为电子表格添加一个漂亮的标题。通过插入行,然后使用合并函数,我们可以创建一个位于所有实际数据之上的页眉。在该页眉区域,我们使用字体模块为文本添加颜色,此外还可以将其斜体化。我们知道如何为单元格设置一个值,所以我们接下来要做的就是这个。对齐模块使我们可以很容易地把内容放到合并的单元格区域,而且非常精确。我们将文本设置为垂直居中,水平向右移动。GradientFill模块让我们也能为页眉添加一个很酷的渐变效果。
import openpyxl
from openpyxl.styles import Font, Alignment, GradientFill
workbook = openpyxl.load_workbook('excel/stock_options.xlsx')
sheet = workbook['Sheet1']
sheet.insert_rows(1, 2)
sheet.merge_cells('A1:O2')
cell = sheet['A1']
cell.font = Font(color='007742', size=20, italic=True)
cell.value = 'Super Cool And Stylish Spreadsheet'
cell.alignment = Alignment(horizontal='right', vertical='center')
cell.fill = GradientFill(stop=('000000', 'ffffff'))
workbook.save('excel/stylish.xlsx')
这段代码在excel目录中保存了一个新的工作簿,名为fashion.xlsx。如果我们用Excel打开该工作簿,我们可以看到在工作簿的顶部有两行新的内容。该范围内的所有单元格都已被合并,现在该区域内有一些文本。我们还可以看到我们应用的整齐的颜色、字体和斜体。酷!"。

Openpyxl中的命名样式
Openpyxl有一个很酷的模块叫NamedStyles。命名样式是我们可以创建的存储样式的对象,这样我们就可以多次使用它,而不是像我们上面做的那样输入所有的内容。为了完成这个例子,我们在文件的顶部又导入了几个模块。这些模块是NamedStyle、Side、Border和PatternFill。我们想在每一列的顶部为数据添加另一种效果。所以我们创建了一个名为highlight的新变量,并给它分配了一个NamedStyle。然后我们可以简单地用我们想要的样式的所有属性来建立这个对象。在这种情况下,我们在单元格的顶部和底部添加一个边框,使其呈现黄色,并将字体设置为粗体。一旦命名的样式到位,我们就可以简单地迭代第3行的每个单元格,在每次迭代中应用高光。
import openpyxl
from openpyxl.styles import Font, Alignment, GradientFill, NamedStyle, Side, Border, PatternFill
workbook = openpyxl.load_workbook('excel/stock_options.xlsx')
sheet = workbook['Sheet1']
sheet.insert_rows(1, 2)
sheet.merge_cells('A1:O2')
cell = sheet['A1']
cell.font = Font(color='007742', size=20, italic=True)
cell.value = 'Super Cool And Stylish Spreadsheet'
cell.alignment = Alignment(horizontal='right', vertical='center')
cell.fill = GradientFill(stop=('000000', 'ffffff'))
highlight = NamedStyle(name='highlight')
highlight.font = Font(bold=True)
bd = Side(style='thick', color='000000')
highlight.border = Border(left=None, top=bd, right=None, bottom=bd)
highlight.fill = PatternFill('solid', fgColor='fde295')
for cell in sheet['3:3']:
cell.style = highlight
workbook.save('excel/stylish.xlsx')
如何在 Excel 中使用 Python 摘要
Python与Excel配合得非常好,两者在各自的领域都非常流行。Python有一个不断壮大的开发者社区,他们生产出了像Pandas和Openpyxl这样的优秀工具。我们看了一下使用这两个工具与Excel协同工作的基础知识。总有更多的东西需要学习,所以上面的资源清单是一个继续学习的好地方。