Python如何實(shí)現(xiàn)Excel的最合適列寬(openpyxl)
Excel的最合適列寬(openpyxl)
Python的Pandas模塊是處理Excel的利器,尤其是加工保存Excel非常方便,但是唯獨(dú)想讓導(dǎo)出的Excel自動(dòng)調(diào)整列寬或者行高,確實(shí)做不到啊,尤其是加工后還需要使用者自己調(diào)整列寬,非常不便。
所以必須openpyxl模塊助力。
這是最簡(jiǎn)單的實(shí)現(xiàn)
from openpyxl import load_workbook
wb = load_workbook('test.xlsx')
ws = wb[wb.sheetnames[0]] ? ? ? ? ? ? ? ? ?# 打開(kāi)第一個(gè)sheet
ws.column_dimensions['A'].width = 20.0 ? ? # 調(diào)整列A寬
ws.row_dimensions[1].height = 40 ? ??? ? ? # 調(diào)整行1高
ws.save('test.xlsx')但是如果隨便讓 一個(gè)Excel每個(gè)sheet都實(shí)現(xiàn)調(diào)整列寬怎么辦呢,我寫(xiě)了這么一個(gè)函數(shù)
獲取每一個(gè)sheet的每一列的最長(zhǎng)值,將其設(shè)置為列寬
from openpyxl import load_workbook
from openpyxl.utils import get_column_letter
def reset_col(filename):
wb=load_workbook(filename)
for sheet in wb.sheetnames:
ws=wb[sheet]
df=pd.read_excel(filename,sheet).fillna('-')
df.loc[len(df)]=list(df.columns) #把標(biāo)題行附加到最后一行
for col in df.columns:
index=list(df.columns).index(col) #列序號(hào)
letter=get_column_letter(index+1) #列字母
collen=df[col].apply(lambda x:len(str(x).encode())).max() #獲取這一列長(zhǎng)度的最大值 當(dāng)然也可以用min獲取最小值 mean獲取平均值
ws.column_dimensions[letter].width=collen*1.2+4 #也就是列寬為最大長(zhǎng)度*1.2 可以自己調(diào)整
wb.save(filename)
reset_col('test.xlsx')
注意Openpyxl僅僅支持最新的.xlsx格式,如果執(zhí)行有這樣的報(bào)錯(cuò):
File “C:\Users\Administrator\AppData\Local\Programs\Python\Python38\lib\site-packages\openpyxl\reader\excel.py”, line 94, in _validate_archive raise InvalidFileException(msg) openpyxl.utils.exceptions.InvalidFileException: openpyxl does not support the old .xls file format, please use xlrd to read this file, or convert
說(shuō)明文件格式老舊,請(qǐng)打開(kāi)Excel文件,選擇另存為.xlsx格式
Python寫(xiě)Excel列寬,行高的一些方法
使用第三方庫(kù) xlsxwriter,結(jié)果文件格式為xlsx
代碼如下:
import xlsxwriter
# 創(chuàng)建一個(gè)新工作簿并添加一個(gè)工作表。
workbook = xlsxwriter.Workbook(r'\\Mac\Home\Desktop\test11.xlsx')
worksheet = workbook.add_worksheet('test')
# 為第一列設(shè)置格式
worksheet.set_column('A:A', 30) # 設(shè)置A列寬度30
worksheet.set_column('B:B', 20) # 設(shè)置B列寬度20
# cell_format = workbook.add_format({'bold': True})
worksheet.set_row(3, 20) # 設(shè)置第4行高度為20
# worksheet.set_row(3, 20,cell_format)
實(shí)現(xiàn)結(jié)果截圖如下:

使用第三方庫(kù) xlwt,結(jié)果文件格式為xls
代碼如下:
import xlwt
book = xlwt.Workbook(r'\\Mac\Home\Desktop\test22.xls')
sheet = book.add_sheet('sheet1')
first_col=sheet.col(0)
sec_col=sheet.col(1)
first_col.width=256*20 # 寬度
tall_style = xlwt.easyxf('font:height 720;') # 36pt,類型小初的字號(hào)
first_row = sheet.row(0)
first_row.set_style(tall_style)
book.save(r'\\Mac\Home\Desktop\test22.xls')
參數(shù)解釋:
''' xlwt中列寬的值表示方法:默認(rèn)字體0的1/256為衡量單位。 xlwt創(chuàng)建時(shí)使用的默認(rèn)寬度為2960,既11個(gè)字符0的寬度 所以我們?cè)谠O(shè)置列寬時(shí)可以用如下方法: width = 256 * 20 256為衡量單位,20表示20個(gè)字符寬度 '''
實(shí)現(xiàn)結(jié)果截圖如下:

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Django shell調(diào)試models輸出的SQL語(yǔ)句方法
今天小編就為大家分享一篇Django shell調(diào)試models輸出的SQL語(yǔ)句方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-08-08
關(guān)于Python八大排序?qū)崿F(xiàn)方法(冒泡排序、快速排序等)
這篇文章主要介紹了關(guān)于Python八大排序?qū)崿F(xiàn)方法,主要有基數(shù)排序、歸并排序、堆排序、簡(jiǎn)單選擇排序、直接插入排序、希爾排序、快速排序、冒泡排序等,需要的朋友可以參考下2023-03-03
Python2與Python3的區(qū)別點(diǎn)整理
在本篇文章里小編給大家整理的是關(guān)于Python2與Python3的區(qū)別點(diǎn)整理內(nèi)容,需要的朋友們可以參考下。2019-12-12
基于Python?wxPython開(kāi)發(fā)文件管理工具
這篇文章主要為大家詳細(xì)介紹了如何基于wxPython開(kāi)發(fā)一個(gè)文件管理工具,該工具提供了多種實(shí)用功能,代碼結(jié)構(gòu)清晰,易于理解和擴(kuò)展,需要的可以了解下2025-02-02
如何解決flask修改靜態(tài)資源后緩存文件不能及時(shí)更改問(wèn)題
在本篇內(nèi)容里小編給大家整理的是關(guān)于如何解決flask修改靜態(tài)資源后緩存文件不能及時(shí)更改問(wèn)題,需要的朋友們可以學(xué)習(xí)下。2020-08-08
如何使用Python實(shí)現(xiàn)一個(gè)簡(jiǎn)易的ORM模型
ORM(Object Relational Mapping)是一種程序設(shè)計(jì)技術(shù),用于實(shí)現(xiàn)面向?qū)ο缶幊陶Z(yǔ)言里不同類型系統(tǒng)的數(shù)據(jù)之間的轉(zhuǎn)換。本文將介紹如何使用Python實(shí)現(xiàn)一個(gè)簡(jiǎn)易的ORM2021-05-05
淺談Python 字符串格式化輸出(format/printf)
下面小編就為大家?guī)?lái)一篇淺談Python 字符串格式化輸出(format/printf)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-07-07
Python 通過(guò)監(jiān)聽(tīng)端口實(shí)現(xiàn)唯一腳本運(yùn)行方式
這篇文章主要介紹了Python 通過(guò)監(jiān)聽(tīng)端口實(shí)現(xiàn)唯一腳本運(yùn)行方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-05-05

