首页 > 编程语言 >python使用flask框架生成excle返回前端(包含图片、表格、表头灰色、表格加边框)

python使用flask框架生成excle返回前端(包含图片、表格、表头灰色、表格加边框)

时间:2024-07-08 19:08:38浏览次数:21  
标签:openpyxl 表格 python image base64 表头 cell import row

  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()

 

标签:openpyxl,表格,python,image,base64,表头,cell,import,row
From: https://www.cnblogs.com/yclh/p/18290577

相关文章

  • 深度学习全景进阶:最新Python深度学习进阶与前沿应用
    近年来,伴随着以卷积神经网络(CNN)为代表的深度学习的快速发展,人工智能迈入了第三次发展浪潮,AI技术在各个领域中的应用越来越广泛。系统掌握AI新理论、新方法及其Python代码实现。注意力机制、Transformer模型(BERT、GPT-1/2/3/3.5/4、DETR、ViT、SwinTransformer等)、生成式模型(变......
  • Apispec,一个用于生成 OpenAPI(Swagger)规范的 Python 库
    目录01什么是Apispec?          为什么选择Apispec?安装与配置02Apispec的基本用法        生成简单的API文档1、创建Apispec实例2、定义API路由和视图3、添加路径到Apispec集成Flask和Apispec1、安装Flask和Flask-......
  • Python排序,你用对了吗?一文教你sorted和sort的正确姿势!
    目录1、sorted基础用法......
  • python批量处理文件保存到Excel文件中
            获取到了电脑所有软件,但是几百号人员,手动处理太麻烦,用python先读取文件内容,再把内容和文件名和一起保存到Excel表中,好统一处理。fromosimportpath,listdirimportchardetimportpandasaspdimporttkinterastkfromtkinterimportfiledialogfro......
  • Python运算符
    1.算数运算符     算术运算符包括:“+,-,*,/,%,//,**”。        “%”为求余,通常用来判定奇偶或倍数;        “//”为整除,用于返回整数;        “**”为次方,优先级最高。a,b=3,9print(a+b,b-a,a*b,b/a)print(a**b)print(a**b/a)print......
  • QT中调用python中的函数
    1.创建py文件例如名为“python_script.py”的python文件:#python_script.pydefgreet(name):return"Hello,"+name+"!" 2.Qt的pro文件中包含python的头文件和库INCLUDEPATH+=python解释器的安装目录\includeLIBS+=-Lpython解释器的安装目录\libs-lpyt......
  • python C API常用函数介绍
    PythonCAPI提供了一组函数和宏,允许开发者在C或C++代码中与Python解释器进行交互。以下是一些常用的PythonCAPI函数和宏:1.**初始化和结束Python解释器**:-`Py_Initialize()`:初始化Python解释器。-`Py_Finalize()`:结束Python解释器。-`Py_SetProgramNam(cons......
  • 使用Python下载Bing每日一图并设置为壁纸
    简介Bing搜索引擎每天都会展示一张精美的图片,这些图片不仅美丽,而且常常包含有趣的信息。想象一下,每天打开电脑,都能看到这样的美景,是不是很棒呢?本文将介绍如何使用Python脚本自动化下载Bing每日一图,并将其设置为我们的桌面壁纸。环境准备在开始之前,请确保你的计算机上安装了Pyth......
  • vue table+form 表格+表单动态增加一行 数据 并进行数据校验
    本功能主要实现表格加表单并且在表格中添加一行新数据,进行数据表单校验1.使用el-form将el-table包裹起来实际代码不方便展现,大概是这个意思也可以参考element中的表单的动态增加案例地址:Element-Theworld'smostpopularVueUIframework<el-form:model="Form"ref=......
  • Python OpenCv对规则物体进行实时检测
    前言很多情况需要对物体进行检测,常规的方法也有很多种。但是检测出来的边缘一般都是非常多,结果也是非常杂乱的,显然这种结果不是我们想要的。如果颜色相较于背景非常鲜艳的可以调节hsv阈值再进行检测,如果是一直在运动的物体可以通过帧差法进行物体检测,还有很多高深的算法也可以进......