如何使用 Python openpyxl 套件操作 Excel 工作表?openpyxl Worksheet 物件介紹
本節並不包含 Microsoft Excel 工作表的建立,複製,移動,移除等操作,如果你想了解相關內容,可以檢視如何使用 Python openpyxl 套件操作 Excel 活頁簿?openpyxl Workbook 物件介紹一節。
此外,本節內容也不涉及與 Excel 樣式,計算,表格,圖表相關的內容。
Python openpyxl 套件中的 Excel 工作表物件 Worksheet
Pythonopenpyxl
套件中的Worksheet
類別,屬於模組openpyxl.worksheet.worksheet
,可用於取得或設定 Excel 活頁簿中的工作表的相關資訊和資料,Worksheet
物件可通過openpyxl
活頁簿物件Workbook
取得或建立。如果Workbook
是唯讀的,即read_only
屬性為True
,那麽你將只能得到ReadOnlyWorksheet
工作表物件(屬於模組openpyxl.worksheet._read_only
),如果Workbook
是唯寫的,即write_only
屬性為True
,那麽你將只能建立並得到WriteOnlyWorksheet
工作表物件(屬於模組openpyxl.worksheet._write_only
)。
Python openpyxl 套件的 ReadOnlyWorksheet,WriteOnlyWorksheet 類別與 Worksheet 類別的關系
雖然 Pythonopenpyxl
套件的ReadOnlyWorksheet
和WriteOnlyWorksheet
類別,與Worksheet
類別所實作的一些功能是相近的,但他們並不存在繼承關系。
無法通過 Python openpyxl 套件的 Worksheet,WriteOnlyWorksheet 類別的建構子直接建立新的工作表
不要嘗試通過Worksheet
和WriteOnlyWorksheet
類別的建構子來建立新的 Excel 工作表,Workbook
並沒有提供將他們新增至 Excel 活頁簿的方法,即便Workbook
存在特性worksheets
。
活頁簿
想要了解如何通過Workbook
物件新增 Excel 工作表,你可以檢視使用 Python openpyxl 套件的 Workbook 物件建立 Excel 工作表一段。
使用 Python openpyxl 套件的 Worksheet 物件取得目前使用中的 Excel 儲存格的位址
Pythonopenpyxl
套件的Worksheet
物件的active_cell
屬性,可用於取得 Excel 工作表目前使用中的儲存格的位址,比如,active_cell
屬性傳回'C1'
,表示儲存格C1
處於使用中。
worksheet.active_cell
Excel 工作表的目前使用中儲存格可能不同於已選取儲存格
在 Excel 工作表中,目前使用中的儲存格通常只有一個,他可能不同於已選取儲存格,因為被選取的儲存格可以是多個。
# 請將命令列跳躍至 Goods.xlsx 所在的目錄,然後執行此腳本檔案
from openpyxl import load_workbook
worksheet = load_workbook('Goods.xlsx')['Tables']
# 顯示工作表目前使用中的儲存格的位址
print(f'目前使用中的儲存格為 {worksheet.active_cell}')
目前使用中的儲存格為 C1
使用 Python openpyxl 套件的 Worksheet 物件為 Excel 工作表新增資料(值)
Pythonopenpyxl
套件的Worksheet
物件的append
方法,可用於為 Excel 工作表新增資料(值),被新增的資料將位於工作表末尾一列的下一列,即便在末尾列之前存在某個空白列。這裏需要指出,openpyxl
套件確定末尾一列的方式可能和你想象的不一樣,我們會在計算已用儲存格的最小範圍一段中給予說明。
worksheet.append(iterable)
- iterable 參數
iterable
參數是一個提供資料的物件,可以是串列(list
),元組(tuple
),範圍(range
),字典(dict
),或 Python 建置器(被isgenerator
函式判斷為True
的物件)。除了字典,以上物件包含的值會從列的第一欄開始,被依次寫入 Excel 工作表。如果使用字典,那麽可以通過鍵值組的鍵來指明資料對應的欄,鍵可以是字串或數值,比如{'A':100}
和{1:100}
都表示第一欄的值為100
。
Python openpyxl 套件的 Worksheet 物件可將 Excel 儲存格物件作為被新增資料
Pythonopenpyxl
套件的Worksheet
物件的append
方法,除了可以新增字串或數值型別的值以外,還可以將建立的 Excel 儲存格物件(Cell
)作為被新增的資料,如果儲存格物件已經隸屬於某個 Excel 工作表,即某個Worksheet
物件,那麽該Worksheet
物件必須是呼叫append
方法的Worksheet
物件,此時新增的效果類似於移動指定 Excel 的儲存格,這會體現在openpyxl
Workbook
物件所儲存的 Excel 檔案中(程式中可能不會體現)。
在讀取 Excel 檔案Goods.xlsx
之後,我們建立了一個工作表,並為工作表新增了幾列資料,其中 Python 字典的鍵2
和4
分別對應了欄B
和D
,把儲存格A1
和B1
作為新增資料,將導致他們被移動至第二列,你可以在Append.xlsx
的工作表Sheet
中發現這一點,雖然print
函式所顯示的A1
和B1
的值依然為1.6
和2.5
。
# 請將命令列跳躍至 Goods.xlsx 所在的目錄,然後執行此腳本檔案
from openpyxl import load_workbook
workbook = load_workbook('Goods.xlsx')
worksheet = workbook.create_sheet()
# 以不同形式為工作表新增 4 列資料
worksheet.append((1.6, 2.5))
# 這相當於將儲存格 A1 和 B1 移動至 A2 和 B2 的所在位置
worksheet.append([worksheet['A1'], worksheet['B1']])
worksheet.append({2: 1.0, 4: 2.0})
worksheet.append({'C': 1.1, 'E': 2.4})
# 儲存為 Append.xlsx
workbook.save('Append.xlsx')
# 顯示所有儲存格的值
for r in worksheet.values:
print(r)
# 第一列中的 1.6 和 2.5 不會在 Append.xlsx 的 Sheet 工作表中出現
(1.6, 2.5, None, None, None)
(1.6, 2.5, None, None, None)
(None, 1.0, None, 2.0, None)
(None, None, 1.1, None, 2.4)
Pythonopenpyxl
套件的WriteOnlyWorksheet
物件的append
方法,同樣可用於為 Excel 工作表新增資料,其效果與Worksheet
物件的append
方法類似,只不過其能夠接受的資料形式更少。
writeonlyworksheet.append(iterable)
- iterable 參數
iterable
參數是一個提供資料的物件,可以是串列(list
),元組(tuple
),範圍(range
),或 Python 建置器(被isgenerator
函式判斷為True
的物件)。
下面的範例,建立了唯寫的 Excel 活頁簿和工作表物件,在呼叫append
方法寫入資料後,我們將其儲存為檔案AppendWriteOnly.xlsx
。
from openpyxl import Workbook
workbook = Workbook(True)
worksheet = workbook.create_sheet()
# 為唯寫工作表新增資料,並儲存為 AppendWriteOnly.xlsx
worksheet.append((1.6, 2.5))
worksheet.append([1.8, 2.2])
workbook.save('AppendWriteOnly.xlsx')
使用 Python openpyxl 套件的 Worksheet 物件取得 Excel 儲存格
Pythonopenpyxl
套件的Worksheet
物件的cell
方法或[]
運算子,可用於取得 Excel 工作表中的某個或某些儲存格。其中,cell
方法的傳回值是表示 Excel 儲存格的Cell
物件,[]
運算子的傳回值是Cell
物件,或包含多個Cell
物件的 Python 元組,或以巢狀形式包含多列多欄 Excel 儲存格的 Python 元組。
worksheet.cell(row, column, value=None)
worksheet[address]
- row 參數
row
參數是一個整數,表示需要取得的 Excel 儲存格位於第幾列。- column 參數
column
參數是一個整數,表示需要取得的 Excel 儲存格位於第幾欄。- value 參數
value
參數是需要為 Excel 儲存格設定的值,可以是數值,字串或時間。如果不希望在取得 Excel 儲存格的同時設定儲存格的值,可以保持value
參數的預設值None
。- address 值
address
為需要取得的某個 Excel 儲存格的位址,比如'B2'
,或者包含多個 Excel 儲存格的範圍運算式,比如'A1:C3'
(從儲存格A1
到C3
),2:4
(在第二列和第四列之間,從第一欄開始至工作表最大欄結束)。
與Worksheet
物件的cell
方法和[]
運算子類似,Pythonopenpyxl
套件的ReadOnlyWorksheet
物件的cell
方法和[]
運算子,同樣可用於取得 Excel 工作表中的某個或某些儲存格。不同的是,ReadOnlyWorksheet
物件的cell
方法和[]
運算子,傳回的是ReadOnlyCell
或EmptyCell
物件而非Cell
,呼叫cell
方法時,不能為value
參數指定非None
值,否則將導致例外狀況,[]
運算子會排除 Excel 工作表末尾所有的空白列。
在 Excel 檔案Goods.xlsx
的Phones
工作表中,第一欄沒有任何資料,但範圍2:4
依然會包含該欄中的EmptyCell
,由於openpyxl
將工作表Phones
的最大欄計算為4
,因此範圍2:4
會包含第四欄的儲存格,即便他們都是EmptyCell
,由於第四列是Phones
工作表末尾的空白列,因此ReadOnlyWorksheet
物件會將其忽略。
在 Excel 檔案Goods.xlsx
的Cups
工作表中,第五列和其之後的列都是工作表末尾的空白列,因此ReadOnlyWorksheet
物件會將他們忽略。
# 請將命令列跳躍至 Goods.xlsx 所在的目錄,然後執行此腳本檔案
import openpyxl
workbook = openpyxl.load_workbook('Goods.xlsx', True)
phones = workbook['Phones']
# 取得儲存格 A1,C1
print(phones.cell(1, 1))
print(phones['C1'])
# 取得第二和第四列之間,從第一欄開始至最大欄結束的範圍內的儲存格
print(phones[2:4])
cups = workbook['Cups']
# 工作表末尾的一些列將被忽略
print(cups['A1:B10'])
<EmptyCell>
<ReadOnlyCell 'Phones'.C1>
((<EmptyCell>, <ReadOnlyCell 'Phones'.B2>, <ReadOnlyCell 'Phones'.C2>, <EmptyCell>), (<EmptyCell>, <ReadOnlyCell 'Phones'.B3>, <EmptyCell>, <EmptyCell>))
((<ReadOnlyCell 'Cups'.A1>, <ReadOnlyCell 'Cups'.B1>), (<ReadOnlyCell 'Cups'.A2>, <ReadOnlyCell 'Cups'.B2>), (<EmptyCell>, <EmptyCell>), (<ReadOnlyCell 'Cups'.A4>, <ReadOnlyCell 'Cups'.B4>))
使用 Python openpyxl 套件的 Worksheet 物件周遊 Excel 儲存格的值
Pythonopenpyxl
套件的Worksheet
和ReadOnlyWorksheet
物件的values
屬性,傳回一個可用於按列周遊 Excel 儲存格的值的建置器物件,周遊的範圍從儲存格A1
開始,至 Excel 工作表的最大列和最大欄結束,空白儲存格的值將被表示為None
。
需要指出,工作表的最大列和最大欄可能會在openpyxl
套件的Worksheet
物件中發生變化,關於這一點,我們會在計算已用儲存格的最小範圍一段給予說明。
worksheet|readonlyworksheet.values
在通過Worksheet
物件存取 Excel 儲存格A4
之後,Excel 工作表Phones
的最大列由3
變成了4
。
# 請將命令列跳躍至 Goods.xlsx 所在的目錄,然後執行此腳本檔案
import openpyxl
worksheet = openpyxl.load_workbook('Goods.xlsx')['Phones']
# 存取儲存格 A4 將導致工作表的最大列發生變化
worksheet['A4']
# 顯示 Phones 工作表中的儲存格的值
for row in worksheet.values:
print(row)
(None, 'iPhone 100', 10000, 10)
(None, 'Samsung', 9999, None)
(None, 'iPhone 13', None, None)
(None, None, None, None)
使用 Python openpyxl 套件的 Worksheet 物件移動 Excel 儲存格
Pythonopenpyxl
套件的Worksheet
物件的move_range
方法,可用於移動 Excel 工作表中的某個儲存格或指定範圍內的所有儲存格,移動的目標範圍中的儲存格將被覆蓋。
worksheet.move_range(cell_range, rows=0, cols=0, translate=False)
- cell_range 參數
cell_range
參數為某個 Excel 儲存格的位址,或表示儲存格範圍的運算式和CellRange
物件。- rows 參數
rows
參數為 Excel 儲存格移動的列數,大於0
時向下移動,小於0
時向上移動。- cols 參數
cols
參數為 Excel 儲存格移動的欄數,大於0
時向右移動,小於0
時向左移動。- translate 參數
translate
參數表示是否對被移動儲存格的公式進行轉換,預設為False
,不轉換。
Python openpyxl 套件的 Worksheet 物件不會移動公式參考的 Excel 儲存格
如果將openpyxl
Worksheet
物件的move_range
方法的translate
參數設定為True
,那麽會對移動的 Excel 儲存格的公式進行轉換,公式中使用的位址將被重新計算。比如,將公式為=A1
的儲存格B1
向下移動一列,那麽被覆蓋的儲存格B2
的公式將是=A2
。
需要說明的是,對公式進行轉換並不表示會移動公式所參考的儲存格,除非這些儲存格本身處於被移動的範圍中。
Python openpyxl 套件的 Worksheet 物件無法正常移動擁有陣列公式的 Excel 儲存格
無論是轉換還是不轉換公式,openpyxl
Worksheet
物件的move_range
方法都無法可靠的移動擁有陣列公式的 Excel 儲存格。當translate
參數為False
時,儲存格的陣列公式可能丟失,當translate
參數為True
時,將導致例外狀況的發生。
在 Excel 檔案Goods.xlsx
的Pens
工作表中,儲存格C1
,C2
和C3
,包含了對範圍A1:B3
的計算公式,我們呼叫Worksheet
物件的move_range
方法來移動他們,並將translate
參數設定為True
,以確保移動後公式計算的結果依然準確。
# 請將命令列跳躍至 Goods.xlsx 所在的目錄,然後執行此腳本檔案
from openpyxl import open
workbook = open('Goods.xlsx')
worksheet = workbook['Pens']
# 移動包含資料和公式儲存格,並轉換公式
worksheet.move_range('A1:C3', 1, 1, True)
workbook.save('Move.xlsx')
使用 Python openpyxl 套件的 Worksheet 物件合併或取消合併 Excel 儲存格
Pythonopenpyxl
套件的Worksheet
物件的merge_cells
方法,可用於合併 Excel 工作表中某個範圍內的所有儲存格,合併之後,原本範圍左上角的儲存格將占據整個範圍,並可以通過該儲存格原本的位址來存取他。如果只給出一個儲存格,那麽合併操作不會產生任何效果。
Pythonopenpyxl
套件的Worksheet
物件的unmerge_cells
方法,可用於取消合併 Excel 工作表中被合併的儲存格,你需要為unmerge_cells
方法指明取消合併的範圍,該範圍應該與之前進行合併操作的範圍一致。
worksheet.merge_cells(range_string=None, start_row=None, start_column=None, end_row=None, end_column=None)
worksheet.unmerge_cells(range_string=None, start_row=None, start_column=None, end_row=None, end_column=None)
- range_string 參數
range_string
參數為表示被合併或取消合併的儲存格範圍的運算式,如果忽略或設定為None
,則需要給出merge_cells
方法的參數start_row
,start_column
,end_row
和end_column
。- start_row 參數
start_row
參數是一個整數,表示被合併或取消合併的範圍開始於第幾列。- start_column 參數
start_column
參數是一個整數,表示被合併或取消合併的範圍開始於第幾欄。- end_row 參數
end_row
參數是一個整數,表示被合併或取消合併的範圍結束於第幾列。- end_column 參數
end_column
參數是一個整數,表示被合併或取消合併的範圍結束於第幾欄。
被 Python openpyxl 套件的 Worksheet 物件合併的 Excel 儲存格將成為唯讀的
除了左上角的 Excel 儲存格,被合併範圍內的其他儲存格將被轉換為openpyxl
套件的MergedCell
物件,其值或公式會被清空並成為唯讀的。如果被合併的 Excel 儲存格通過unmerge_cells
方法取消了合併,那麽相關的MergedCell
物件將重新轉換為支援寫入的Cell
物件。
在下面的範例中,Excel 儲存格B2
並不位於被合併範圍的左上角,因此B2
的公式在合併之後被清空。
# 請將命令列跳躍至 Goods.xlsx 所在的目錄,然後執行此腳本檔案
from openpyxl import open
workbook = open('Goods.xlsx')
worksheet = workbook['Flowers']
print(f'合併之前的 B2 為 {worksheet["B2"].value}')
# 合併範圍 A1:B2 之後,立即取消合併
worksheet.merge_cells('A1:B2')
print(f'合併之後的 B2 為 {worksheet["B2"].value}')
worksheet.unmerge_cells(start_row=1, start_column=1, end_row=2, end_column=2)
合併之前的 B2 為 =B1
合併之後的 B2 為 None
使用 Python openpyxl 套件的 Worksheet 物件取得 Excel 工作表中所有被合併的範圍
Pythonopenpyxl
套件的Worksheet
物件的merged_cells
變數是一個MultiCellRange
物件,可用於表示 Excel 工作表中所有被合併的範圍,通過該物件和in
關鍵字,你可判斷某個 Excel 儲存格是否已經被合併。
worksheet.merged_cells
# …
# 合併範圍 B2:C3,D4:H6
worksheet.merge_cells('B2:C3')
worksheet.merge_cells('D4:H6')
# 判斷儲存格 E3,D4 是否被合併了
print(f'儲存格 E3 被合併了嗎?{"E3" in worksheet.merged_cells}')
print(f'儲存格 D4 被合併了嗎?{"D4" in worksheet.merged_cells}')
儲存格 E3 被合併了嗎?False
儲存格 D4 被合併了嗎?True
使用 Python openpyxl 套件的 Worksheet 物件計算包含 Excel 工作表所有已用儲存格的最小範圍
Pythonopenpyxl
套件的Worksheet
物件的calculate_dimension
方法和dimensions
屬性,可用於計算包含 Excel 工作表已用儲存格的最小範圍,並傳回該最小範圍的運算式。Excel 已用儲存格可能包括值為空的儲存格,比如,一個沒有資料但被設定了背景色彩的儲存格。
worksheet.calculate_dimension()
worksheet.dimensions
Pythonopenpyxl
套件的ReadOnlyWorksheet
物件的calculate_dimension
方法,與Worksheet
物件的calculate_dimension
方法類似,只不過ReadOnlyWorksheet
物件的calculate_dimension
方法增加了一個參數force
。出於對效能的考慮,如果一個 Excel 工作表尚未確定最大列和最大欄,那麽預設情況下,呼叫calculate_dimension
方法會導致例外狀況,此時可將參數force
設定為True
,以強製計算未確定的最大列和最大欄。
readonlyworksheet.calculate_dimension(force=False)
- force 參數
force
參數表示是否強製計算已用儲存格的最小範圍,預設為False
,不強製計算。
Python openpyxl 套件的 Worksheet 物件所計算的已用儲存格最小範圍可能不準確
openpyxl
Worksheet
物件的calculate_dimension
方法,會通過該物件的_cells
變數來取得其包含的儲存格的最小座標和最大座標,以確定整個 Excel 工作表的最小列,最小欄,最大列,最大欄以及最小範圍。當使用Worksheet
存取某個儲存格時,新的儲存格可能會被新增至_cells
,從而導致最小列,最小欄,最大列,最大欄,最小範圍的改變,即便被存取的儲存格中沒有任何資料。
與Worksheet
物件不同,openpyxl
ReadOnlyWorksheet
物件的calculate_dimension
方法采用了不同的運算邏輯,其傳回的最小範圍並不會隨意改變。
在下面的例子中,我們分別通過Worksheet
和ReadOnlyWorksheet
物件存取儲存格E5
,該儲存格不在原有最小範圍B2:C3
之內,輸出結果表明Worksheet
物件的calculate_dimension
方法的計算結果發生了變化。
# 請將命令列跳躍至 Goods.xlsx 所在的目錄,然後執行此腳本檔案
from openpyxl import load_workbook
empty = load_workbook('Goods.xlsx')['Empty']
# C3 是一個值為空但擁有背景色彩的儲存格
print(empty['C3'])
print(f'最小範圍 {empty.dimensions}')
# 存取 E5 導致最小範圍改變
empty['E5']
print(f'存取 E5 後的最小範圍 {empty.calculate_dimension()}')
r_empty = load_workbook('Goods.xlsx', True)['Empty']
# 對於唯讀工作表,存取 E5 不會導致最小範圍改變
r_empty['E5']
print(f'唯讀工作表存取 E5 後的最小範圍 {r_empty.calculate_dimension()}')
<Cell 'Empty'.C3>
最小範圍 B2:C3
存取 E5 後的最小範圍 B2:E5
唯讀工作表存取 E5 後的最小範圍 B2:C3
Pythonopenpyxl
套件的ReadOnlyWorksheet
物件的reset_dimensions
方法,會將ReadOnlyWorksheet
物件計算的最大列和最大欄設定為None
,這導致在呼叫calculate_dimension
方法時,需要把參數force
設定為True
,以重新計算最大列和最大欄,否則會出現例外狀況。
readonlyworksheet.reset_dimensions()
# …
# 重設最大列和最大欄
r_empty.reset_dimensions()
# ERROR 需要將 force 參數設定為 True
r_empty.calculate_dimension()
ValueError: Worksheet is unsized, use calculate_dimension(force=True)
使用 Python openpyxl 套件的 Worksheet 物件取得擁有陣列公式的 Excel 儲存格及其影響範圍
Pythonopenpyxl
套件的Worksheet
物件的array_formulae
屬性,傳回一個 Python 字典,用於表示 Excel 工作表中所有擁有陣列公式的儲存格及其影響的範圍,字典鍵值組的鍵為擁有陣列公式的儲存格的位址,字典鍵值組的值為陣列公式所影響的範圍對應的運算式,該範圍中的儲存格將儲存公式的計算結果。比如,{'E1':'E1:E3'}
表示儲存格E1
具有陣列公式,該公式的計算結果儲存在範圍E1:E3
中。
worksheet.array_formulae
使用 Python openpyxl 套件的 Worksheet 物件取得和設定 Excel 工作表的名稱(標題)
Pythonopenpyxl
套件的Worksheet
和WriteOnlyWorksheet
物件的title
屬性,可用於取得或設定 Excel 工作表的名稱(標題)。Pythonopenpyxl
套件的ReadOnlyWorksheet
物件的title
變數,用於表示 Excel 工作表的名稱,對該變數進行修改並沒有太大意義,因為無法將其儲存至 Excel 檔案。
worksheet|writeonlyworksheet|readonlyworksheet.title
worksheet|writeonlyworksheet|readonlyworksheet.title = name
- name 值
name
為 Excel 工作表的名稱。
# 請將命令列跳躍至 Goods.xlsx 所在的目錄,然後執行此腳本檔案
from openpyxl import load_workbook
workbook = load_workbook('Goods.xlsx')
# 修改工作表 Tables 的名稱,並儲存為 Name.xlsx
workbook['Tables'].title = 'New Tables'
workbook.save('Name.xlsx')
使用 Python openpyxl 套件的 Worksheet 物件取得和設定 Excel 工作表的顯示狀態
Pythonopenpyxl
套件的Worksheet
,WriteOnlyWorksheet
和ReadOnlyWorksheet
物件的sheet_state
變數,可用於取得或設定 Excel 工作表的顯示狀態(是否被隱藏),當然,修改ReadOnlyWorksheet
物件的sheet_state
變數意義不大,因為無法進行儲存。sheet_state
變數的有效取值有以下幾種。
- 'visible'
'visible'
對應了Worksheet
的類別變數SHEETSTATE_VISIBLE
,表示 Excel 工作表處於顯示狀態。- 'hidden'
'hidden'
對應了Worksheet
的類別變數SHEETSTATE_HIDDEN
,表示 Excel 工作表處於隱藏狀態,一般可通過 Office 軟體重新顯示。- 'veryHidden'
'veryHidden'
對應了Worksheet
的類別變數SHEETSTATE_VERYHIDDEN
,表示 Excel 工作表處於隱藏狀態,且無法通過 Office 軟體重新顯示(由具體的 Office 軟體決定)。
worksheet|writeonlyworksheet|readonlyworksheet.sheet_state
worksheet|writeonlyworksheet|readonlyworksheet.sheet_state = state
- state 值
state
為 Excel 工作表的顯示狀態。
# …
workbook = load_workbook('Goods.xlsx')
# 隱藏工作表 Pens,Cups
workbook['Pens'].sheet_state = 'hidden'
workbook['Cups'].sheet_state = 'veryHidden'
workbook.save('Hidden.xlsx')
使用 Python openpyxl 套件的 Worksheet 物件取得 Excel 工作表所隸屬的活頁簿
Pythonopenpyxl
套件的Worksheet
,WriteOnlyWorksheet
和ReadOnlyWorksheet
物件的parent
屬性,表示了 Excel 工作表所隸屬的活頁簿物件。如果 Excel 工作表不屬於任何活頁簿,那麽parent
屬性將傳回空值None
。
worksheet|writeonlyworksheet|readonlyworksheet.parent
from openpyxl import Workbook
worksheet = Workbook(True).create_sheet()
worksheet.title = 'MySheet'
# 通過 parent 屬性取得工作表對應的活頁簿物件
worksheet.parent.save('Parent.xlsx')
使用 Python openpyxl 套件的 Worksheet 物件取得和設定 Excel 工作表的保護資訊
Pythonopenpyxl
套件的Worksheet
和WriteOnlyWorksheet
物件的protection
變數是一個SheetProtection
物件,該物件包含了 Excel 工作表的保護資訊。這些保護資訊僅被 Office 軟體用於限製使用者的行為,並不會對 Pythonopenpyxl
套件的行為造成影響。
worksheet|writeonlyworksheet.protection
# …
workbook = load_workbook('Goods.xlsx')
protection = workbook['Flowers'].protection
# 啟用對工作表 Flowers 的保護
protection.sheet = True
# 允許使用者在 Office 軟體中刪除列或欄
protection.deleteColumns = False
protection.deleteRows = False
workbook.save('Protection.xlsx')
Python openpyxl 套件的 Worksheet 物件的其他特性
以下是與openpyxl
套件的Worksheet
,ReadOnlyWorksheet
或WriteOnlyWorksheet
物件相關,但不太重要的一些特性,這些特性可能並非從 Microsoft Excel 檔案取得,只是由openpyxl
套件給出了固定值。
- encoding 屬性
Workbook
,ReadOnlyWorksheet
和WriteOnlyWorksheet
物件的encoding
屬性,用於表示 Excel 工作表所屬的活頁簿的編碼,他由openpyxl
指定為'utf-8'
。
程式碼
src/zh-hant/openpyxl/worksheets·codebeatme/office-programming·GitHub