Python 给一个Excel文件套上固定的格式
一般来说,我们使用to_excel()函数,得到一个没有任何格式的Excel文件,但是我们又想设置一下字体,条件格式等,可以使用 xlwt 一个一个写进去,但是如果数据特别多,效率就很慢。
我们想这样实现:先设置一个格式文件,然后再格式刷一下。
查询资料,得到如下方法:
import pandas as pd import numpy as np import re import datetime import warnings warnings.filterwarnings("ignore") import time import pythoncom from PIL import ImageGrab import win32com from win32com.client import Dispatch,constants import os os.system('taskkill /IM EXCEL.exe /F') import shutil #复制文件格式例子副本:是设计好格式的文件,复制文件格式例子06是最终输出文件,复制文件格式例子是需要复制格式的文件 risk_df =shutil.copyfile('xxx/复制文件格式例子副本.xlsx','xxx/复制文件格式例子06.xlsx') pythoncom.CoInitialize()# 自动调度必须执行代码 xlapp2 = win32com.client.gencache.EnsureDispatch('Excel.Application') wkb = xlapp2.Workbooks.Open(risk_df) wkb_tmp = xlapp2.Workbooks.Open('xxx/复制文件格式例子.xlsx') wkb_tmp.Worksheets('Sheet1').Range('A1:C5').Copy() wkb.Worksheets('Sheet1').Select wkb.Worksheets('Sheet1').Range('A1').PasteSpecial(Paste = constants.xlPasteValues,Operation = constants.xlNone) wkb.Save() wkb.Close() wkb_tmp.Save() wkb_tmp.Close() print('done',datetime.datetime.now())
固定格式的文件:复制文件格式例子副本.xlsx 如下:
需要复制格式的文件:复制文件格式例子.xlsx
最终输出文件:复制文件格式例子06.xlsx
最终效果不错,方法好使。
如报这个错误
AttributeError: module 'win32com.gen_py.00020813-0000-0000-C000-000000000046x0x1x8' has no attribute 'CLSIDToClassMap'
解决网址:https://blog.csdn.net/Saladbobo/article/details/103381335
2023年5月15号补充
由于使用到 win32com 模块,即限制了在Windows使用。但很多时候,我们会将Python安装在Linux环境中,上面的代码就使用不了,下面简单介绍一下在Linux系统下如何给Excel文件套上固定的格式。
import openpyxl dst_xlsx = '设置好格式的文件.xlsx' #这个是设置定格式的模块文件 import datetime yesterday = datetime.date.today()-datetime.timedelta(days=1) file_path = '结果输出文件.xlsx' #这个是最终输出的文件 df=openpyxl.load_workbook(dst_xlsx) import pandas as pd #下面假设文件中有对个sheets, code_name = ['sheet1', 'sheet2','sheet3'] for k in range(3): sheet0 = df.worksheets[k] target_data = pd.read_excel('中间过渡文件.xlsx',\ sheet_name=code_name[k]).reset_index().reset_index().T.reset_index().T.iloc[:,1:] #这个文件是中间过渡文件,即是需要套上格式的文件 target_data = target_data.iloc[:,2:] for i in range(len(target_data)): #print(target_data.iloc[i,:]) for j in range(len(target_data.iloc[i,:])): sheet0.cell(i+2,j+3).value = target_data.iloc[(i,j)] # 写入数据 #sheet0.cell(i+1,j+1).alignment = Alignment(horizontal='center', vertical='center') # 居中对齐 df.save(file_path) # 保存文件
这样即可。
分类:
Excel
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)