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返回前端(包含图片、表格、表头灰色、表格加边框)的更多相关文章

  1. python之Flask框架

    一.简单的Flask框架 1)flask简介 Flask 是一个 web 框架.也就是说 Flask 为你提供工具,库和技术来允许你构建一个 web 应用程序. 这个 wdb 应用程序可以使一些 we ...

  2. 使用Python的Flask框架,结合Highchart,动态渲染图表(Ajax 请求数据接口)

    参考链接:https://www.highcharts.com.cn/docs/ajax 参考链接中的示例代码是使用php写的,这里改用python写. 需要注意的地方: 1.接口返回的数据格式,这个 ...

  3. Python基于Flask框架配置依赖包信息的项目迁移部署小技巧

    一般在本机上完成基于Flask框架的代码编写后,如果有接口或者数据操作方面需求需要把代码部署到指定服务器上. 一般情况下,使用Flask框架开发者大多数都是选择Python虚拟环境来运行项目,不同的虚 ...

  4. Python的Flask框架入门-Ubuntu

    全文请见tuts code:An Introduction to Python's Flask Framework Flask是Python一个小而强大的web框架.学起来简单,用起来也容易,能够帮你 ...

  5. Python之Flask框架项目Demo入门

    Python+Flask框架项目Demo入门 本例子用到了 Flask+蓝图+Flask-Login+SQLAlchemy+WTForms+PyMySQL相关架构 Flask Web框架介绍 Flas ...

  6. Python之flask框架2

    Flask是一个Python编写的Web 微框架,让我们可以使用Python语言快速实现一个网站或Web服务.本文参考自Flask官方文档,大部分代码引用自官方文档. 安装flask 首先我们来安装F ...

  7. [Python自学] Flask框架 (1) (Flask介绍、配置、Session、路由、请求和响应、Jinjia2模板语言、视图装饰器)

    oldboy:s9day114 参考博客:https://www.cnblogs.com/wupeiqi/articles/7552008.html 一.Flask简介 1.安装Flask pip i ...

  8. Python的Flask框架开发RESTful API

    web框架选择 Django,流行但是笨重,还麻烦,人生苦短,肯定不选 web.py,轻量,但据说作者仙逝无人维护,好吧,先pass tornado,据说倡导自己造轮子,虽然是facebook开源的吧 ...

  9. Python之Flask框架使用

    Flask和Django.Bottle号称Python中的强大又简单的Web框架. Flask是一个使用Python编写的轻量级Web应用框架.基于Werkzeug WSGI工具箱和Jinja2 模板 ...

  10. Python之Flask框架一

    flask是一个使用 Python 编写的轻量级 Web 应用框架.轻巧页就意味着他比较简洁,不过见到的MTV框架还是有的,(MVC)但是最重要的还是他的可扩展性很强,对比与Django框架呢,他的灵 ...

随机推荐

  1. JDK源码阅读-------自学笔记(二十)(java.util.List初探)

    List简介 List是有序.可重复的容器. 有序:List中每个元素都有索引标记.可以根据元素的索引标记(在List中的位置)访问元素,从而精确控制这些元素. 可重复:List允许加入重复的元素.更 ...

  2. angular路由跳转并传值的多种方式

    Angular的学习使用过程中,路由跳转支撑了项目的全过程,所以路由跳转是一个很常见也是一个很容易忽略的点,,对于页面之间的跳转有着很多的问题,跳转的方式/如何携带参数跳转,下面是自己在学习过程中对a ...

  3. Python 将PowerPoint (PPT/PPTX) 转为HTML

    PPT是传递信息.进行汇报和推广产品的重要工具.然而,有时我们需要将这些精心设计的PPT演示文稿发布到网络上,以便于更广泛的访问和分享.本文将介绍如何使用Python将PowerPoint文档转换为网 ...

  4. Prism 基础知识学习(五)发布订阅

    Prism 基础知识学习(五)发布订阅 在 ViewBViewModel.cs中 1 public class ViewBViewModel : IDialogAware 2 { 3 /// < ...

  5. 解决 Https 站点请求 Http 接口服务后报 the content must be served over HTTPS 错误的问题

    问题分析 之前将自己所有的 Http 站点全部更新为 Https 站点,但是在请求后台接口服务的时候还是 Http 请求,导致部署之后,直接在控制台报 This request has been bl ...

  6. kettle从入门到精通 第四十五课 ETL之 kettle redis

    1.kettle 9.3/9.4 spoon客户端中默认是没有redis步骤的,首先想到在kettle的插件市场进行下载redis步骤. 2.可能因为网络原因,直接下载失败了.索性放弃redis原有插 ...

  7. INFINI Gateway 与华为鲲鹏完成产品兼容互认证

    何为华为鲲鹏认证 华为鲲鹏认证是华为云围绕鲲鹏云服务(含公有云.私有云.混合云.桌面云)推出的一项合作伙伴计划,旨在为构建持续发展.合作共赢的鲲鹏生态圈,通过整合华为的技术.品牌资源,与合作伙伴共享商 ...

  8. “Newtonsoft.Json”已拥有为“Microsoft.CSharp”定义的依赖项。

    安装较低版本的Newtonsoft.Json: Newtonsoft.Json官网:https://www.nuget.org/packages/Newtonsoft.Json/ Install-Pa ...

  9. LNMP单机架构

    黄金架构LNMP LNMP是网站架构初期最合适的单体架构.因为初创型技术团队对于技术的选型,需要考虑如下因素 在创业初期,研发资源有限,研发人力有限,技术储备有限,需要选择一个易维护.简单的技术架构: ...

  10. Scrapy框架(十)--增量式爬虫

    增量式爬虫 - 概念:监测网站数据更新的情况,只会爬取网站最新更新出来的数据. - 分析: - 指定一个起始url - 基于CrawlSpider获取其他页码链接 - 基于Rule将其他页码链接进行请 ...