'''
pandas保存成Excel,并指定列宽
'''
import pandas as pd
import time
def to_excel(df,fname='demo.xls',sheet_name='Sheet1',
field_widths = {'name': 10, 'age': 4}
):
# 保存excel
# df.to_excel(fname) #能保存,但不能设列宽,换成以下方法
while True:
try:
with pd.ExcelWriter(fname) as writer:
df.to_excel(writer, sheet_name=sheet_name, index_label='序号')
worksheet = writer.sheets[sheet_name]
# 设置列宽
for k, v in field_widths.items():
if k in df.columns: #存在这个列名
i = df.columns.to_list().index(k) + 1 # '证件号码' 是第i列
worksheet.set_column(i, i, v) # 设置 第i列 宽度=v
writer.save()
except:
print(f'无法写入{fname},如已打开,请关闭该文件。。。')
time.sleep(3)
else:
# print(f'{fname} 已写入!')
break
pass
return
if __name__ == '__main__':
data=[ ('张三','142610199101010011','男','山西省临汾市尧都区东大街101号','职员'),
('李四','142610199101010022','女','山西省临汾市襄汾县西大街102号','职员') ]
df=pd.DataFrame(data,columns=['姓名','证件号码','性别','地址','职务'])
to_excel(df,fname='tmp1.xlsx',sheet_name='人员表',
field_widths = {'姓名': 20, '地址': 30})
pass
运行结果,打开 tmp1.xlsx
姓名、地址都变成了设置的宽度
证件号码没有设置,挤在了一起
修改代码:
to_excel(df,fname='tmp1.xlsx',sheet_name='人员表',
field_widths = {'姓名': 20, '地址': 30, '证件号码':22})
结果完美