Python輕松玩轉excel操作指導

目錄

一、一圖概覽

二、表格操作

三、內容操作

四、單元格操作

五、Pandas實現表格操作

六、常見場景示例


一、一圖概覽

??????????本文主要對openpyxl庫的常用表格操作進行了梳理,熟練的運用后可極大地提升工作效率。

二、表格操作

#創建一個表格sheet.xlsx
#使用openpyxl創建工作簿
wb=workbook.workbook.Workbook()  #創建一個工作簿對象
wb.save("test.xlsx")     #在py文件同級目錄下創建一個空表
wb.save(r"C:\Users\ZYP_PC\Desktop\test_python\file\test2.xlsx")  #在指定目錄下創建表格sheet2.xlsx#在表格中創建子表
wb.create_sheet(title="sheet_a")  #創建子表sheet_a
wb.save("test.xlsx")             #將子表保存到工作簿test.xlsx中#從工作簿test.xlsx中刪除子表sheet_b
wb=load_workbook("test.xlsx")
delete_sheet=wb["sheet_b"]   #子表不存在會報文件不存在錯誤
wb.remove(delete_sheet)
wb.save("test.xlsx")#修改test.xlsx中子表sheet_b的名稱為sheet_a
wb=load_workbook("test.xlsx")   #加載工作簿test.xlsx
sheet_names=wb.sheetnames   #獲取所有子表名稱
old="sheet_b"
new="sheet_a"
ws=wb[old]     #獲取old的子表
ws.title=new   #修改title屬性值
wb.save("test.xlsx")

三、內容操作

#單元格內容遍歷
wb=load_workbook("20240417.xlsx")
ws=wb.active
for row in ws.iter_rows(values_only=True): ?#按行優先遍歷,沒有內容的顯示為Nonefor r in row:print(r)
for col in ws.iter_cols(values_only=True): ?#按列優先遍歷,沒有內容的顯示為Nonefor c in col:print(c)#讀取指定位置A1的值
A1=ws["A1"].value#讀取指定行如第3行的內容
row=[]
for col in ws.iter_cols(values_only=True):row.append(col[2]) ? #索引從0開始,因為第3行為索引值為2
print("row",row)#讀取指定列如第2列的內容
col=[]
for row in ws.iter_rows(values_only=True):col.append(row[1]) ? #索引從0開始,因為第二列為1
print("col",col)

內容操作之內容寫入

#在工作簿test.xlsx的工作表的sheet_b中的單元格C3寫入你好
#方法1(以字母加數字的方式表示坐標)
wb=load_workbook("test.xlsx")
ws=wb["sheet_b"]
ws["A3"]="你好"
wb.save("test.xlsx") ?#保存修改,修改內容時表格不能打開,否則會提示無權限
#方法2(以行列數字序號表示)
wb=load_workbook("test.xlsx")
ws=wb["sheet_b"]
r=3
c=3
ws.cell(row=r,column=c,value="你好1")
wb.save("test.xlsx") ?#保存修改,修改內容時表格不能打開,否則會提示無權限##逐行寫入
wb=workbook.Workbook() ? ? ? #創建工作簿
ws=wb.active
ws.title="運行時間與內存" ?#設置默認表格名稱sheet為指定的名稱
ws=wb.create_sheet(title="運行時間與內存") #也可以另外創建子表
excel=r"C:\Users\ZYP_PC\Desktop\test_python\test2.xlsx"
start_row=3 #從指定行開始寫入
ws.cell(row=start_row,column=1,value="工程名")
ws.cell(row=start_row,column=2,value="布局時間")
ws.cell(row=start_row,column=3,value="布線時間")
ws.cell(row=start_row,column=4,value="report_timing")
ws.cell(row=start_row,column=5,value="PR內存")
ws.append(("工程名1","布局時間","布線時間","report_timing時間","PR內存")) #各列的名稱
data=[["prj1","1","22","23","34"],["prj2","11","22","23","34"],["prj3","111","22","23","34"]]
for row in data:print("row ",row)ws.append(row)
wb.save(excel)

四、單元格操作

from openpyxl import workbook
from openpyxl import load_workbook
from openpyxl.styles import Font,Alignment,Color,PatternFill
#打開指定表格進行單元格操作
excel=r"C:\Users\ZYP_PC\Desktop\test_python\test2.xlsx"
wb=load_workbook(excel)
ws=wb.active
ws=wb["測試子表"]  #進行操作的子表#插入2行
ws.insert_rows(4,2)   #從第4行的位置插入2行#插入3列
ws.insert_cols(3,1)  #從第3列開始插入1列#刪除指定行
ws.delete_rows(10)  #刪除第10行#刪除指定列
ws.delete_cols(3)  #刪除第3列#合并單元格
ws.merge_cells("A4:B4")  #將A4和B4進行合并單元格操作#取消合并單元格
ws.unmerge_cells("A4:B4") #取消將A4和B4進行合并單元格操作#設置單元格格式
font=Font(name="Arial",size=12,bold=True,italic=False,color="FF0000",) #對單元格內容進行字體格式,大小,加粗,顏色當進行設置
ws["B3"].font=font
alignment=Alignment(horizontal="center",vertical="center")  #對單元格內容進行對齊設置,例如此處為居中對齊
ws["A5"].alignment=alignment
fill=PatternFill(start_color="FFFF00",end_color="FFFF00",fill_type="solid")  #對單元格設置背景顏色,此處為黃色
ws["A5"].fill=fill
wb.save(excel)

對于單元格格式的設置中,顏色與代碼的映射關系可在下面網站進行查詢

https://www.bchrt.com/tools/rgbcolor/

內容的對齊方式可選值有horizontal(水平對齊方式,包括?"general",?"left",?"center",?"right",?"fill",?"justify",?"centerContinuous","distributed")

vertical(垂直對齊方式,包括"top",?"center",?"bottom",?"justify",?"distributed")

textRotation(文字旋轉),wrapText?(自動換行),shrinkToFit(自動縮放到最佳位置),indent(縮進),relativelndent(相對縮進),justifyLastLine(最后一行對齊),reading?Order(讀順序對齊)

五、Pandas實現表格操作

下面針對pandas庫的一些常用表格查詢操作進行了梳理

##使用pandas庫處理表格,pandas對于數據的處理功能更強大,更適合對數據進行各種計算
import pandas as pd
path_excel=r"C:\Users\ZYP_PC\Desktop\test_python\pandas.xlsx"  #工作簿路徑
#方法1,以列表形式寫入
# data = [('張三', 20, '男'),
#         ('李四', 25, '女'),
#         ('王五', 30, '男')]
#df = pd.DataFrame(data, columns=['姓名', '年齡', '性別'])
#方法2,以字典形式寫入
data = {'姓名': ['張三', '李四', '王五'],'年齡': [20, 25, 30],'性別': ['男', '女', '男']}
df=pd.DataFrame(data)    #pandas不支持直接創建工作簿,data數據可以是列表,字典
df.to_excel(path_excel,index=False)   #創建表格pandas.xlsx,并將data數據寫入#數據查詢
path_excel=r"C:\Users\ZYP_PC\Desktop\test_python\pandas1.xlsx"
data=pd.read_excel(path_excel)  #讀取表格
size=data.size    #獲取表格的數據個數
shape=data.shape   #獲取數據的行列數,不包含標題欄
#查看指定行和指定列的內容
print(data.loc[1:2,"年齡"])   #查找1到2行中列名為年齡的內容
# 查看前4行內容
print(data.head(4))
#查看后5行內容
print(data.tail(5))
#根據列名選擇列
single_col=data["年齡"]   #選中單列
multi_col=data[["年齡","性別"]]   #選中多列
#選擇行
single_row=data.iloc[0:1]   #除去標題行后的內容進行篩選
print("row",single_row)# print(data.size,data.shape)
for index,row in data.iterrows():  #按行逐條遍歷print("row:",row)

六、常見場景示例

示例1 遍歷整個工作簿查找包含指定內動的單元格

from openpyxl import workbook
from openpyxl import load_workbook
excel=r"C:\Users\ZYP_PC\Desktop\test_python\測試表格.xlsx"
wb=load_workbook(excel)
ws=wb.active
search_value="搜索的內容"
site=[]     #保存查找結果的單元格地址
sheet_list=[]   #保存查找結果所在的子表名稱
for sheet_name in wb.sheetnames:sheet=wb[sheet_name]for row in sheet.iter_rows():for cell in row:if cell.value==search_value:site.append(cell.coordinate)cell.value=""sheet_list.append(sheet_name)

#示例2 在指定子表的指定范圍內進行指定內容的查找,范圍可指定行范圍,列范圍或區域范圍

from openpyxl import workbook
from openpyxl import load_workbook
excel=r"C:\Users\ZYP_PC\Desktop\test_python\測試表格.xlsx"
wb=load_workbook(excel)
ws=wb.active
ws=wb["VCC"]     #查找的子表名稱為"VCC"
search_value="INPUT"
cells=ws["A3:C6"]  #指定一個區域
# cells=ws["B:F"]  #指定B到F列
# cells=ws[2:6]   #指定第2到第6行
site=[]
for row in cells:for cell in row:if search_value in str(cell.value):site.append(cell.coordinate)
print(site)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/16169.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/16169.shtml
英文地址,請注明出處:http://en.pswp.cn/web/16169.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

LINQ(四) ——使用LINQ進行對象類型初始化

總目錄 C# 語法總目錄 上一篇:LINQ(三) ——查詢表達式/into關鍵字 LINQ 四 ——使用LINQ進行對象類型初始化 6. 使用LINQ進行對象初始化6.1 對象類型 6. 使用LINQ進行對象初始化 6.1 對象類型 需要聲明定義一個對象類,然后使用select 配合new關鍵字進…

C++編程揭秘:虛表機制與ABI兼容性的實例剖析

前言: 假設你的應用程序引用的一個庫某天更新了,雖然 API 和調用方式基本沒變,但你需要重新編譯你的應用程序才能使用這個庫,那么一般說這個庫是源碼兼容(Source compatible);反之,如…

C語言指針相關知識(第五篇章)(非常詳細版)

提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 文章目錄 前言一、sizeof和strlen對比二、數組之間的比較(依據strlen和sizeof來呈現)(一)、一維整型數組(二&#…

Value-Based Reinforcement Learning(2)

Temporal Difference (TD) Learning 上節已經提到了如果我們有DQN,那么agent就知道每一步動作如何做了,那么DQN如何訓練那?這里面使用TD算法。 簡略分析: 是的估計 是的估計 所以: Deep Re…

對vue3/core源碼ref.ts文件API的認識過程

對toRef()API的認識的過程: 最開始認識toRef()是從vue3源碼中的ref.ts看見的,右側GPT已經舉了例子 然后根據例子,在控制臺輸出ref對象是什么樣子的: 這就是ref對象了,我們根據對象中有沒有__v_isRef來判斷是不是一個ref對象,當對象存在且__v_isRef true的時候他就判定為是一個…

Linux-組管理和權限管理

1 Liunx組的基本介紹: 在Linux中的每個用戶必須屬于一個組,不能獨立于組外。在Linux中每個文件都有所有者、所在組、其他組的概念 所有者所在組其它組改變用戶所在的組 2 文件/目錄的所有者 一般文件的創建者,誰創建了該文件,就…

Docker in Docker(DinD)原理與實踐

隨著云計算和容器化技術的快速發展,Docker作為開源的應用容器引擎,已經成為企業部署和管理應用程序的首選工具。然而,在某些場景下,我們可能需要在Docker容器內部再運行一個Docker環境,即Docker in Docker(…

002 CentOS 7.9 redis-7.2.5安裝及配置

https://github.com/redis/redis https://redis.io/insight/#insight-form 安裝及配置 在CentOS 7.9上安裝和配置Redis 7.2.5版本,可以遵循以下詳細步驟: 一、準備工作 確保安裝包已準備好: 確認您已經下載了redis-7.2.5.tar.gz安裝包&a…

從程序被SQL注入來MyBatis 再談 #{} 與 ${} 的區別

緣由 最近在的一個項目上面,發現有人在給我搞 SQL 注入,我真的想說我那么點資源測試用的阿里云服務器,個人估計哈,估計能抗住他的請求。狗頭.png 系統上面的截圖 數據庫截圖 說句實在的,看到這個之后我立馬就是在…

游戲找不到d3dcompiler_43.dll怎么辦,教你5種可靠的修復方法

在電腦使用過程中,我們經常會遇到一些錯誤提示,其中之一就是“找不到d3dcompiler43.dll”。這個問題通常出現在游戲或者圖形處理軟件中,它會導致程序無法正常運行。為了解決這個問題,我經過多次嘗試和總結,找到了以下五…

idea2023的git從dev分支合并到主分支master

1.本地項目切換到主分支master 右鍵項目-git-Branches 依次點擊項目-Remote-Origin-master-CheckOut 現在你的idea中的這個項目就是遠程master分支的代碼了。 2.合并dev分支到master 右擊項目-git-Merge 選擇origin-dev 點擊Merge按鈕,此時只是合并到本地的maste…

每日一題---有效的括號問題

文章目錄 前言1.題目以及分析2.參考代碼 前言 前面我們學習了棧的相關操作,現在我們做一道題,進行鞏固 Leetcode—有效的括號 1.題目以及分析 這道題就可以使用棧進行操作,因為把最左邊的括號當成棧底,最右邊的是棧頂&#xff0c…

【每日刷題】Day49

【每日刷題】Day49 🥕個人主頁:開敲🍉 🔥所屬專欄:每日刷題🍍 🌼文章目錄🌼 1. 110. 平衡二叉樹 - 力扣(LeetCode) 2. 501. 二叉搜索樹中的眾數 - 力扣&…

基于YOLOv8的車牌檢測與識別(CCPD2020數據集)

前言 本篇博客主要記錄在autodl服務器中基于yolov8實現車牌檢測與識別,以下記錄實現全過程~ yolov8源碼:GitHub - ultralytics/ultralytics: NEW - YOLOv8 🚀 in PyTorch > ONNX > OpenVINO > CoreML > TFLite 一、環境配置 …

python學習:基礎語句

目錄 條件語句 循環語句 for 循環 while 循環 break continue 條件語句 Python提供了 if、elif、else 來進行邏輯判斷。格式如下: Pythonif 判斷條件1: 執行語句1... elif 判斷條件2: 執行語句2... elif 判斷條件3: 執行語句3... else: 執行語句4…

C# 集合(六) —— 自定義集合Collection類

總目錄 C# 語法總目錄 集合六 Collection 1. 自定義集合Collection其他 1. 自定義集合Collection Collection可以對添加刪除元素或者添加刪除屬性進行事件響應。 class Person {public string name;public int age;public Person(){this.name "";this.age 0;}pub…

ubuntu 硬盤轉移

我插了兩個 文件系統: ubuntu 硬盤轉移: sudo dd if/dev/sdX1 of/dev/sdY1 bs128K convnoerror,sync statusprogressdd 的意思是DiskToDisk,if 是輸入文件系統,of是輸出文件系統。 bs是每次傳遞的數據大小。 注意:接…

mysql-主從同步原理

AB復制(重點) 一、什么是主從復制? 1、主從同步也叫AB復制,是用來建立一個和主數據庫完全一樣的數據庫環境,稱為從數據庫;主數據庫一般是準實時的業務數據庫。 2、主從復制的作用 1.做數據的熱備,作為后備數據庫,…

如何用MySQL的SQL語句來讀寫硬盤目錄文件

1.先確保創建表,例如起名Temp CREATE TABLE temp ( id int(11) NOT NULL AUTO_INCREMENT, image mediumblob, PRIMARY KEY (id) ) ENGINEInnoDB AUTO_INCREMENT7 DEFAULT CHARSETutf8; 注意這里的image字段用mediumblog,就可以避免出現data too …

27【Aseprite 作圖】盆栽——拆解

1 橘子畫法拆解 (1)淺色3 1 0;深色0 2 3 就可以構成一個橘子 (2)淺色 2 1;深色1 0 (小個橘子) (3)淺色 2 1 0;深色1 2 3 2 樹根部分 (1)底部畫一條橫線 (2)上一行 左空2 右空1 【代表底部重心先在右】 (3)再上一行,左空1,右空1 (4)再上一行,左突出1,…