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框架呢,他的灵 ...
随机推荐
- Critical Expression
什么是Critical Expression 所谓Critical Expression就是一个表达式依赖的值,必须出现在这个表达式前面.比如: times (label-$) db 0 ;times ...
- 什么是NASM
什么是NASM NASM是一个汇编器的名称,全称是Netwide Assembler,支持x86与x64架构的CPU(注意不支持ARM架构). 我们知道,在x86和x64架构上有多个操作系统,比较流行 ...
- SpringBoot-Http请求工具类
一.编写请求配置类 import com.alibaba.fastjson.JSONObject; import org.springframework.context.annotation.Conf ...
- PostgreSQL世界上最先进的开源关系型数据库
PostgreSQL 的 Slogan 是 "世界上最先进的开源关系型数据库". PostgreSQL是一个功能非常强大.源代码开放的对象关系数据库系统(ORDBMS),在灵活的B ...
- C语言:如何删除在可视化网页中未可见的内容(网页txt)
我这个代码仅仅限制于在chrome浏览器中下载china daliy的网页中实现删除可视化内容,因为每个网页的超链接或者文本主内容分布不一样,但是学会了删除一个网页类型的不可视化内容之后,修改其他网页 ...
- element-plus表格添加删除行很慢
如果添加第一行或第二行就很慢,那么这个不是row-key的原因. 很有可能是nuxt的调试工具监控组件原因,可以试着把工具关了看看 devtools: { enabled: false }, 发布后不 ...
- 本地项目文件上传到git
初始化项目: git init 与服务器项目关联:git remote add origin "http://**************************/r/ruoyi.git&q ...
- Flask源码阅读
上下文篇 整个Flask生命周期中都依赖LocalStack()栈?.而LocalStack()分为请求上下文_request_ctx_stack和应用上下文_app_ctx_stack. _requ ...
- python 实现限流
固定窗口 固定窗口就是记录一个固定的时间窗口内的操作次数,操作次数超过阈值则进行限流. def fix_window_limit(redis_obj, period, max_count): &quo ...
- 详解RocketMQ消息存储原理
本文基于RocketMQ 4.6.0进行源码分析 一. 存储概要设计 RocketMQ存储的文件主要包括CommitLog文件.ConsumeQueue文件.Index文件.RocketMQ将所有to ...