📜  如何在Python自动化 Excel 工作表?

📅  最后修改于: 2021-10-19 05:02:08             🧑  作者: Mango

在您阅读本文并学习Python自动化之前……让我们观看 Christian Genco(一位才华横溢的程序员和企业家)的视频,以自动化为例解释编码的重要性。

观看此视频后,您可能会大笑,您肯定也了解自动化在现实生活中的重要性。现在让我们进入主题……

我们都知道Python统治着世界各地,我们也知道Python初学者很友好,与其他语言相比,它更容易学习。你可以用Python做的最好的事情之一就是自动化。

如何在 Python 中自动化 Excel 工作表

考虑一个场景,要求您在网站上为 30,000 名员工创建一个帐户。你觉得如何?当然,您会因手动重复执行此任务而感到沮丧。此外,这将花费太多时间,这不是一个明智的决定。

现在想象一下从事数据输入工作的员工的生活。他们的工作是从 Excel 或 Google Sheet 等表格中获取数据并将其插入其他位置。他们浏览不同的网站和杂志,从那里收集数据,然后将其插入数据库。他们还需要对条目进行计算。

一般来说,收入是根据这份工作的表现而定的。更多的条目,更高的薪水(当然每个人都希望在他们的工作中获得更高的薪水)。

但是你不觉得重复做同样的事情很无聊吗?

现在的问题是……“我怎样才能快速做到? ”, “我怎样才能使我的工作自动化?

与其手动执行这些类型的任务,不如花一个小时编码并自动化这些类型的事情,让您的生活更轻松。只需在Python编写更少的代码行,您就可以自动执行繁琐的任务。

在这篇博客中,我们将创建一个小项目来学习Python的自动化。如果您是初学者,那么您可能更喜欢观看一些视频来学习Python的自动化,阅读此博客对您来说可能是一项无聊的任务,但在这里我们将逐步详细解释所有内容并使事情变得更容易为你。

如果您已经了解Python的核心概念,那就太好了。我们将以带有一些条目的 Excel 工作表为例,我们将学习自动化过程。我们将编写一个Python程序,它可以在一秒钟内处理数千个电子表格。兴奋的???让我们开始吧…

任务介绍

手动处理或更新数以千计的电子表格将花费太多时间。这可能需要数小时、数天甚至数月的时间。我们将编写一个Python程序来自动执行此任务。我们将处理下图中给出的电子表格。

在这个电子表格中,我们有各种交易的记录,但假设由于错误(人为错误或系统错误),第三列中列出的产品的价格是错误的。假设我们需要将价格降低 10%(将价格乘以 0.9 并重新计算价值)。您可以使用第四列中的数学公式手动完成此任务,但如果有数千条记录,则会花费太多时间(可能需要 1 周或两周)。

我们将编写一个Python程序来自动化这个过程。此外,我们将为它添加一个图表。我们的Python程序将在几秒钟内为我们完成这项任务。

让我们进入编码区

为了处理这个 Excel 工作表,我们将使用一个库openpyxl。在您的目录中创建一个文件夹,为其命名并通过在终端中执行以下命令来安装openpyxl包。

pip install openpyxl

现在我们可以导入这个包来处理我们的电子表格。在此之前,将电子表格添加到您的项目文件夹中。现在在你的文件夹中创建一个文件 app.py 并写下下面给出的代码。

Python
import openpyxl as xl
from openpyxl.chart import BarChart, Reference
  
wb = xl.load_workbook('python-spreadsheet.xlsx')
sheet = wb['Sheet1']
  
for row in range(2, sheet.max_row + 1):
    cell = sheet.cell(row, 3)
    corrected_price = float(cell.value.replace('$','')) * 0.9
    corrected_price_cell = sheet.cell(row, 4)
    corrected_price_cell.value = corrected_price
  
values = Reference(sheet, min_row=2, max_row=sheet.max_row, min_col=4, max_col=4)
chart = BarChart()
chart.add_data(values)
sheet.add_chart(chart, 'e2')
  
wb.save('python-spreadsheet2.xlsx')


Python
import openpyxl as xl
from openpyxl.chart import BarChart, Reference
  
  
def process_workbook(filename):
    wb = xl.load_workbook(filename)
    sheet = wb['Sheet1']
  
    for row in range(2, sheet.max_row + 1):
        cell = sheet.cell(row, 3)
        corrected_price = float(cell.value.replace('$', '')) * 0.9
        corrected_price_cell = sheet.cell(row, 4)
        corrected_price_cell.value = corrected_price
  
    values = Reference(sheet, min_row=2, max_row=sheet.max_row, min_col=4, max_col=4)
    chart = BarChart()
    chart.add_data(values)
    sheet.add_chart(chart, 'e2')
    wb.save(filename)


让我们理解上面的代码

我们将逐步解释上面编写的代码以了解完整的过程。

第 1 步。为了处理我们的电子表格导入openpyxl包(我们使用 xl 别名使我们的代码更简洁更短)。此外,要将图表添加到我们的电子表格,我们需要导入两个类 BarChart 和 Reference。

import openpyxl as xl
from openpyxl.chart import BarChart, Reference

第 2 步。现在我们需要加载 Excel 工作簿python-spreadhsheet.xlsx。写下下面给出的代码。 wb 返回对象,使用这个对象,我们从工作簿访问Sheet1

wb = xl.load_workbook('python-spreadsheet.xlsx')
sheet = wb['Sheet1']

步骤 3.要访问第三列(价格列的条目)中第 2 行到第 4 行的条目,我们需要在其中添加一个 for 循环。我们将此条目保存在可变单元格中。

for row in range(2, sheet.max_row + 1):
    cell = sheet.cell(row, 3)

步骤 4.现在我们需要计算修正后的价格。所以我们将保存在单元格变量中的值乘以0.9 。计算完成后,我们需要在新列(第 4 列)中添加所有更正后的价格。要添加新列,我们将获得对给定行中但在第四列中的单元格的引用。创建单元格后,我们需要在此单元格(第四列)中设置更正后的价格值。

corrected_price = float(cell.value.replace('$','')) * 0.9
corrected_price_cell = sheet.cell(row, 4)
corrected_price_cell.value = corrected_price

步骤 5.工作已完成一半。我们已经计算了更新后的价格,并将其添加到第四列中。现在我们需要向当前工作表添加一个图表。要创建图表,我们需要选择一系列值。

在这个项目中,我们将选择第四列中的值(更新的价格),我们将在我们的图表中使用它(我们只需要一堆数字来创建一个图表,所以我们以第四列为例。这根据要求,值可以是任何值)。

我们需要使用引用类来选择一个范围的值。我们将向这个构造函数添加五个参数。第一个参数是我们正在处理的工作表。接下来的两个参数 min_row = 2 和 max_row= sheet.max_row 将选择从第 2 行到第 4 行的单元格。要仅从第四列中选择条目,我们需要传递另外两个参数 min_col=4 和 max_col=4。将结果存储在变量“值”中。

values = Reference(sheet, min_row=2, max_row=sheet.max_row, min_col=4, max_col=4)

第 6 步。现在我们已准备好创建图表。我们将为 BarChart 类创建一个实例“图表”。创建后,在此图表中添加值。之后,将此图表添加到工作表的第 2 行和第 5 列 (e2)。

chart = BarChart()
chart.add_data(values)
sheet.add_chart(chart, 'e2')

第 7 步。现在我们需要保存所有更新的条目和我们在上面的代码中创建的图表。我们将把它保存在一个新文件python-spreadsheet2.xlsx 中,因为我们不想在我们的程序有错误的情况下意外覆盖原始文件。

运行你的程序,你就可以开始了。将为您创建一个新更新的文件python-spreadhsheet2.xlsx ,其中包含更新的价格和图表。下面是相同的屏幕截图。

第 8 步。我们的程序已经完成,但是如果您使用上面的代码,那么它不会自动处理数千个电子表格的过程。该程序仅依赖于 python-spreadsheet.xlsx 的特定文件。

为了使其适用于多个电子表格,我们将重新组织此代码,并将代码移动到函数。此函数将文件名作为输入,并执行该过程。以下是相同的更新代码。

Python

import openpyxl as xl
from openpyxl.chart import BarChart, Reference
  
  
def process_workbook(filename):
    wb = xl.load_workbook(filename)
    sheet = wb['Sheet1']
  
    for row in range(2, sheet.max_row + 1):
        cell = sheet.cell(row, 3)
        corrected_price = float(cell.value.replace('$', '')) * 0.9
        corrected_price_cell = sheet.cell(row, 4)
        corrected_price_cell.value = corrected_price
  
    values = Reference(sheet, min_row=2, max_row=sheet.max_row, min_col=4, max_col=4)
    chart = BarChart()
    chart.add_data(values)
    sheet.add_chart(chart, 'e2')
    wb.save(filename)

附有电子表格的代码的 Github 链接: Python自动化

最后的想法

这只是使用Python自动执行重复性无聊任务的一个示例。但请记住,自动化不仅仅与 Excel 电子表格有关。有很多事情我们可以自动化。您可以在 Github 等各种站点上进行搜索,并且可以使用Python自动化很多事情。