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。
推薦閱讀:
- python技巧分享Excel創建和修改
- 使用Python讀取和修改Excel文件(基於xlrd、xlwt和openpyxl模塊)
- python 使用openpyxl讀取excel數據
- python 使用xlsxwriter循環向excel中插入數據和圖片的操作
- Python 操作 Excel 之 openpyxl 模塊