pandas 保存成excel,并 指定列宽

'''
  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

pandas 保存成excel,并 指定列宽_第1张图片

姓名、地址都变成了设置的宽度
证件号码没有设置,挤在了一起

修改代码:

    to_excel(df,fname='tmp1.xlsx',sheet_name='人员表',
             field_widths = {'姓名': 20, '地址': 30, '证件号码':22})

结果完美
pandas 保存成excel,并 指定列宽_第2张图片

你可能感兴趣的:(爬虫,Day,Day,Up,python)