Python實(shí)現(xiàn)凍結(jié)Excel文件中的行、列和單元格
在處理數(shù)據(jù)量較大的 Excel 表格時(shí),滾動(dòng)頁面后表頭或關(guān)鍵列往往會(huì)消失在視野之外,給數(shù)據(jù)閱讀和比對(duì)帶來不便。Excel 提供的"凍結(jié)窗格"功能可以解決這一問題——凍結(jié)后的行或列會(huì)始終保持在可視區(qū)域內(nèi),無論怎樣滾動(dòng)都不會(huì)移開。當(dāng)需要批量生成帶有凍結(jié)設(shè)置的報(bào)表,或者對(duì)多個(gè)文件統(tǒng)一配置凍結(jié)策略時(shí),使用 Python 自動(dòng)化完成這項(xiàng)操作將大大節(jié)省時(shí)間。本文將介紹如何使用 Python 對(duì) Excel 文件進(jìn)行凍結(jié)行、凍結(jié)列、凍結(jié)單元格以及取消凍結(jié)等操作。
環(huán)境準(zhǔn)備
本文使用 Spire.XLS for Python 來操作 Excel 文件,該庫支持對(duì)凍結(jié)窗格功能的完整控制。通過以下命令安裝:
pip install Spire.XLS
安裝完成后,在腳本中導(dǎo)入相關(guān)模塊即可開始使用。
凍結(jié)首行
凍結(jié)首行是最常見的使用場景。表頭通常位于第一行,凍結(jié)后無論向下滾動(dòng)多遠(yuǎn),表頭始終可見。實(shí)現(xiàn)這一操作只需調(diào)用 FreezePanes() 方法,將凍結(jié)位置設(shè)置在第二行第一列即可——該方法的參數(shù)含義是"從第幾行第幾列開始凍結(jié)",因此 (2, 1) 表示第一行被凍結(jié)在其上方。
from spire.xls import *
from spire.xls.common import *
# 創(chuàng)建工作簿并加載文件
workbook = Workbook()
workbook.LoadFromFile("input.xlsx")
# 獲取第一個(gè)工作表
sheet = workbook.Worksheets[0]
# 凍結(jié)首行:第 2 行第 1 列以上區(qū)域被凍結(jié)
sheet.FreezePanes(2, 1)
# 保存文件
workbook.SaveToFile("FreezeTopRow.xlsx", ExcelVersion.Version2013)
workbook.Dispose()

FreezePanes() 方法接收兩個(gè)整數(shù)參數(shù),分別代表凍結(jié)區(qū)域下方的起始行號(hào)和右側(cè)的起始列號(hào)。當(dāng)列參數(shù)為 1 時(shí),表示不對(duì)列進(jìn)行凍結(jié),只凍結(jié)行。
凍結(jié)首列
與凍結(jié)首行的思路類似,凍結(jié)首列只需將參數(shù)調(diào)整為 (1, 2),即第一列被凍結(jié)在其左側(cè),行方向不做凍結(jié)。這在處理包含大量列的數(shù)據(jù)表時(shí)非常實(shí)用,比如財(cái)務(wù)報(bào)表或統(tǒng)計(jì)匯總表,凍結(jié)標(biāo)識(shí)列后可以橫向滾動(dòng)而始終看到每行對(duì)應(yīng)的名稱。
from spire.xls import *
from spire.xls.common import *
workbook = Workbook()
workbook.LoadFromFile("input.xlsx")
sheet = workbook.Worksheets[0]
# 凍結(jié)首列:第 1 行第 2 列以左區(qū)域被凍結(jié)
sheet.FreezePanes(1, 2)
workbook.SaveToFile("FreezeFirstColumn.xlsx", ExcelVersion.Version2013)
workbook.Dispose()

這里的關(guān)鍵在于理解 FreezePanes() 兩個(gè)參數(shù)的含義:第一個(gè)參數(shù)控制從哪一行開始向下滾動(dòng)(該行及其上方被凍結(jié)),第二個(gè)參數(shù)控制從哪一列開始向右滾動(dòng)(該列及其左側(cè)被凍結(jié))。當(dāng)行參數(shù)為 1 時(shí),沒有行被凍結(jié),只有列被凍結(jié)。
同時(shí)凍結(jié)行和列
在實(shí)際工作中,同時(shí)凍結(jié)表頭行和標(biāo)識(shí)列的情況也很常見。例如一個(gè)數(shù)據(jù)矩陣,既需要看到每列的字段名,也需要看到每行的記錄名。此時(shí)只需將 FreezePanes() 的兩個(gè)參數(shù)同時(shí)設(shè)置為大于 1 的值,即可在指定單元格位置創(chuàng)建十字形的凍結(jié)區(qū)域。
from spire.xls import *
from spire.xls.common import *
workbook = Workbook()
workbook.LoadFromFile("input.xlsx")
sheet = workbook.Worksheets[0]
# 凍結(jié)前兩行和前兩列
# 即從第 3 行第 3 列開始,上方和左側(cè)區(qū)域保持固定
sheet.FreezePanes(3, 3)
workbook.SaveToFile("FreezeRowsAndColumns.xlsx", ExcelVersion.Version2013)
workbook.Dispose()

上述代碼將前兩行和前兩列同時(shí)凍結(jié)。滾動(dòng)時(shí),第一、二行始終顯示在頂部,第一、二列始終顯示在左側(cè),中間的數(shù)據(jù)區(qū)域可以自由滾動(dòng)查看。這種設(shè)置對(duì)于大型數(shù)據(jù)表的瀏覽尤其有幫助。
獲取當(dāng)前凍結(jié)設(shè)置
在已有凍結(jié)設(shè)置的文件上繼續(xù)操作之前,有時(shí)需要先了解當(dāng)前的凍結(jié)狀態(tài)。通過 GetFreezePanes() 方法可以讀取工作表當(dāng)前的凍結(jié)行列索引,返回值是一個(gè)包含兩個(gè)元素的列表,分別是凍結(jié)行數(shù)和凍結(jié)列數(shù)。如果返回值為 0,則表示對(duì)應(yīng)方向上沒有凍結(jié)。
from spire.xls import *
from spire.xls.common import *
workbook = Workbook()
workbook.LoadFromFile("FreezePanes.xlsx")
sheet = workbook.Worksheets[0]
# 獲取當(dāng)前凍結(jié)設(shè)置
freezeInfo = sheet.GetFreezePanes()
row_index = freezeInfo[0]
col_index = freezeInfo[1]
print(f"凍結(jié)行數(shù): {row_index}, 凍結(jié)列數(shù): {col_index}")
workbook.Dispose()
這個(gè)功能在批量處理文件時(shí)尤其有用——可以在修改凍結(jié)設(shè)置前先檢查當(dāng)前狀態(tài),避免重復(fù)操作或覆蓋已有的凍結(jié)配置。
取消凍結(jié)
取消凍結(jié)的操作十分簡潔,只需調(diào)用 RemovePanes() 方法即可將工作表上的所有凍結(jié)設(shè)置全部清除,恢復(fù)為正常的可滾動(dòng)狀態(tài)。
from spire.xls import *
from spire.xls.common import *
workbook = Workbook()
workbook.LoadFromFile("FreezePanes.xlsx")
sheet = workbook.Worksheets[0]
# 取消所有凍結(jié)設(shè)置
sheet.RemovePanes()
workbook.SaveToFile("UnfreezePanes.xlsx", ExcelVersion.Version2013)
workbook.Dispose()
RemovePanes() 方法會(huì)一次性移除行凍結(jié)和列凍結(jié),不需要分別操作。在生成臨時(shí)報(bào)表或?qū)С鼋o其他系統(tǒng)使用的文件時(shí),有時(shí)需要先清除凍結(jié)再重新設(shè)置,這個(gè)方法就可以派上用場。
總結(jié)
本文介紹了使用 Python 操作 Excel 凍結(jié)窗格的幾個(gè)核心場景:凍結(jié)首行、凍結(jié)首列、同時(shí)凍結(jié)多行多列、查詢當(dāng)前凍結(jié)狀態(tài)以及取消凍結(jié)。這些操作的核心都圍繞 FreezePanes() 方法的兩個(gè)參數(shù)展開,理解了它們的含義,就能靈活組合出各種凍結(jié)策略。
在此基礎(chǔ)上,還可以進(jìn)一步探索針對(duì)多個(gè)工作表批量設(shè)置凍結(jié)、根據(jù)數(shù)據(jù)內(nèi)容動(dòng)態(tài)判斷凍結(jié)位置,或?qū)鼋Y(jié)配置集成到自動(dòng)化報(bào)表生成流程中。掌握這些技巧,有助于提升 Excel 文件處理的自動(dòng)化水平和用戶體驗(yàn)。
到此這篇關(guān)于Python實(shí)現(xiàn)凍結(jié)Excel文件中的行、列和單元格的文章就介紹到這了,更多相關(guān)Python凍結(jié)Excel內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
借助OpenClaw實(shí)現(xiàn)快速生成Python腳本并調(diào)試BUG
在軟件開發(fā)的征途中,開發(fā)者們始終在與兩個(gè)永恒的挑戰(zhàn)角力:如何更快地構(gòu)建功能以及如何更有效地消滅程序中的BUG,下面我們就來看看OpenClaw如何通過其核心技能快速生成Python腳本并高效調(diào)試BUG,幫助開發(fā)者專注于更具創(chuàng)造性的工作2026-03-03
使用python實(shí)現(xiàn)對(duì)元素的長截圖功能
這篇文章主要介紹了用python實(shí)現(xiàn)對(duì)元素的長截圖功能,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2019-11-11
基于Python打造簡單的周報(bào)郵件附件自動(dòng)下載工具
在企業(yè)項(xiàng)目管理場景中,項(xiàng)目組成員每周需向負(fù)責(zé)人發(fā)送周報(bào)郵件,隨著項(xiàng)目數(shù)量增加,負(fù)責(zé)人每周需要手動(dòng)打開郵箱、逐一篩選周報(bào)郵件和附件,這樣效率太低了,下面我們就來看看如何使用Python打造一個(gè)周報(bào)郵件附件自動(dòng)下載工具吧2026-03-03
Python中常見的數(shù)據(jù)類型小結(jié)
這篇文章主要對(duì)Python中常見的數(shù)據(jù)類型進(jìn)行了總結(jié)歸納,很有參考借鑒價(jià)值,需要的朋友可以參考下2015-08-08
Python使用pydub模塊轉(zhuǎn)換音頻格式以及對(duì)音頻進(jìn)行剪輯
這篇文章主要給大家介紹了關(guān)于Python使用pydub模塊轉(zhuǎn)換音頻格式以及對(duì)音頻進(jìn)行剪輯的相關(guān)資料pydub是python的高級(jí)一個(gè)音頻處理庫,可以讓你以一種不那么蠢的方法處理音頻。需要的朋友可以參考下2021-06-06

