如何在 Python 中自動化處理 Excel 表格?

roc_guo發表於2021-11-26

現在想象一下從事資料輸入工作的員工的生活。他們的工作是從 Excel 表格中獲取資料並將其插入其他位置。他們瀏覽不同的網站和雜誌,從那裡收集資料,然後將其插入資料庫。他們還需要對條目進行計算。

使用Python自動化無需手動執行這些型別的任務,只需花一個小時寫一段程式碼並自動化這些型別的事情。本文中我們將建立一個小專案來學習 Python 中的自動化。

任務介紹

手動處理或更新數以千計的電子表格將花費太多時間。這可能需要數小時、數天甚至數月的時間。我們將編寫一個 Python 程式來自動執行此任務。我們將處理下圖中給出的資料。
如何在 Python 中自動化處理 Excel 表格?如何在 Python 中自動化處理 Excel 表格?
在這個電子表格中,我們有各種交易的記錄,但假設由於錯誤(人為錯誤或系統錯誤),第三列中列出的產品的價格是錯誤的。假設我們需要將價格降低 0.9。可以使用第四列中的數學公式手動完成此任務,但如果有數千條記錄,則會花費太多時間(可能需要 1 周或兩週)。

我們將編寫一個 python 程式來自動化這個過程。此外,我們將為它新增一個圖表。我們的 Python 程式將在幾秒鐘內為我們完成這項任務。

寫一個簡單的程式碼

為了處理這個 Excel 工作表,我們將使用 openpyxl庫 。在 8中執行下面 安裝openpyxl:

# yum -y install python3-openpyxl

現在我們可以匯入這個包來處理我們的電子表格。在此之前,將電子表格新增到專案資料夾中。現在在你的資料夾中建立一個檔案 prod.py 並寫下下面給出的程式碼。

[root@localhost data]# vim prod.py
#!/usr/bin/python3
import time
import openpyxl as xl
from openpyxl.chart import BarChart, Reference
def process_workbook(filename):
    tm = time.strftime('%Y%m%d%H%M')
    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) * 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,'G2')
    wb.save(filename + " " + tm + '.xlsx')
process_workbook('/data/prod.xlsx')

如何在 Python 中自動化處理 Excel 表格?如何在 Python 中自動化處理 Excel 表格?

解釋程式碼的意思

我們將逐步解釋上面編寫的程式碼以瞭解完整的過程。

步驟 1. 要處理我們的電子表格匯入 openpyxl 包(我們使用 xl 別名使我們的程式碼更簡潔更短)。此外,要將圖表新增到我們的電子表格,我們需要匯入兩個類 BarChart 和 Reference。匯入time庫,目的是另存表格檔案,防止修改原始檔。

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

步驟2. 建立一個函式,方便後續呼叫。

def process_workbook(filename):

步驟3. 現在我們需要載入 Excel 工作簿。寫下下面給出的程式碼。tm儲存當前時間,為後續使用。wb 返回物件,使用這個物件,我們訪問 Sheet1工作表。

tm = time.strftime('%Y%m%d%H%M')
    wb = xl.load_workbook(filename)
    sheet = wb['Sheet1']

步驟4. 要訪問第三列(價格列的條目)中第 2 行到最後一行有資料的條目,我們需要新增一個 for 迴圈。我們將此條目儲存在可變單元格中。

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

步驟5. 現在我們需要計算修正後的價格。所以我們將儲存在單元格變數中的值乘以 0.9。計算完成後,我們需要在第 4 列中新增所有更正後的價格。新增新列,引用第四列的單元格。建立單元格後,我們需要在此單元格中設定更正後的價格值。

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

步驟6. 工作已經完成了一半。我們已經計算了更新後的價格,並將其新增到第四列中。現在我們需要向當前工作表新增一個圖表。要建立圖表,我們需要選擇一個值的範圍。

在這個專案中,我們將選擇第四列中的值(更新後的價格),我們將在我們的圖表中使用它(我們只需要一堆數字來建立一個圖表。

我們需要使用 Reference()類來選擇一個範圍的值。我們將向這個建構函式新增五個引數。第一個引數是我們正在處理的工作表。接下來的兩個引數  min_row = 2 和  max_row= sheet.max_row 將選擇從第 2 行到最後一個有資料的單元格。要僅從第四列中選擇條目,我們需要傳遞另外兩個引數  min_col=4 和  max_col=4。將結果儲存在變數“值”中。

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

步驟7. 現在我們已準備好建立圖表。我們將為  BarChart() 類建立一個例項,變數名為 chart。建立後,在此圖表中新增值。之後,將此圖表新增到工作表的G2單元格中。

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

步驟8. 現在我們需要儲存所有更新的條目和我們在上面的程式碼中建立的圖表。我們將把它儲存在一個用 檔名+時間命名的檔案中,因為我們不想在我們的程式有錯誤的情況下意外覆蓋原始檔。

wb.save(filename + " " + tm + '.xlsx')

步驟9. 執行 process_workbook()函式,括號裡面寫如prod.xlsx檔案的位置:

process_workbook('/data/prod.xlsx')
執行prod.py

執行下面 為 新增執行許可權,並執行指令碼:

[root@localhost data]# chmod +x /data/prod.py 
[root@localhost data]# /data/prod.py

如何在 Python 中自動化處理 Excel 表格?如何在 Python 中自動化處理 Excel 表格?

總結

這只是使用 Python 自動執行重複性無聊任務的一個示例。但請記住,自動化不僅僅與 Excel 電子表格有關。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69901823/viewspace-2844233/,如需轉載,請註明出處,否則將追究法律責任。

相關文章