openpyxl库根据模板生成文件api接口返回

  • openpyxl库是基于excel 2010 xlsx/xlsm文件读写的Python库(请找寻xls文件读写的用户去搜寻pandas、xlrd 和 xlwt、pyexcel等库)。安装openpyxl库:
  • # 如果是pip
    pip install openpyxl
    # 如果是conda环境
    conda install openpyxl
  • 创建工作簿和工作表(这是最基本的操作):
  • # 导包
    from openpyxl import Workbook# 创建工作簿对象
    workbook = Workbook()# 创建当前工作簿下的工作表
    ws = workbook.active# 将工作簿保存在本地
    workbook.save()
  • 接下来只讲解对合并单元格的处理:
  • 对合并单元格的处理是在每一个工作表中,每一个工作表是一个表格嘛。即工作簿、工作表、单元格之间的联系:工作簿-->多个工作表,工作表-->是一张表格,包含多个单元格。
  • 在上述代码中,我们取名第一个工作表的名称为ws,那么我们清除、插入、合并等操作都是基于这个工作表实现的。
  • from openpyxl import Workbook# 创建工作簿对象
    workbook = Workbook()# 创建当前工作簿下的工作表
    ws = workbook.active# 也可以创建一个新的工作表(暂不使用)
    new_sheet = workbook.create_sheet("NewSheet")# 合并单元格
    ws.merge_cells("A1:B2")# 合并单元格第二种
    start_row, end_row, start_column, end_column = 15, 15, 1, 4
    ws.merge_cells(start_row=start_row, end_row=end_row, start_column=start_column, end_column=end_column)# 给合并单元格插入数据,只能通过在合并范围的最左上角单元格中插入数据来实现在合并单元格擦汗如数据的操作
    ws.cell(row=start_row, column=start_column).value = value

  • 包括设置字体样式等操作
  • # 设置字体样式
    font = Font(name='宋体', size=22, color='000000', bold=True)# 设置单元格样式
    alignment = Alignment(horizontal='center', vertical='top', wrap_text=True)# 设置边框样式
    # 全黑边框
    black_border = Border(left=Side(border_style='thin', color='000000'),right=Side(border_style='thin', color='000000'),top=Side(border_style='thin', color='000000'),bottom=Side(border_style='thin', color='000000')
    )# 应用字体样式
    ws.cell(row=start_row, column=start_column).font = font# 应用单元格样式
    ws.cell(row=start_row, column=start_column).alignment = alignment# 添加边框
    for row in range(start_row, end_row + 1):for col in range(start_column, end_column + 1):ws.cell(row=row, column=col).border = cell_border

  • 但是,如果一个一个的设计样式各种,对每一个插入数据的地方都要进行这些操作是不符合代码复用的操作的,所以我们要尽可能使得代码整洁可读,那怎么做呢,毕竟每一个都要设置起始行、起始列、结束行、结束列、内容、字体格式、单元格格式、边框格式,如果确定只需要这些格式的话,我们把它们全部做成参数传递,会不会更好呢。
  • 接下来是对应的一些代码:
  • from io import BytesIOimport requests
    from flask import make_response
    from openpyxl.workbook import Workbook
    from openpyxl.styles import Font, Alignment, Border, Side
    from openpyxl.drawing.image import Imagefrom openpyxl.writer.excel import save_virtual_workbookdef get_excel(id: str = None, *args, **kwargs):'''下载导出:基本信息填报表'''# 创建excel表# 创建一个新的工作簿wb = Workbook()# 选择默认的活动工作表ws = wb.activews.title = "第1页"# 基本信息填报表: 相关信息# 执行sql语句获取你的相关信息,自己写一下,result变量接收,通过主键查询,获取单条记录# 设置字体样式和单元格样式title_font = Font(name='宋体', size=22, color='000000', bold=True)title_alignment = Alignment(horizontal='center', vertical='top', wrap_text=True)body_font = Font(name='宋体', size=12, color='000000', bold=False)body_alignment = Alignment(horizontal='center', vertical='center', wrap_text=True)# 定义边框样式# 全黑边框black_border = Border(left=Side(border_style='thin', color='000000'),right=Side(border_style='thin', color='000000'),top=Side(border_style='thin', color='000000'),bottom=Side(border_style='thin', color='000000'))# 全无边框no_border = Border(left=None,right=None,top=None,bottom=None)# 顶部无边框top_no_border = Border(left=Side(border_style='thin', color='000000'),right=Side(border_style='thin', color='000000'),top=None,bottom=Side(border_style='thin', color='000000'))image_path = Nonemerge_cell_params = []for item in result:# 标题merge_cell_params.append((1, 1, 1, 15, "基本信息填报表", title_font, title_alignment, black_border))# 姓名merge_cell_params.append((3, 5, 1, 2, "姓名", body_font, body_alignment, black_border))merge_cell_params.append((3, 5, 3, 4, item.name, body_font, body_alignment, black_border))# 性别merge_cell_params.append((3, 5, 5, 6, "性别", body_font, body_alignment, black_border))merge_cell_params.append((3, 5, 7, 8, item.sex, body_font, body_alignment, black_border))# 出生年月merge_cell_params.append((3, 4, 9, 10, "出生年月", body_font, body_alignment, black_border))merge_cell_params.append((3, 4, 11, 12, item.birthYear, body_font, body_alignment, black_border))# 照片路径image_path = item.image_pathmerge_cell_params.append((4, 8, 14, 14, " is image ", body_font, body_alignment, no_border))# 民族merge_cell_params.append((6, 6, 1, 2, "民族", body_font, body_alignment, black_border))merge_cell_params.append((6, 6, 3, 4, item.nation, body_font, body_alignment, black_border))# 处理合并单元格for index, params in enumerate(merge_cell_params):start_row, end_row, start_column, end_column, value, font, align, cell_border = paramsws.merge_cells(start_row=start_row, end_row=end_row, start_column=start_column, end_column=end_column)# 是否为图片if value and isinstance(value, str) and "is image" in value:response = requests.get(url=image_path)if response.status_code == 200:# 创建响应对象image_data = BytesIO(response.content)ws.add_image(image_data, "N4")else:logger.error("未找到照片信息!")else:# 设置值在合并区域的第一个单元格ws.cell(row=start_row, column=start_column).value = value# ws.cell(row=start_row, column=start_column).value = valueif font:# 应用字体样式ws.cell(row=start_row, column=start_column).font = fontif align:# 应用对齐样式ws.cell(row=start_row, column=start_column).alignment = align# 添加边框for row in range(start_row, end_row + 1):for col in range(start_column, end_column + 1):ws.cell(row=row, column=col).border = cell_border# 设置行高自适应内容ws.row_dimensions[start_row].auto_size = Truefile_name = "测试.xlsx"content = save_virtual_workbook(wb)resp = make_response(content)resp.headers["Content-Disposition"] = 'attachment; filename={}.xlsx'.format(file_name.encode().decode('latin-1'))resp.headers['Content-Type'] = 'application/x-xlsx'return resp

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

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

相关文章

leetcode 125. 验证回文串

题目: 如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。 字母和数字都属于字母数字字符。 给你一个字符串 s,如果它是 回文串 ,返回 true &…

FreeRTOS——消息队列

学习目标 理解队列的概念掌握消息队列开发流程掌握基本数据类型消息队列掌握复杂数据类型消息队列学习内容 队列 队列(Queue)是一种数据结构,用于存储和管理元素的线性集合。它遵循先进先出(FIFO,First-In-First-Out)的原则,即最先进入队列的元素将首先被移出队列。 …

阅读文献-胃癌

写在前面 今天先不阅读肺癌的了,先读一篇胃癌的文章 文献 An individualized stemness-related signature to predict prognosis and immunotherapy responses for gastric cancer using single-cell and bulk tissue transcriptomes IF:4.0 中科院分区:2区 医学…

JFinal综合信息管理系统

项目地址:mendianyu/AdvancedManagement: 综合信息管理系统 (github.com) 项目演示地址:软件构造大作业演示视频_哔哩哔哩_bilibili 项目功能 一:基于Jfinal构建信息管理系统,要求包含用户管理,翻译业务模块管理&…

初识Spring

1.Spring官网: 2.官网学习的顺序:先学Spring,再学SpringBoot,然后SpringCloud,Spring Cloud Data Flow。 3.Spring Framework界面: 4.github上的源代码: 5.进入使用说明文档: 主要是根据这个进行学习的。 6.我们用mave…

单例模式实现案例

单例模式实现案例 文章目录 单例模式实现案例**饿汉式****枚举饿汉式****懒汉式****双检锁懒汉式****内部类懒汉式** 单例模式概念: 单例模式是一种创建型设计模式,确保一个类只有一个实例,并提供全局访问点。这对于需要在系统中共享某个资源…

Textract python 很好用的库

如何在Python中使用Textract的文章: 在Python中使用Textract Textract是一个强大的文本提取工具,它可以从各种类型的文件中提取文本,包括PDF,Word文档,PowerPoint演示文稿,JPEG图像等。以下是如何在Python…

如何配置一台高性能的IBM服务器

在当今信息化时代,服务器作为企业数据存储、处理和传输的核心设备,其性能的优劣直接关系到企业的运营效率和安全性。而IBM作为全球领先的企业级服务器提供商,其产品广泛应用于各行各业。本文将为你详细介绍如何配置一台高性能的IBM服务器&…

Linux Debian12使用VSCode和Python搭建flask开发环境

一、安装VSCode 在Linux Debian12系统上安装VSCode教程可以参考网上相关教程。 二、安装Python 打开VSCode,安装python和python扩展包,如下图所示: 三、创建Python虚拟环境 1.新建文件夹testFlask 2.用vscode打开文件夹testFlask&#xf…

QT中线程的退出分析

QT中线程的退出分析 前言开发环境代码的整改第一次修改第一次修改引起的问题问题原因分析解决方法第二次修改前言 软件实际开发过程中有好几处要实现这么一个功能:PC端软件“应用程序重启” ,本来这是一段比较简单的事情,但是因为重启软件报通信异常(错误日志中有记录通信…

前端 TS 语法继承 多态 修饰符 readonly 抽象类 ts 基本写法 可选 剩余参数 函数重载 接口 类(3)

继承 继承之间的叫法 A类继承了B类,那么A类叫做子类,B类叫成基类 子类 ---》派生类 基类 ---》超类(父类) // 继承之间的叫法 // A类继承了B类,那么A类叫做子类,B类叫成基类 // 子类 ---》派生类 // 基类 …

阅读笔记lv.1

阅读笔记 sql中各种 count结论不同存储引擎计算方式区别count() 类型 责任链模式常见场景例子(闯关游戏) sql中各种 count 结论 innodb count(*) ≈ count(1) > count(主键id) > count(普通索引列) > count(未加索引列)myisam 有专门字段记录…

Open3D 计算点云空间分布密度(16)

Open3D 计算点云空间分布密度(16) 一、算法介绍二、算法实现1.代码2.结果一、算法介绍 使用八叉树来估计点云密度可以通过统计每个体素内部的点的数量来实现。Open3D库中的VoxelGrid数据结构可以帮助完成这一任务。 二、算法实现 1.代码 代码如下(示例): import open3…

langchain-Agent-Agent类型和自定义Agent(代码)

本篇主要用于记忆Agent相关代码,不对各个类型Agent的功能和原理进行描述。 文章目录 代理类型reactplan&executestructured-chat 自定义代理 代理类型 react from langchain.agents import load_tools from langchain.agents import initialize_agent from l…

计算机体系结构----缓存一致性/多处理机

本文严禁转载,仅供学习使用。参考资料来自中国科学院大学计算机体系结构课程PPT以及《Digital Design and Computer Architecture》、《超标量处理器设计》、同济大学张晨曦教授资料。如有侵权,联系本人修改。 本文衔接上文计算机体系结构----存储系统 …

python爬虫,验证码识别,携带cookies请求

古诗词网案例!!! 识别验证码类型: # 此处用到的图片验证码识别网址为:http://ttshitu.com/ 图鉴 import base64 import json import requests # 一、图片文字类型(默认 3 数英混合): # 1 : 纯数字 # 1001:纯数字2 # 2 : 纯英文 # 1002:纯英文2 # 3 : 数英混合 # 1003:…

用通俗易懂的方式讲解:大模型微调方法总结

大家好,今天给大家分享大模型微调方法:LoRA,Adapter,Prefix-tuning,P-tuning,Prompt-tuning。 文末有大模型一系列文章及技术交流方式,传统美德不要忘了,喜欢本文记得收藏、关注、点赞。 文章目录 1、LoRA…

轻松查看WiFi密码的神奇脚本,让你忘记密码也不再是问题

说在前面 🎈本文介绍了一个便捷的脚本,可以帮助你获取电脑中保存的所有Wi-Fi网络的密码。不再需要担心忘记Wi-Fi密码或手动查找密码的麻烦,只需运行脚本即可一键获取。 一、引言 互联网的普及让我们离不开Wi-Fi网络,但忘记密码时…

怎么安装es、kibana(单点安装)

1.部署单点es 1.1.创建网络 因为我们还需要部署kibana容器,因此需要让es和kibana容器互联。这里先创建一个网络: docker network create es-net1.2.加载镜像 这里我们采用elasticsearch的7.12.1版本的镜像,这个镜像体积非常大&#xff0c…

用C语言采集亚马逊amazon产品数据

上一篇文章我是用C写的一个爬取亚马逊的爬虫程序,相信大家已经看过了,这次呢,我依然使用C语言来写一个爬虫,大体上思路是和之前一样,只是支持的库以及语法有些区别,具体的呢我会一一解释出来,方…