python使用flask框架生成excle返回前端(包含图片、表格、表头灰色、表格加边框)
python使用flask框架生成excle文档,文档中包含图片和表格,其中表格要包含图片、表格、表头灰色、表格加边框,照片和表格不重叠。
逻辑:获得图片的高度,根据高度计算表格从第几行开始插入。
效果图:
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 | 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() |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2022-07-08 springboot 实现接收前端发来的图片和视频以及在页面上展示图片和视频