如何使用Python构建Excel电子表格

221 阅读8分钟

使用Python构建Excel电子表格

操作大型数据集的最直观和最友好的方式之一就是使用电子表格。因此,今天有很多电子表格软件包可用。

然而,Microsoft Excel作为分析数据集的最受欢迎的电子表格包占据了领先地位。

在这篇文章中,我们将学习如何用Python的库OpenPyxlXlsxWriter 来编写和可视化Excel电子表格。

前提条件

本教程假定你具备以下条件。

  • 对Microsoft Excel有基本了解。
  • Python编程语言。
  • 一个IDE(代码编辑器);在本教程中我将使用Jupyter笔记本。

下面是Excel的基本术语的快速列表。

  • 工作簿/工作表- 这是我们的Excel文件。
  • 工作表/工作表--这是Excel文件中的一个页面。我们在工作簿中可以有多个工作表。
  • --这是有字母的垂直标题。它从A 开始到XFD
  • - 这是有数字的水平标题。它从11048576 开始。
  • 单元格- 这些是工作表中的矩形框。

单元格是根据它们所对应的行的编号和列的字母来命名的。例如,工作表中的第一个单元格是A1

开始使用OpenPyxl和XlsxWriter

就像python中的其他库一样,在开始之前我们将首先安装和导入这些库。

Python的OpenPyxl和XlsxWriter模块使我们能够读取和修改Excel电子表格文件。当涉及到将python数据自动化到Excel时,这些库很有帮助。

然而,与OpenPyXl不同,不能读取和更新现有的Excel文件。

要安装这些模块,请在交互式外壳中输入以下内容。

安装OpenPyxl

pip install openpyxl

安装XlsxWriter

pip install xlsxwriter

如果模块被正确安装,你应该不会得到错误信息。

在随后的章节中,我将讨论如何使用OpenPyxl创建、读取和可视化数据;然后,我将转到XlsxWriter。

用OpenPyxl创建、读取和加载现有工作簿

Openpyxl允许我们读/写Excel 2010 xlsx/xlsm/xltx/xltm文件。

安装完毕后,我们将使用以下代码创建一个简单的电子表格。

from openpyxl import Workbook  #importing our library

your_workbook = Workbook()    #creating the workbook
sheet = your_workbook.active
sheet["A1"] = "Hello"
sheet["B1"] = "Sectionio!"
sheet["A2"] = "EngEd"
sheet["B2"] = "is!"
sheet["C2"] = "Two"

your_workbook.save(filename="hello_world_openpyxl.xlsx") #saving the file with the 'xlsx' excel extension

Creating a File with Openpyxl 作者的屏幕截图

OpenPyxl允许我们加载预先存在的工作簿。为了跟上进度,你可以在这里下载我们将要使用的数据集。使用load_workbook function 来加载这个数据集。

from openpyxl import load_workbook

your_workbook2 = load_workbook('Test.xlsx')
print(your_workbook2.sheetnames)

your_workbook2.sheetnames 告诉我们在我们的excel工作簿中的可用工作表。

使用OpenPyxl的基本excel操作

一旦你加载了你的数据,我们将从它那里获取信息。这可以通过调用.value 函数来完成。

print(your_workbook2['Products']['A2'].value)

但是,如果我想读取整个工作簿呢?

首先,我们需要找出工作簿的行数和列数。这可以通过.max_row.max_column 函数来实现。

row = your_workbook2['Products'].max_row
col = your_workbook2['Products'].max_column

print(row)
print(col)

接下来,我将运行两个for 循环;一个将返回我们行上的所有数据,另一个将返回我们列上的数据。

for i in range(1, row+1):
    for j in range (1, col +1):
        print(your_workbook2['Products'].cell(i, j).value)

现在,让我们转到单元格格式化。

单元格格式化可以自定义工作簿中的单元格的外观。我们将对我们加载的测试工作簿进行简单的格式化。但是,首先,我们将创建一个工作表对象。

Wb = your_workbook2['Products']

然后,我们将导入PatternFill

图案填充允许我们改变单元格的颜色和图案。为了定义我们的PatternFill,我们需要传递一个pattern typefgColor ,这是一个十六进制代码。

你可以从Rapid表中获得任何颜色的十六进制代码。

from openpyxl.styles import PatternFill

first_style = PatternFill(patternType = 'solid', fgColor = '00FF00')
Wb['B7'].fill = first_style

由于我们正在改变工作簿,所以一旦完成运行我们的代码,我们必须保存它。所以现在,看一下电子表格。你会看到单元格B7 已经做了修改。

要保存电子表格,请使用.save() 函数。

your_workbook2.save(filename='Test.xlsx') 

Cell formatting With Openpyxl

条件格式化与单元格格式化不同,因为它允许我们根据一个条件突出显示特定的单元格。这将我们的注意力吸引到特定的单元格,并使获得洞察力变得容易。

我将导入ColorScaleRule() ,在Excel中启动色标。

色标是视觉指南,有助于理解数据分布。颜色的深浅代表了处于极端的数值。

from openpyxl.formatting.rule import ColorScaleRule

Condition_style = ColorScaleRule(start_type = 'min', start_color = 'E0FFFF', end_type = 'max', end_color = '008080')

Wb.conditional_formatting.add('A2:A11', Condition_style)

your_workbook2.save(filename='Test.xlsx')

Conditional formatting with Openpyxl 作者的屏幕截图

最后,让我们把第一栏中的数字加起来。为了实现这一目标,我们将在一个单元格中输入求和公式。

Wb['A13'] = 'Total'
Wb['B13'] = '=SUM(A2:A11)'
your_workbook2.save(filename='Test.xlsx') 

Sum with Openpyxl

如何用OpenPyxl实现数据集的可视化

作为人类,如果我们能够直观地看到事物,我们就会迅速地内化它们。

数据可视化是信息的图形化表示。因为有了图形等视觉元素,我们可以对今天接触到的很多信息或数据进行更有逻辑性的理解。

OpenPyXL支持创建条形图、线形图、散点图和饼图。我们将使用我们加载的测试工作簿来可视化一个条形图。

from openpyxl.chart import BarChart, Reference

现在,让我们使用这些库,看看它是如何发挥的。在交互式外壳中输入下面的代码来创建一个条形图。

sheet = your_workbook2.active 

#we would give it the range of our data
values = Reference(sheet, min_col = 1, min_row = 1, max_col = 2, max_row = 11) 

chart = BarChart()  # adding a bar chart
chart.add_data(values)
chart.title = 'BAR-CHART'    # giving the chart a title 
chart.y_axis.title = 'Products'
sheet.add_chart(chart, "D2")  #D2 represent where we want the chart to start from/

your_workbook2.save(filename='Test.xlsx') 

Bar chart with Openpyxl

我们已经使用BarChart() 创建了一个条形图。我们还可以使用PieChart()LineChart()ScatterChart() ,创建饼图、线图和散点图。

现在,让我们用XlsxWriter 来尝试所有这些。

用XlsxWriter创建、读取和加载现有工作簿

在本教程的前面,我们导入了XlsxWriter。导入后,我们将使用下面的代码创建一个简单的电子表格。

import xlsxwriter #Importing our library

your_workbook = xlsxwriter.Workbook('hello_world_xlwt.xlsx')  #Creating the workbook
sheet1 = your_workbook.add_worksheet('Sheet 1')  #The add.worksheet() helps you add a worksheet into your excel files

.write() 函数允许我们添加数据。它需要两样东西。

  • 将要输入数据的单元格。
  • 要输入的数据。
sheet1.write('A1' , 'Hello') 
sheet1.write('B1' , 'World')
sheet1.write('A2' , 'EngEd')
sheet1.write('B2', 'is')
sheet1.write('C2' , 'Two')

your_workbook.close() #once done, you close using .close

Creating a  file with Xlsxwriter

我们也可以通过指定行和列来写上面的代码。

sheet1.write(0, 0 , 'Hello')  #Row 0 and column 0 which is A1
sheet1.write(0, 1, 'World')
sheet1.write(1, 0 , 'EngEd')
sheet1.write(1, 2, 'is')
sheet1.write(1, 3, 'Two')

your_workbook.close() #close the workbook

不幸的是,XlsxWriter ,不允许我们读和写预先存在的Excel工作簿。

使用XlsxWriter的基本Excel操作

让我们试着执行一些基本的excel操作。

我们从一个简单的SUM 操作开始。

在这之前,我们需要使用.write_column.write_row ,将数据填充到我们的工作表中。

.write_column 将数据添加到一列,而.write_row 将数据添加到一行。我们只需要指定起始单元格。这在建立页眉时很有用。之后,我们在D列上添加数据。

import xlsxwriter  #Importing our library

your_workbook = xlsxwriter.Workbook('hello_world_xlwt.xlsx')  #Creating the workbook
sheet1 = your_workbook.add_worksheet('Sheet 1')  #The add.worksheet() helps you add a worksheet into your excel files

sheet1.write_column('D1', [1, 2, 3, 4, 5]) #Adding data
sheet1.write_row('A4', [1, 2, 3, 4, 5])

sheet1.write('C7', 'TOTAL:')
sheet1.write('D7', '=SUM(D1:D5)')

your_workbook.close()

Sum with Xlsxwriter.

让我们来做一些格式化。

我们可以通过利用主题来应用单元格格式化。例如,可以创建和存储不同的主题JSON格式,并将它们应用于你的脚本。

Cyan_design = your_workbook.add_format({'bg_color' :  'cyan'}) #Creating a theme

sheet1.write('A7', '=PI()', Cyan_design) #Applying it on cell A7

我们可以使用下面的代码来做条件格式化。你需要在关闭工作簿之前把这段代码和下面的代码附加起来。

就像我前面提到的,XlsxWriter不允许我们对预先存在的Excel工作簿进行读写。

oak_design = your_workbook.add_format({'bg_color' :  'green'',
                                       'font_name' : 'Century',
                                       'bold': True,
                                       'font_size' : 25 })

sheet1.conditional_format('D1:D5' ,
                                  { 'type' : 'cell',
                                   'criteria': '>',
                                   'value' : 3,
                                   'format' : oak_design})

或数字格式。

currency_format = your_workbook.add_format({'num_format': '$'})

sheet1.write('A8', 1234.56, currency_format)

Formatting with Xlsxwriter

需要记住的一点是,Python有一个叫做help 的函数。可以用这个来调用。

help(your_workbook.formats[0])

如何用XlsxWriter实现数据集的可视化

为了制作饼状图,我们将利用前面的函数知识建立一个数据集,其中包含西非国家的列表和州/地区的数量。

import xlsxwriter 

workbook= xlsxwriter.Workbook('hello_viz_xlwt.xlsx')
worksheet = workbook.add_worksheet()

headings = ['Countries', 'State_no']

Data = [['Benin', 'Burkina Faso', 'Cape Verde', 'Gambia', 'Ghana', 'Guinea', 'Guinea-Bissau', 'Ivory Coast', 
         'Liberia', 'Mali', 'Mauritania', 'Niger', 'Nigeria', 'Senegal', 'Sierra Leone', 'Togo'],
        [10, 14, 24, 17, 16, 3, 19, 15, 9, 9, 8, 36, 14, 4, 5, 3]]

我们将使用.write_row ,为我们的数据创建标题和.write_column

worksheet.write_row('A1', headings) #Write a row of data starting from A1 for our heading 
 
# Write a column of data starting from A2, B2, C2 respectively.
worksheet.write_column('A2', Data[0])
worksheet.write_column('B2', Data[1])

现在,让我们来创建一个饼图。

进入这个交互式外壳示例,使用.add_chart({'type': 'pie'}) 创建一个饼图,并使用.insert_chart 将其添加到电子表格中。

chart1 = workbook.add_chart({'type': 'pie'})

# Add our data series to our chart
chart1.add_series({
    'name':'Number of States/Regions',
     'categories':['Sheet1', 1,0,16,0],
     'values':['Sheet1', 1,1,16,1],
})

chart1.set_title({'name':'Number of States/Regions'}) #Chart title
chart1.set_style(10) #Chart style
worksheet.insert_chart('C2', chart1, {'x_offset':25, 'y_offset':10}) #insert chart to cell C2

workbook.close()

Visualization with Xlsxwriter

总结

尽管本教程涵盖了使用该库进行操作和可视化的一些基础知识,但你可以通过访问其官方文档来了解更多关于这些库的工作原理。