Python:Excel自動化實踐入門篇 甲【留言點贊領圖書門票】

来源:https://www.cnblogs.com/englyf/archive/2023/02/24/17150018.html
-Advertisement-
Play Games

說起辦公自動化就離不開對excel表格的處理,現在哪個辦公族不得每天面對著幾份excel過日本子?本次活動同時在稀土掘金、博客園、微信公眾號舉辦,互不幹擾,歡迎各平臺搜索博主 ENG八戒 參與最新活動 ...


*以下內容為本人的學習筆記,如需要轉載,請聲明原文鏈接 微信公眾號「englyf」https://mp.weixin.qq.com/s?__biz=MzUxMTgxMzExNQ==&mid=2247485524&idx=1&sn=7af7790002e0e606bc2ba63f3a9a7327&chksm=f96cbcc0ce1b35d6079e63cb87964541c716c8b6b5e9969bb06ff4bcae8460e46293f0d3f306&token=365526592&lang=zh_CN#rd


正文開始之前,先給朋友們宣佈個好消息,文末有送圖書門票的福利活動,不要錯過哦!


今天周五,馬上就到下午6點鐘,該下班的時候了,小菜一把抓起手機刷起微信。

突然,她老闆跑來小菜身後拍了拍肩膀喊:“小菜啊,我這有幾份 excel 表格”,把小菜嚇了一跳,立馬放下手裡的手機。

老闆繼續說,“郵件發你了,裡邊都是這次的出貨單,明天來加會兒班弄好它,辛苦一下哈!” 說完也不等回應就轉身走了

“哎” 小菜狠狠地擠出一句話,卻在心裡嘀咕著要怎麼應付領導的吩咐,“怎麼那麼倒霉?又來 Excel 表,偏偏又到周末了,頭疼啊……哼 ”

雖然離她坐得很遠,看著小菜這麼苦惱,想起自己其實是個碼農,手裡也有點私貨,於是我走過去把自己私藏了很多年的公眾號推薦給了她。

搜索框傳播樣式-標準色版.png


說起辦公自動化就離不開對 excel 表格的處理,現在哪個辦公族不得每天面對著幾份 excel 過日子?那麼有沒有想過,讓機器幫我們自動處理這些雜活,而我們應該留給自己更多的時間去做一些更有意義的事情?

今天就帶大家一起來看看怎麼用 python 自動化處理 excel 表格!而處理 excel 表格的 python 功能庫有很多,常用的是 openpyxl。openpyxl 庫可以對 excel 表格做什麼呢?比如讀寫、算術、繪製圖表等等。

安裝 openpyxl

openpyxl 庫不是 python 的自帶模塊,屬於第三方模塊,所以需要額外安裝才能使用。

在安裝 openpyxl 庫之前,建議先配置好 python 工程的虛擬環境 venv。這裡不展開介紹如何配置虛擬環境,有需要可以點擊 《Python:界面開發,wx入門篇 上》前往查看。

本文以下內容基於 windows 10 和 Python3.

終端輸入

pip install openpyxl

終端輸出

由於下麵的介紹會用到圖片操作的功能,所以還需要安裝 Pillow 庫。

終端輸入

pip install pillow

終端輸出

看看最後的安裝成果,終端輸入

pip list

終端輸出

創建 excel 表格文件

最簡單的自動化操作就是創建一個 excel 空白表格文件,暫定文件名為 test.xlsx,然後隨意寫點什麼進去

import openpyxl

workbook = openpyxl.Workbook()
sheet = workbook.active

sheet['A1'] = 'hello pytho excel !'
workbook.save(filename="./test.xlsx")

上面的代碼先是導入了庫 openpyxl,然後實例化工作簿類 Workbook,通過工作簿的屬性 active 獲取到活躍的工作表 sheet。

基於字典的操作方式,對工作表 sheet 的 A 列 1 行寫入字元串 ‘hello pytho excel !’。如果你使用過 excel 表格,會記得 excel 表格的行是從 1 開始的,列是從 A 開始的。

最後調用工作簿的 save 方法寫入硬碟,自動生成文件 test.xlsx。

好了,代碼寫好怎麼跑起來呢?

把上面寫好的代碼保存到文件(.py)中,我這裡隨意定為 main.py,然後在令行終端里輸入並回車就會執行起來

python main.py

執行完畢後,打開程式創建好的 excel 文件 test.xlsx 看看

看起來效果很好。

寫入

上面已經知道了怎麼創建新的 excel 表格文件,那麼怎麼在已有的 excel 表格文件的指定單元格 cell 寫入內容呢?

上面介紹的方法 Workbook() 會覆蓋原有文件,為了不覆蓋現有文件,可以改用方法 load_workbook() 同時傳入文件名以載入現有的工作簿。

指定單元格有兩種方式,通過表格 sheet 的方法 cell() 或者表格 sheet 直接引用單元格名稱。

比如

a2 = sheet.cell(row = 2, column = 1)
a3 = sheet['A3']

找到了單元格 cell,又怎麼寫入內容呢?直接賦值還是修改屬性值?答案是都可以,直接賦值就是對單元格 cell 對象賦值(要求引用單元格名稱),修改屬性是對單元格 cell 對象的 value 屬性賦值

a2.value = "修改屬性1"
a3.value = "修改屬性2"
sheet['A4'] = "直接賦值"

來一段完整的代碼

import openpyxl

workbook = openpyxl.load_workbook("./test.xlsx")
sheet = workbook.active

a2 = sheet.cell(row = 2, column = 1)
a3 = sheet['A3']

a2.value = "修改屬性1"
a3.value = "修改屬性2"
sheet['A4'] = "直接賦值"

workbook.save(filename="./test.xlsx")

看看運行效果

如果我們需要往表格裡追加大量的數據呢?總不能像上面那樣往單元格一個一個地寫入吧?

可以使用表格 sheet 的 append() 方法一次性寫入一行數據

import openpyxl 
  
workbook = openpyxl.load_workbook("test.xlsx")
sheet = workbook.active

data = (
    ('a', 'b', 'c'),
    ('d', 'e', 'f')
)  
for row in data:
    sheet.append(row)

workbook.save('test.xlsx')

看看實際效果

讀取

上面介紹了怎麼對 excel 表格寫入內容,那麼怎麼讀出來呢?

讀取單元格內容,可以直接讀取單元格 cell 的屬性 value 值

print(f"{sheet['A4'].value}")
print(f"{sheet.cell(row = 4,
                    column = 1).value}")

那麼如果需要一次性讀取一個區域的數據呢?

方法有兩種,一種通過遍歷指定區域內每個單元格的方式,另一種是通過單元格名稱批量讀取。

先介紹第一種:需要遍歷每個單元格的內容,那麼就需要知道行列的最大數量用於控制單元格迴圈遍歷的次數,分別對應表格 sheet 的屬性 max_row 和屬性 max_column。

下麵來試一下把第一列和第二行的所有單元格內容讀取並列印出來

import openpyxl

workbook = openpyxl.load_workbook("test.xlsx") 
sheet = workbook.active 
  
row = sheet.max_row
column = sheet.max_column
print(f"Total Row num: {row}")
print(f"Total Column num: {column}")

print("\nValue of first column:")
for i in range(1, row + 1):
    print(sheet.cell(row = i,
                        column = 1).value)

print("\nValue of second row")
for i in range(1, column + 1):
    print(sheet.cell(row = 2,
                        column = i).value,
            end = " ")

終端輸出

接著介紹第二種:通過表格的單元格名稱批量讀取時,單元格名稱分別對應矩形區域的左上角和右下角的單元格名稱。這種方式類似對列表的切片操作。

下麵來試一下批量讀取單元格 A4 到單元格 C6 的矩形區域的內容,並列印出來

import openpyxl

workbook = openpyxl.load_workbook("test.xlsx") 
sheet = workbook.active 

cell_obj = sheet['A5:C6']
for cell1, cell2, cell3 in cell_obj:
    print(cell1.value,
            cell2.value,
            cell3.value)

終端輸出

圖書 《Python+Excel報表自動化實戰》

————————————

京東價:¥54.50

搶購鏈接:https://u.jd.com/Ks9SWZt


由於篇幅受限,本系列教程還未完結,下一篇《Python:Excel自動化實踐入門篇 乙》將在本公眾號稍後推送,如果你對此教程有興趣或者想和我一起交流更多精彩內容,歡迎關註我的微信公眾號 「ENG八戒」,等著你哦!

搜索框傳播樣式-標準色版.png


福利來了 !!!

這次搞了個雙重福利,兩份福利都可領取。

第一重,送圖書,這本書是機械工業出版社出版的《Python+Excel報表自動化實戰》。

請在評論區留言(主題圍繞上述圖書相關,不能與出海展會相關),並集贊,全文瀏覽量超過 1000 即統計每個評論集贊數量,集贊數量最多的一位獲得贈送圖書《Python+Excel報表自動化實戰》一本。如果出現多位評論滿足中獎條件則延後重新統計,等待瀏覽量增加超過 500 重新統計,依此類推,直到僅剩一位滿足中獎條件。

第二重,送深圳福田出海展會門票若幹,門票由 Cloud Ace 傾情贊助。

Cloud Ace 是谷歌雲全球戰略合作伙伴,擁有 300 多名工程師,也是谷歌最高級別合作伙伴,多次獲得 Google Cloud 合作伙伴獎。作為谷歌托管服務商,提供谷歌雲、谷歌地圖、谷歌辦公套件、谷歌雲認證培訓服務。

請在評論區留言(主題圍繞出海展會相關,不能與上述圖書相關),並集贊,全文瀏覽量超過 800 即統計每個評論集贊數量,集贊數量最多的一位獲得贈送門票一張。如果出現多位評論滿足中獎條件則延後重新統計,等待瀏覽量增加超過 400 重新統計,依此類推,直到僅剩一位滿足中獎條件。


**【溫馨提示:本活動同時在稀土掘金、博客園、微信公眾號舉辦,互不幹擾,歡迎各平臺搜索博主 ENG八戒 參與最新活動】**


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Object(對象) for in 遍歷出對象可枚舉的"屬性",包含繼承的可枚舉屬性 var person = { name: '小明', birth: 1990, height: 1.70 }; for(var x in person){ console.log(x); console.log(p ...
  • 前言 JavaScript 原型是該語言中一個非常重要的概念。理解原型是理解 JavaScript 的關鍵。在本篇技術博客中,我們將深入探討 JavaScript 的原型概念,並介紹常用的操作對象原型的方法。(歡迎點評,歡迎指正!) 什麼是原型? 在 JavaScript 中,每個對象都有一個原型( ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 npm 是 node 捆綁的依賴管理器,常用程度可想而知。那麼你每天都在 npm/yarn run 的命令到底是如何運行項目的呢? 前端項目中運行 npm run xxx 的時候發生了什麼?大家都知道目前的 node 是捆綁 npm 的。 ...
  • 一、常規 在 JavaScript 中,apply、call、bind 是三個與函數調用相關的方法,它們都允許你在調用函數時手動設置函數的上下文(即 this 指向)。 1、apply 方法:apply 方法允許你調用一個函數,並且手動設置函數的上下文(即 this 指向)以及傳遞一個參數數組。其語 ...
  • 本文是系列第三篇。系列文章: 現代圖片性能優化及體驗優化指南 - 圖片類型及 Picture 標簽的使用 現代圖片性能優化及體驗優化指南 - 響應式圖片方案 圖片資源,在我們的業務中可謂是占據了非常大頭的一環,尤其是其對帶寬的消耗是十分巨大的。 對圖片的性能優化及體驗優化在今天就顯得尤為重要。本文, ...
  • 一、直接在 el-table-column 外嵌套 el-form 符合表單的校驗習慣,唯一需要註意的地方 el-form 需要綁定 :model="scope.row" // html <div id="app"> <el-table :data="list" border> <el-table- ...
  • 架構的核心是管理複雜度,架構師的核心能力是抽象能力,什麼是抽象能力?抽象能力就是一種化繁為簡的能力。何為化繁為簡?就是把一種複雜的事情變得簡單的能力,比如通過打比喻讓別人很容易聽明白你說的意思就是一種抽象能力。如何鍛煉抽象能力?我覺得有三種方法,第一種是用歸納法找共性,從多個問題中找到共同的問題提煉... ...
  • 1. Scala 1.1. 混合了面向對象和函數式編程的語言 1.2. 直接使用任何一個Java類庫 1.3. 聲明非遞歸的方法時,不需要顯式地返回類型 1.3.1. 會自動地替你推斷生成一個 1.4. 字元串插值 1.4.1. 在字元串的字面量中內嵌變數和表達式 1.5. 以使用val關鍵字替換v ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...