您好,登錄后才能下訂單哦!
安裝模塊
OpenPyXL 模塊是一個第三方模塊,所以需要使用 pip 工具安裝,
pip install openpyxl
文件結構
首先,我們需要了解一下 Excel 文件的基本結構,一個 Excel 文件被稱為一個工作薄,工作薄中可以包含多個工作表(sheet),每個 sheet 由列和行組成,列與行的交叉點被稱為單元格,實際數據就是存放在單元格中的。單元格中的數據可以是數字、文本、時間或者公式等等。
基本操作
創建工作薄
首先,需要從 OpenPyXL 引入 Workbook 類,
from openpyxl import Workbook
使用該類可以創建一個 Excel 文件,
workBookObject = Workbook()
workBookObject 就是 Workbook 類的實例的名稱,也就是一個 Excel 工作薄。
通過 sheetnames 屬性獲取當前工作薄中的工作表,
workBookobject.sheetnames
還可以通過 active 屬性獲取當前正在操作的工作表,
workBookobject.active
保存工作薄
創建 Workbook 類的實例之后,其實并沒有創建一個真正的 Excel 文件,從一點就可以看出,我們在創建 Workbook 對象時,并沒有給它一個實際的文件名,這時候可以通過 save() 方法將工作薄保存成一個實際的 Excel 文件,
workBookobject.save(filename="example.xlsx")
該方法會將文件保存到當前目錄下。
如果需要將文件保存至指定位置,filename 參數也可以是一個路徑,如:
workBookobject.save(filename=r"D:\桌面\example.xlsx")
使用 save() 方法保存文件時,要注意如果目錄下已經存同名文件,該方法不會做出提示,而是會直接覆蓋保存。
創建工作表
創建工作薄之后,會默認自動創建一個工作表,我們也可以自己創建一個新的工作表,
workBookobject.create_sheet(sheetName)
sheetName 表示新工作表的名稱。如果需要將工作表重新命名,可以修改工作表的 title 屬性,
workBookobject["oldSheetName"].title = "newSheetName"
oldSheetName 即該工作表之前的名字,newSheetName 表示重命名之后的名字。而且可以看出,工作薄可以通過類似索引的方式訪問它的工作表,只不過這個“索引”是工作表的名字。
復制工作表
如果想創建某個工作表的副本,可以使用下面的方法,
workBookobject.copy_worksheet(sheetName)
復制
sheetName 表示該工作薄中一個已經存在的工作表的名字。
刪除工作表
如果某個工作表不再需要,則可以通過 remove() 方法將其刪除,
workBookobject.remove(workBookobject["sheetName"])
賦值與取值
賦值
上面的操作都是針對工作薄及工作表的,但是我們知道在 Excel 文件中,真正的數據都是儲存在單元格中的。
在 Excel 文件中,列使用字母表示,行使用數字表示,如果將其視為一個坐標系,則列的值就是 X 軸坐標值,行的值就是 Y 軸坐標值,單元格是列與行的交叉點,所以單元格表示成 A1、F5 等。
給單元格賦值同樣可以采用類似索引的方式,首先取得工作表,然后再給其中某個單元格賦值即可,
workBookobject["sheetName"]["cellName"] = value
其中,cellName 就是單元格的名稱,如 A1、F5 等。
還可以使用 cell() 方法對單元格進行賦值,
workBookobject["sheetName"].cell(column=colNo, row=rowNo, value=value)
該方法需要三個參數,即列、行和值。
其中,列比較特殊,雖然在 Excel 文件中,列是由字母表示的,但是在 cell() 方法中,列和行一樣都是使用整數表示,從 1 開始。例如,E3 這個單元格的列是 E,但是在 cell() 方法中需要將其賦值為整數 5,如:
workBookobject["sheetName"].cell(column=5, row=3, value="python")
取值
取值很簡單,直接使用單元格的編號即可取出其中的數據,
workBookobject["sheetName"]["cellName"].value
cellName 表示單元格的名字,即它的列和行的坐標點,如 A9。單元格除了 value 這個屬性,還有 column(列)和 row(行)兩個屬性,用法同 value 一樣。
上面是取一個單元格的值,如果想要取一行中若干個單元格的值,只要在起始的單元格和結束的單元格之間使用冒號(:)分隔即可,
workBookobject["sheetName"]["startCellName":"endCellName"]
或者,
workBookobject["sheetName"]["startCellName:endCellName"]
得到的結果是一個元組的元組,即二維元組,里層元組的元素是 Cell 類型,如下所示:
(
(<Cell 'Sheet'.A1>,),
(<Cell 'Sheet'.A2>,),
(<Cell 'Sheet'.A3>,),
(<Cell 'Sheet'.A4>,),
(<Cell 'Sheet'.A5>,),
(<Cell 'Sheet'.A6>,),
(<Cell 'Sheet'.A7>,),
(<Cell 'Sheet'.A8>,),
(<Cell 'Sheet'.A9>,)
)
所以,訪問其中 A3 的值就是,
workBookobject["sheetName"]["A1:A9"][3][0].value
同理,如果是多列多行的單元格,同樣是一個二維元組,
(
(<Cell 'Sheet'.A1>, <Cell 'Sheet'.B1>, <Cell 'Sheet'.C1>),
(<Cell 'Sheet'.A2>, <Cell 'Sheet'.B2>, <Cell 'Sheet'.C2>),
(<Cell 'Sheet'.A3>, <Cell 'Sheet'.B3>, <Cell 'Sheet'.C3>),
(<Cell 'Sheet'.A4>, <Cell 'Sheet'.B4>, <Cell 'Sheet'.C4>),
(<Cell 'Sheet'.A5>, <Cell 'Sheet'.B5>, <Cell 'Sheet'.C5>),
(<Cell 'Sheet'.A6>, <Cell 'Sheet'.B6>, <Cell 'Sheet'.C6>),
(<Cell 'Sheet'.A7>, <Cell 'Sheet'.B7>, <Cell 'Sheet'.C7>),
(<Cell 'Sheet'.A8>, <Cell 'Sheet'.B8>, <Cell 'Sheet'.C8>),
(<Cell 'Sheet'.A9>, <Cell 'Sheet'.B9>, <Cell 'Sheet'.C9>)
)
只不過這里是以列為基準,拋開外層元組不看,里層每個元組的元素都是同一列的單元格。
使用公式
在單元格使用公式與在 Office Excel 中操作文件一樣,如設置一個 SUM 公式,
workBookobject["sheetName"]["A10"].value = "=SUM(A1:A9)"
則單元格 A10 的值就是 A1 到 A9 的和,前提是其中的數據是可以計算的。
但是,openpyxl 不會檢查寫的 Excel 公式名稱及語法是否正確,如果錯誤不會給出任何提示,但是可以使用 openpyxl.utils 中的 FORMULAE 檢查公式名稱是否正確,例如,
from openpyxl.utils import FORMULAE
print("SUM" in FORMULAE)
如果公式名稱返回 True,否則返回 False。
加載已有文件
如果需要打開一個已經存在的 Excel 文件,可以先加載該文件,
from openpyxl import load_workbook
workBookobject = load_workbook("example.xlsx")
同樣可以使用上面的方法對數據進行操作。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。