python使用flask框架生成excle返回前端(包含图片、表格、表头灰色、表格加边框)
python使用flask框架生成excle文档,文档中包含图片和表格,其中表格要包含图片、表格、表头灰色、表格加边框,照片和表格不重叠。
逻辑:获得图片的高度,根据高度计算表格从第几行开始插入。
效果图:
代码:
import openpyxl
from openpyxl.styles import PatternFill
from openpyxl.drawing.image import Image
from flask import Flask, send_file, request
import base64
import io
from io import BytesIO
from PIL import Image as PillowImage
import math app = Flask(__name__) @app.route('/download-excel', methods=['POST'])
def download_excel():
base64_swdt = request.form.get('base64') # 获取思维导图高度
# 解码base64字符串为图片数据
decoded_string = base64.b64decode(base64_swdt)
image_temp = BytesIO(decoded_string)
image = PillowImage.open(image_temp)
# 获取图片的高度
height = image.size[1]
print("图片高度:", height)
temp_num = math.ceil(height / 17.2) # 添加表格数据
data = [
['姓名', '年龄', '性别'],
['张三21312312312', 25, '男1111111111111'],
['李四', 30, '女'],
['王五', 28, '男11111111111111111111111111111111111111']
] # 创建一个新的Excel工作簿
workbook = openpyxl.Workbook()
sheet = workbook.active # 指定从第几行开始插入数据
start_row = int(temp_num) # 插入空行
for _ in range(start_row - 1):
sheet.append([]) for row in data:
sheet.append(row) # 调整列宽以适应内容
for column in sheet.columns:
max_length = 0
column = [cell for cell in column]
for cell in column:
try:
if len(str(cell.value)) > max_length:
max_length = len(cell.value)
except:
pass
adjusted_width = (max_length + 2) * 1.2
sheet.column_dimensions[column[0].column_letter].width = adjusted_width # 添加边框
border = openpyxl.styles.Border(left=openpyxl.styles.Side(style='thin'),
right=openpyxl.styles.Side(style='thin'),
top=openpyxl.styles.Side(style='thin'),
bottom=openpyxl.styles.Side(style='thin')) # 指定起始行和结束行
end_row = len(data) + start_row - 1 for row in range(start_row, end_row + 1):
for cell in sheet[row]:
cell.border = border # 设置表头颜色为灰色
green_fill = PatternFill(start_color="C0C0C0", end_color="C0C0C0", fill_type="solid")
for cell in sheet[start_row]:
cell.fill = green_fill # 插入图片
# 将base64编码的图片解码为字节流
image_data = base64.b64decode(base64_swdt)
image_stream = io.BytesIO(image_data)
# 插入图片到工作表
img = Image(image_stream)
sheet.add_image(img, 'A1') # 将图片插入到A1单元格 # 保存工作簿到临时文件
temp_file = "temp_excel.xlsx"
workbook.save(temp_file) # 将临时文件发送给前端
return send_file(temp_file, as_attachment=True, download_name='example.xlsx',
mimetype='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
if __name__ == '__main__':
app.run()
python使用flask框架生成excle返回前端(包含图片、表格、表头灰色、表格加边框)的更多相关文章
- python之Flask框架
一.简单的Flask框架 1)flask简介 Flask 是一个 web 框架.也就是说 Flask 为你提供工具,库和技术来允许你构建一个 web 应用程序. 这个 wdb 应用程序可以使一些 we ...
- 使用Python的Flask框架,结合Highchart,动态渲染图表(Ajax 请求数据接口)
参考链接:https://www.highcharts.com.cn/docs/ajax 参考链接中的示例代码是使用php写的,这里改用python写. 需要注意的地方: 1.接口返回的数据格式,这个 ...
- Python基于Flask框架配置依赖包信息的项目迁移部署小技巧
一般在本机上完成基于Flask框架的代码编写后,如果有接口或者数据操作方面需求需要把代码部署到指定服务器上. 一般情况下,使用Flask框架开发者大多数都是选择Python虚拟环境来运行项目,不同的虚 ...
- Python的Flask框架入门-Ubuntu
全文请见tuts code:An Introduction to Python's Flask Framework Flask是Python一个小而强大的web框架.学起来简单,用起来也容易,能够帮你 ...
- Python之Flask框架项目Demo入门
Python+Flask框架项目Demo入门 本例子用到了 Flask+蓝图+Flask-Login+SQLAlchemy+WTForms+PyMySQL相关架构 Flask Web框架介绍 Flas ...
- Python之flask框架2
Flask是一个Python编写的Web 微框架,让我们可以使用Python语言快速实现一个网站或Web服务.本文参考自Flask官方文档,大部分代码引用自官方文档. 安装flask 首先我们来安装F ...
- [Python自学] Flask框架 (1) (Flask介绍、配置、Session、路由、请求和响应、Jinjia2模板语言、视图装饰器)
oldboy:s9day114 参考博客:https://www.cnblogs.com/wupeiqi/articles/7552008.html 一.Flask简介 1.安装Flask pip i ...
- Python的Flask框架开发RESTful API
web框架选择 Django,流行但是笨重,还麻烦,人生苦短,肯定不选 web.py,轻量,但据说作者仙逝无人维护,好吧,先pass tornado,据说倡导自己造轮子,虽然是facebook开源的吧 ...
- Python之Flask框架使用
Flask和Django.Bottle号称Python中的强大又简单的Web框架. Flask是一个使用Python编写的轻量级Web应用框架.基于Werkzeug WSGI工具箱和Jinja2 模板 ...
- Python之Flask框架一
flask是一个使用 Python 编写的轻量级 Web 应用框架.轻巧页就意味着他比较简洁,不过见到的MTV框架还是有的,(MVC)但是最重要的还是他的可扩展性很强,对比与Django框架呢,他的灵 ...
随机推荐
- MySQL:根据指定日期加365天,当前时间距离明年的指定的日期还有多少天-SQL
一.数据准备 /* Navicat Premium Data Transfer Source Server : songweipeng Source Server Type : MySQL Sourc ...
- angular自定义验证器实现所遇到的问题
1:返回值问题 校验器 2:返回值类型 3:创建自定义指令配置注意 1:校验器 回过头来看一下表单校验的校验器.校验器共有两种,同步校验和异步校验,验证器函数接受一个control,然后返回一组错误对 ...
- ❤️🔥 Solon Cloud Event 新的事务特性与应用
1.Solon Cloud Event? 是 Solon 分布式事件总线的解决方案.也是 Solon "最终一致性"分布式事务的解决方案之一 2.事务特性 事务?就是要求 Even ...
- linux各个目录详细说明
在linux中一切皆文件,每个目录均有自己特定的作用,下面进行详细说明. 目录 说明 / 处于linux系统树形结构的最顶端,它是linux文件系统的入口,所有的目录.文件.设备都在 / 之下 /bi ...
- Hive笔记01
hive如何实现两个区域人均利润一样的时候,排名一样,出现1.2.2.3.4,这种重复排名的情况? 方案一 在Hive中,可以使用窗口函数和排名函数来实现重复排名的情况.具体步骤如下: 使用窗口函数计 ...
- Java8新特性——接口静态方法
概述 从Java8开始接口发生两个大的改变,一个是引入了default关键字,另个一个就是允许静态方法的存在. default关键字在<Java8新特性default关键字,引出Java多继承问 ...
- Django模板templates
1.模板文件的路径配置 2.模板中变量替换 3.变量渲染之深度查询 4.内置过滤器 过滤器的语法: {{obj|过滤器名称:过滤器参数}} 内置过滤器: 过滤器例子: 5.注释 6.多行注释 7.if ...
- 音视频-YUV数据格式
一.YUV格式 1)kCVPixelFormatType_420YpCbCr8PlanarFullRange = 'f420' 对应YUV I420格式 2)kCVPixelFormatType_42 ...
- 【VMware vSphere】使用vSphere Lifecycle Manager(vLCM)管理独立主机和集群的生命周期。
vSphere Lifecycle Manager(vLCM)是 vSphere 7 中引入的一项新功能,它提供了一种集中式.自动化和简单性的方式来管理和升级 vSphere 基础架构组件(如vCen ...
- Redux之combineReducers方法
Redux 提供了一个combineReducers方法,用于 Reducer 的拆分.你只要定义各个子 Reducer 函数,然后用这个方法,将它们合成一个大的 Reducer. import { ...