Python如何實現Excel的最合適列寬(openpyxl)

Excel的最合適列寬(openpyxl)

Python的Pandas模塊是處理Excel的利器,尤其是加工保存Excel非常方便,但是唯獨想讓導出的Excel自動調整列寬或者行高,確實做不到啊,尤其是加工後還需要使用者自己調整列寬,非常不便。

所以必須openpyxl模塊助力。

這是最簡單的實現

from openpyxl import load_workbook
wb = load_workbook('test.xlsx')
ws = wb[wb.sheetnames[0]]                  # 打開第一個sheet
ws.column_dimensions['A'].width = 20.0     # 調整列A寬
ws.row_dimensions[1].height = 40           # 調整行1高
ws.save('test.xlsx')

但是如果隨便讓 一個Excel每個sheet都實現調整列寬怎麼辦呢,我寫瞭這麼一個函數

獲取每一個sheet的每一列的最長值,將其設置為列寬

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)						#把標題行附加到最後一行
		for col in df.columns:				
			index=list(df.columns).index(col)					#列序號
			letter=get_column_letter(index+1)					#列字母
			collen=df[col].apply(lambda x:len(str(x).encode())).max()	#獲取這一列長度的最大值 當然也可以用min獲取最小值 mean獲取平均值
			ws.column_dimensions[letter].width=collen*1.2+4		#也就是列寬為最大長度*1.2 可以自己調整
	wb.save(filename)
	
reset_col('test.xlsx')

註意Openpyxl僅僅支持最新的.xlsx格式,如果執行有這樣的報錯:

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

說明文件格式老舊,請打開Excel文件,選擇另存為.xlsx格式

Python寫Excel列寬,行高的一些方法

使用第三方庫 xlsxwriter,結果文件格式為xlsx

代碼如下:

 import xlsxwriter
# 創建一個新工作簿並添加一個工作表。
workbook = xlsxwriter.Workbook(r'\\Mac\Home\Desktop\test11.xlsx')
worksheet = workbook.add_worksheet('test')
# 為第一列設置格式
worksheet.set_column('A:A', 30)                                 # 設置A列寬度30
worksheet.set_column('B:B', 20)                                 # 設置B列寬度20
# cell_format = workbook.add_format({'bold': True})
worksheet.set_row(3, 20)                                           # 設置第4行高度為20
# worksheet.set_row(3, 20,cell_format)

實現結果截圖如下:

使用第三方庫 xlwt,結果文件格式為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,類型小初的字號
first_row = sheet.row(0)
first_row.set_style(tall_style)
book.save(r'\\Mac\Home\Desktop\test22.xls')

參數解釋:

	'''
	xlwt中列寬的值表示方法:默認字體0的1/256為衡量單位。
	xlwt創建時使用的默認寬度為2960,既11個字符0的寬度
	所以我們在設置列寬時可以用如下方法:
	width = 256 * 20    256為衡量單位,20表示20個字符寬度
	'''

實現結果截圖如下:

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。

推薦閱讀: