如何在Excel中使用Python

230 阅读20分钟

微软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 pandas

同时,我们还应该运行pip install openpyxlpip install xlrds,因为我们也将使用这些模块。


使用潘达斯加载和保存数据

为了开始在Pandas中处理数据,我们需要从文件中导入一些数据。潘达斯的前两个方法是**.read_excel().read_csv()**,可以帮助我们完成这个任务。你也可以在潘达斯中从列表或代码中的对象创建数据框架。

Excel数据框

在这第一个例子中,我们有一个名为regiondata.xlsx的文件。它只是有一些简单的样本数据可以查看。

read xlsx file in pandas

现在我们可以用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对行使用索引,对列使用标题。在本例中,索引是整数,而我们的标题是字符串,如地区、单位、销售和出口。

print data frame as output in pandas

CSV数据框架

现在让我们继续使用Pandas将CSV文件读入一个数据框架。为此,我们可以使用pandas[.read_csv()]方法。这里是我们要打开的CSV文件。

pandas CSV file to read

import pandas as pd
from openpyxl.workbook import Workbook

dataframe_csv = pd.read_csv('excel/some_names.csv')

print(dataframe_csv)

我们可以看到索引是存在的,但是第一行的数据是作为文件其余部分的头。我们并不希望这样,所以我们需要指定CSV文件中不存在头文件。

python pandas read_csv output

为了解决这个问题,我们所要做的就是添加一个页眉参数,并将其设置为无。当我们再次运行时,我们可以看到,现在的标题是基于整数的。

import pandas as pd
from openpyxl.workbook import Workbook

dataframe_csv = pd.read_csv('excel/some_names.csv', header=None)

print(dataframe_csv)

pandas read_csv header argument

设置列名

如果这些整数是每一列的描述性名称,就会更有帮助。我们可以通过设置列来解决这个问题。我们简单地分配一个列表,每个元素都对应于我们希望命名的列。

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 column name via list

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中打开该文件时,我们可以看到它有我们所期望的索引和标题。

pandas csv to excel method

文本文件数据框

奇怪的是,从文本文件中创建一个数据框也是使用相同的.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提供了我们在这里看到的输出,由于数据集里有很多行,所以省略了中间的那块行。

python pandas read_csv text file


如何用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中的实际电子表格,上面的代码就是选择这里看到的行。

pandas iloc function row

你也可以向下钻,选择电子表格中的单个单元格。同样,内存中的数据框架就像一个矩阵,就像我们在视觉上看到的那样。让我们考虑一下,我们想访问这里圈出的单元格数据。

access specific cell in pandas

用迭代的方式找到这些数据是可能的,但将两个数字或变量以对应于行-列值或坐标系的方式传递给.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 exract and save to new spreadsheet


如何使用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文件看起来像这样。

Excel Data For Openpyxl

要开始处理一个工作簿,我们可以使用代码,就像我们在这里看到的那样。

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_rowsiter_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')

openpyxl create workbook worksheet save

如何格式化工作簿

当向他人展示大量的数据集时,以可读性和可理解性的方式进行格式化是有帮助的。如果你想创建一个有风格的、专业的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打开该工作簿,我们可以看到在工作簿的顶部有两行新的内容。该范围内的所有单元格都已被合并,现在该区域内有一些文本。我们还可以看到我们应用的整齐的颜色、字体和斜体。酷!"。

How To Format Workbooks

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')

openpyxl named styles example


如何在 Excel 中使用 Python 摘要

Python与Excel配合得非常好,两者在各自的领域都非常流行。Python有一个不断壮大的开发者社区,他们生产出了像Pandas和Openpyxl这样的优秀工具。我们看了一下使用这两个工具与Excel协同工作的基础知识。总有更多的东西需要学习,所以上面的资源清单是一个继续学习的好地方。