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) # 保存文件

这样即可。

 

posted on 2022-07-25 11:37  小小喽啰  阅读(775)  评论(0编辑  收藏  举报