Python 挖坑式填充Excel模板内容(包括页眉/SheetName/logo)

纵览

  • Python处理Excel的方式--解压缩方式
      • 1、导包
      • 2、对模板文件进行解压缩
      • 3、对解压缩后文件层级进行介绍
      • 4、准备需要载入的数据
      • 5、模板挖坑
      • 6、运行替换代码
      • 7、压缩文件
      • 8、生成文件
      • 9、完成代码
      • 10、可能遇到的问题
  • 结语

Python处理Excel的方式–解压缩方式

在处理Excel中过程中,总是会遇到往已经存在的模板中填写特殊信息,一开始我使用的是常见的 openpyxl包,但是在我修改页眉中的字符时,发生页眉中的logo丢失现象,然后我就百度、ChatGPT搜索,最终找到了一种方法,那就是解压缩xlsx文件,然后修改内容,再进行压缩的方式实现修改内容的功能,利用的zipfile包,当然这个包应该是自带的吧,我使用的是Anaconda

1、导包

其中部分包没有用到

import zipfile
import os
import shutil
from openpyxl import load_workbook
import pandas as pd

2、对模板文件进行解压缩

# 模板Excel文件路径
excel_path = r'D:\MyPython\程序\模版.xlsx'
# 解压缩 Excel 文件
with zipfile.ZipFile(excel_path, 'r') as zip_ref:zip_ref.extractall('excel_temp')

3、对解压缩后文件层级进行介绍

运行上述代码,会在当前目录下,生成一个文件夹excel_temp,目录结构如下:
在这里插入图片描述
其中,主要关注的是xl文件夹里面的文件,文件内容意思如下:

路径文件名功能
excel_temp/xl/sharedStrings.xmlExcel中的所有单元格内容,除页脚、页眉外,所有的信息都在这里
excel_temp/xl/workbook.xmlsheetname修改位置
excel_temp/xl/worksheets/styles.xml修改单元格的样式
excel_temp/xl/worksheets/sheet?.xml页眉页脚修改区域修改位置,每个sheet对应1个文件
excel_temp/xl/drawings/_rels/drawing1.xml.rels页眉页脚修改区域修改位置,每个sheet对应1个文件图片路径的,如果模板中已经存在图片的,如果想要换个图标,可以通过覆盖下面的图片就行
excel_temp/xl/media/image?.png将新的文件覆盖掉对应的png文件就行,可以利用shutil.copy(替换图片路径,要被替换的路径)

4、准备需要载入的数据

替换模板数据,最重要的是先将你要替换的数据整理好,然后再在模板中相应的位置挖空,填充就行,我的数据格式是excel,如下:A列是替换名称,B到D列是数据,然后运行代码会生成填入B、C、D对应的数据的三个文件;
在这里插入图片描述

5、模板挖坑

打开模板文件,将需要替换的位置成相应的字符,比如:现在我想要替换发光点数量,输入发光点数量替换值,这个可以根据自己实际情况更换;
在这里插入图片描述

6、运行替换代码

excel_path是模板路径,soure_file数据文件;

data_df = pd.read_excel(soure_file,sheet_name=0) #,usecols=[0,1]
# 将某一列(例如'index_column')设为索引
data_df.set_index('字段', inplace=True)
# 将DataFrame转换为字典
data_dict = data_df.to_dict()# 删除值为NaN的键值对
data1_dict = {col: {index: value for index, value in data_dict[col].items() if pd.notna(value)} for col in data_dict}
# 修改页眉 文件
for keya in data1_dict.keys():# 解压缩 Excel 文件with zipfile.ZipFile(excel_path, 'r') as zip_ref:zip_ref.extractall('excel_temp')# 修改相关 XML 文件content_path = 'excel_temp/xl/sharedStrings.xml'workbook_path = 'excel_temp/xl/workbook.xml'for fm in os.listdir('excel_temp/xl/worksheets'):if '.xml' in fm:with open(f'excel_temp/xl/worksheets/{fm}', 'r+') as f:header_footer_xml = f.read()for key,value in data1_dict[keya].items():header_footer_xml = header_footer_xml.replace(key+'替换值', str(value))f.seek(0)f.write(header_footer_xml)f.truncate()# 修改内容 文件with open(content_path, 'r+') as f:header_footer_xml = f.read()for key,value in data1_dict[keya].items():header_footer_xml = header_footer_xml.replace(key+'替换值', str(value))f.seek(0)f.write(header_footer_xml)f.truncate()# 修改类似:sheetname 这样的字符# 修改Sheetname文件with open(workbook_path, 'r+') as f:header_footer_xml = f.read()header_footer_xml = header_footer_xml.replace("SHEETNAME", data1_dict[keya]['SheetName'].replace('/',''))f.seek(0)f.write(header_footer_xml)f.truncate()

7、压缩文件

将修改后的文件,重新压缩,并且删除临时文件夹excel_temp

# 重新压缩 Excel 文件
with zipfile.ZipFile(data1_dict[keya]['Name'].replace('/','')+'.xlsx', 'w') as zip_ref:for folder_name, subfolders, filenames in os.walk('excel_temp'):for filename in filenames:file_path = os.path.join(folder_name, filename)arcname = os.path.relpath(file_path, 'excel_temp')zip_ref.write(file_path, arcname)
# 删除临时文件夹
shutil.rmtree('excel_temp')

8、生成文件

运行完成后,会在当前目录下生成对应的文件,如果你想要放在其他路径可以修改data1_dict[keya]['Name'].replace('/','')+'.xlsx'这个位置的代码,利用os.path.join()进行路径拼接即可。

9、完成代码

文件存在关键信息,我就不展示了,代码如下:

import zipfile
import os
import shutil
from openpyxl import load_workbook
import pandas as pd
# 修改页眉 文件
def get_file(excel_path, soure_file):data_df = pd.read_excel(soure_file,sheet_name=0) #,usecols=[0,1]# 将某一列(例如'index_column')设为索引data_df.set_index('序列', inplace=True)# 将DataFrame转换为字典data_dict = data_df.to_dict()# 删除值为NaN的键值对data1_dict = {col: {index: value for index, value in data_dict[col].items() if pd.notna(value)} for col in data_dict}for keya in data1_dict.keys():# 解压缩 Excel 文件with zipfile.ZipFile(excel_path, 'r') as zip_ref:zip_ref.extractall('excel_temp')# 修改相关 XML 文件content_path = 'excel_temp/xl/sharedStrings.xml'workbook_path = 'excel_temp/xl/workbook.xml'for fm in os.listdir('excel_temp/xl/worksheets'):if '.xml' in fm:with open(f'excel_temp/xl/worksheets/{fm}', 'r+') as f:header_footer_xml = f.read()for key,value in data1_dict[keya].items():header_footer_xml = header_footer_xml.replace(key+'替换值', str(value))f.seek(0)f.write(header_footer_xml)f.truncate()# 修改内容 文件with open(content_path, 'r+') as f:header_footer_xml = f.read()for key,value in data1_dict[keya].items():header_footer_xml = header_footer_xml.replace(key+'替换值', str(value))f.seek(0)f.write(header_footer_xml)f.truncate()# 修改类似:这样的字符# 修改Sheetname文件with open(workbook_path, 'r+') as f:header_footer_xml = f.read()header_footer_xml = header_footer_xml.replace("SHEETNAME", data1_dict[keya]['SheetName'].replace('/',''))f.seek(0)f.write(header_footer_xml)f.truncate()# 重新压缩 Excel 文件with zipfile.ZipFile(data1_dict[keya]['产品类别'].replace('/','')+'.xlsx', 'w') as zip_ref:for folder_name, subfolders, filenames in os.walk('excel_temp'):for filename in filenames:file_path = os.path.join(folder_name, filename)arcname = os.path.relpath(file_path, 'excel_temp')zip_ref.write(file_path, arcname)# 删除临时文件夹shutil.rmtree('excel_temp')
excel_path = r'D:\MyPython\程序\Nan_Czy\流程单自动生成\模版.xlsx'
soure_file = r'D:\MyPython\程序\Nan_Czy\流程单自动生成\关键信息清单.xlsx'
get_file(excel_path, soure_file)

10、可能遇到的问题

  • 读取文件存在问题,需要在对应位置加上:encoding='utf-8'
  • 打开文件失败,肯定是替换的字符存在问题,需要一一排查;

结语

好的,本次遇到的问题已经解决并且记录下来了,希望能够帮助你!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/35436.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《人人都是产品经理》:项目的坎坷一生

《人人都是产品经理》:项目的坎坷一生 产品VS项目产品经理和项目经理 一切项目从kick off 开始工作量预估Kick Off的大致也就15分钟 写文档咯UML图用例文档UCdemo也得做 需求活在项目中bug等级有多高bug流转过程 以终为始 产品VS项目 项目定义:是只会进…

怎么压缩pdf文件大小,如何压缩pdf文件大小

pdf文件怎么压缩?在当下这个信息爆炸的时代,无论是在工作场所还是校园中,我们经常会面临需要处理大文件的情况,而PDF格式作为一种保留文档结构和布局完整性的理想选择,有时候pdf文件太大,因此,对…

typec密封胶防水用什么胶好?

typec密封胶防水用什么胶好? 对于Type-C连接器的防水密封,行业内普遍推荐使用单组份环氧型热固化胶。这种胶水具有以下优点,使其成为Type-C防水密封的理想选择: 粘稠度易于调整:这有助于胶水在点胶过程中更好地渗透到T…

2024年二级建造师机电工程专业考试题库分享。

1.调查表法通常与()结合使用,以便更快地发现问题原因。 A.经验法 B.分层法 C.样本调查法 D.对比分析法 答案:B 解析:题干内容提示调查表法往往会与分层法结合起来应用,故B选项正确。 2.在质量统计分…

压缩图片png格式该怎么操作?试试下面这3个图片压缩工具吧

png是经常用于储存图片的一种格式,随着现在图片在日常工作和生活中的广泛使用,在很多的使用场景中都有应用。png的图片质量高而且支持无损压缩,在缩小图片的时候不会因为压缩而影响图片的清晰度,更适合在网上的存储、分享或者传输…

论文阅读MVBench: A Comprehensive Multi-modal Video Understanding Benchmark

摘要(Abstract): 论文介绍了MVBench,这是一个全新的多模态视频理解基准测试,旨在评估多模态大型语言模型(MLLMs)在视频理解方面的能力。 目前许多基准测试主要集中在静态图像任务的空间理解上,而忽视了动…

c++进程间通信--zeromq

ZeroMQ(也写作 MQ、0MQ 或 zmq)是一个高性能的异步消息队列库,提供了一种灵活的方式来实现进程间通信(IPC)以及网络通信。在C中使用ZeroMQ进行进程间通信非常直观和高效。zmq的通信模式如下: 下面先说明请求…

第 11 课:组件介绍与自定义开发

本讲主要介绍了隐语的组件标准、已有的组件能力以及进一步的自定义开发流程。经过本讲的学习,可以为将隐语集成到任意调度系统,基于Kusica/SecretPad进行二次开发,以及参与隐语开放标准共建建立基础。 一、隐语开放标准 隐语提出的适用于隐私…

证件照制作工具有哪些?这6个帮你自制证件照

许多人可能认为,制作一张符合标准要求的证件照,必须亲自前往照相馆。 然而,事实上,我们完全可以使用手机或电脑上的证件照制作app,自己轻松完成证件照的制作。无论是更换背景颜色,还是调整照片尺寸&#x…

【ARM】Ulink不同的系列对于芯片的支持和可以支持keil软件

【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 了解不同版本的ULINK可以支持的芯片架构,和ULINK可以和哪个系列的keil软件进行在线调试 2、 问题场景 用于了解不同ULINK仿真器对于芯片的支持是不一样的,并不是ULINK可以支持所有的keil软件…

2024系统分析师考试总结

考试缘由 我自己在毕业不久就考过了中级的软件设计师,这几年换到外企后事情不多,今年初定计划的时候就想着不如考个系统分析师吧。为什么选这个类别呢?按道理我主做程序开发,如果去考系统架构师通过率可能会大一些,但…

【Uniapp微信小程序】图片左右分割/分割线切割图片/图片批量分割线切割

特别说明:本文章因业务组件功能,不完全开放/暂vip可见,有需要者留言找博主! ps:注意!!本效果为图片分割切割!!不是文档切割!!图片仅供参考! 效果图 父组件 / 上传图片页面(index) 写一个上传按钮即可,事件方法: uni.chooseMessageFile({extension: [".j…

Unity | Shader基础知识(第十六集:简单的全息扫描效果)

目录 一、前言 二、准备模型 三、 场景准备 四、代码准备 五、透明度设置 六、补充介绍 1.Pass语法介绍 2.ColorMask 七、作者的碎碎念 一、前言 这节课的内容是接着弧形边缘光的效果之后做的。 Unity | Shader基础知识(第十四集:简单效果练习)_unity shade…

idea或vscode支持vue语法,ts可解析*.vue

一、ide不能解析vue文件 刚开始导入时,在vscode中的vue文件中内容都是灰色的 ide不能解析vue解决方法: 1.idea或webstorm安装vue.js插件 2.在vscode中 vue2.0的项目安装vetur插件vue3.0及以上的项目安装Vue-official插件(之前是Volar&…

PC XMind v24 解锁版安装教程 (全球领先的商业思维导图软件)

前言 XMind 是一款专业的全球领先的商业思维导图软件,在国内使用广泛,拥有强大的功能、包括思维管理、商务演示、与办公软件协同工作等功能。它采用全球先进的Eclipse RCP软件架构,是集思维导图与头脑风暴于一体的可视化思考工具&#xff0c…

mysql GROUP_CONCAT分组连接

文章目录 GROUP_CONCAT 分组连接GROUP_CANCAT 的使用分班级列出名单分班级列出名单并包含显示性别组合IFNULL组合IF组合case when GROUP_CONCAT 分组连接 准备的数据示例 CREATE TABLE students (id int(11) NOT NULL AUTO_INCREMENT,name varchar(20) DEFAULT NULL,classNa…

Rust监控可观测性

可观测性 在监控章节的引言中,我们提到了老板、前端、后端眼中的监控是各不相同的,那么有没有办法将监控模型进行抽象、统一呢? 来简单分析一下: 业务指标实时展示,这是一个指标型的数据( metric )手机 APP 上传的数…

Android简介-历史、API等级与体系结构

1. Android简介 Android是一种基于Linux内核的自由及开放源代码的操作系统。最初是由安迪鲁宾(Andy Rubin)开发的一款相机操作系统。2005年8月被Google收购。2007年11月,Google与84家硬件制造商、软件开发商及电信营运商组建开放手机联盟共同研发改良Android系统。…

博途(TIA Portal)自动化工程软件下载安装,TIA Portal V18软件安装包获取

博途(TIA Portal)不仅仅是一款自动化工程软件,它更是西门子自动化领域的璀璨明珠。 它能够将西门子的所有自动化产品无缝集成在一起,无论是PLC、人机界面,还是伺服系统、马达、变频器、网络组件等,博途都能…

餐饮行业气体泄露风险预警:可燃气体报警器的校准检测策略

在餐饮行业中,使用天然气、液化石油气等可燃气体作为烹饪能源是普遍现象。 然而,气体泄露问题时常威胁着餐饮场所的安全,一旦发生泄露,可能导致火灾、爆炸等严重事故。 因此,为了确保餐饮场所的安全,安装…