新手进阶Python:用Flask搭办公数据看板,浏览器随时看报表

大家好!我是CSDN的Python新手博主~ 上一篇我们给办公助手加了定时功能,能自动生成销售报表并发送邮件,但很多小伙伴反馈“每天的报表文件存在电脑里,找历史数据要翻文件夹,领导想看汇总数据也不方便”。今天就带来超落地的新手实战项目——用Flask搭建办公数据可视化看板!

本次用Python轻量Web框架Flask,把定时任务生成的Excel数据、销售额图表整合到网页中,实现3大核心功能:实时展示当日销售汇总数据、按日期查询历史报表、网页嵌入可视化图表。不用部署到服务器,本地运行后,同一局域网内的电脑(比如领导的电脑、同事的电脑)都能通过浏览器访问,数据分享和查看效率翻倍!全程代码复用之前的办公功能,注释详细,新手复制就能搭建,轻松从“文件式管理”升级到“网页式看板”~

一、本次学习目标

  1. 掌握轻量Web框架Flask的基础使用(路由配置、模板渲染、静态文件加载);

  2. 学会将Excel数据、matplotlib图表整合到Web页面,实现数据可视化展示;

  3. 理解“本地Web服务”的运行逻辑,实现局域网内数据共享;

  4. 掌握网页中日期筛选功能的实现,支持历史报表查询;

  5. 能将看板与之前的定时任务联动,实现“自动生成数据→网页实时更新”。

二、前期准备

  1. 安装核心依赖库

安装Flask框架

pip install flask -i https://pypi.tuna.tsinghua.edu.cn/simple

确保之前的依赖库已安装(openpyxl、matplotlib)

pip install openpyxl matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple

  1. 准备数据与文件结构

办公数据看板/ # 主文件夹
├─ app.py # Flask核心代码(我们要写的)
├─ static/ # 静态文件文件夹(放图表、css样式)
│ └─ charts/ # 存放定时任务生成的图表
├─ templates/ # 模板文件夹(放网页HTML文件)
│ └─ dashboard.html # 看板网页(我们要写的)
└─ 每日销售报表/ # 定时任务生成的Excel报表
└─ 当日销售筛选结果.xlsx
└─ 2026-01-08销售筛选结果.xlsx # 历史报表(按日期命名)

关键:修改之前的定时任务代码,让生成的Excel和图表按“日期”命名(比如“2026-01-08销售筛选结果.xlsx”),这样后续才能按日期查询历史数据!文末会补充修改方法~

三、实战:搭建办公数据可视化看板

  1. 核心功能拆解
  • 首页展示:自动加载当日销售汇总数据(各部门销售额、总销售额、达标订单数);

  • 图表展示:网页嵌入当日销售额柱状图,支持放大查看;

  • 历史查询:通过日期选择器,查询任意一天的销售数据和图表;

  • 数据导出:支持下载当前查看日期的Excel报表文件;

  • 局域网共享:本地运行后,同一网络的电脑输入地址就能访问。

  1. 完整代码实现

(1)Flask核心代码(app.py)

-- coding: utf-8 --

from flask import Flask, render_template, request, send_file
import os
import datetime
from openpyxl import load_workbook
import matplotlib.pyplot as plt

====================== 全局配置 ======================

app = Flask(name) # 初始化Flask应用

路径配置(修改为你的实际路径)

EXCEL_REPORT_FOLDER = r"C:\Users\张三\Desktop\办公数据看板\每日销售报表" # Excel报表文件夹
CHART_FOLDER = r"C:\Users\张三\Desktop\办公数据看板\static\charts" # 图表文件夹(static目录下,Flask才能识别)
TODAY = datetime.date.today().strftime(“%Y-%m-%d”) # 今日日期(格式:2026-01-08)

解决matplotlib中文乱码

plt.rcParams[‘font.sans-serif’] = [‘SimHei’]
plt.rcParams[‘axes.unicode_minus’] = False

====================== 数据处理函数(复用+改造) ======================

def get_excel_data(date=TODAY):
“”“读取指定日期的Excel报表数据,返回汇总信息和详细数据”“”
# 拼接Excel文件路径(按日期命名)
excel_filename = f"{date}销售筛选结果.xlsx"
excel_path = os.path.join(EXCEL_REPORT_FOLDER, excel_filename)

if not os.path.exists(excel_path): return {"error": f"未找到{date}的销售报表"}, [] try: wb = load_workbook(excel_path) ws = wb.active # 读取表头和所有数据 headers = [cell.value for cell in ws[1]] data = [] for row in ws.iter_rows(min_row=2, values_only=True): if row[0] is not None: data.append(dict(zip(headers, row))) # 数据汇总(按部门统计销售额) dept_sales = {} total_sales = 0.0 qualified_orders = 0 # 销售额>2000的订单数 for item in data: dept = item.get("部门", "未知部门") sales = float(item.get("销售额", 0)) dept_sales[dept] = dept_sales.get(dept, 0) + sales total_sales += sales if sales > 2000: qualified_orders += 1 summary = { "date": date, "total_sales": round(total_sales, 2), # 总销售额(保留2位小数) "qualified_orders": qualified_orders, "dept_count": len(dept_sales), # 涉及部门数 "dept_sales": dept_sales # 各部门销售额 } return summary, data except Exception as e: return {"error": f"读取报表失败:{str(e)}"}, []

def get_chart_path(date=TODAY):
“”“获取指定日期的图表路径(用于网页展示)”“”
chart_filename = f"{date}部门销售额柱状图.png"
chart_path = os.path.join(CHART_FOLDER, chart_filename)
# 返回相对路径(Flask模板中需要相对路径)
return f"/static/charts/{chart_filename}" if os.path.exists(chart_path) else “”

def get_available_dates():
“”“获取所有可用的报表日期(用于历史查询下拉框)”“”
available_dates = []
if not os.path.exists(EXCEL_REPORT_FOLDER):
return available_dates
# 遍历文件夹,提取日期(从文件名中截取)
for filename in os.listdir(EXCEL_REPORT_FOLDER):
if filename.endswith(“.xlsx”) and “销售筛选结果” in filename:
# 截取日期部分(文件名格式:2026-01-08销售筛选结果.xlsx)
date_str = filename[:10]
try:
# 验证日期格式是否正确
datetime.datetime.strptime(date_str, “%Y-%m-%d”)
available_dates.append(date_str)
except:
continue
# 按日期倒序排列(最新的在前面)
available_dates.sort(reverse=True)
return available_dates

====================== Flask路由配置(网页访问入口) ======================

@app.route(“/”)
def dashboard():
“”“看板首页:展示当日数据”“”
# 获取用户选择的日期(默认今日)
selected_date = request.args.get(“date”, TODAY)
# 获取数据汇总和详细数据
summary, detail_data = get_excel_data(selected_date)
# 获取图表路径
chart_path = get_chart_path(selected_date)
# 获取所有可用的报表日期(用于下拉框)
available_dates = get_available_dates()

# 渲染网页模板,把数据传递给HTML return render_template( "dashboard.html", summary=summary, detail_data=detail_data, chart_path=chart_path, available_dates=available_dates, selected_date=selected_date )

@app.route(“/download”)
def download_excel():
“”“下载指定日期的Excel报表”“”
selected_date = request.args.get(“date”, TODAY)
excel_filename = f"{date}销售筛选结果.xlsx"
excel_path = os.path.join(EXCEL_REPORT_FOLDER, excel_filename)

if not os.path.exists(excel_path): return f"未找到{selected_date}的报表文件", 404 # 发送文件给浏览器(触发下载) return send_file( excel_path, as_attachment=True, download_name=excel_filename, mimetype="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" )

====================== 程序入口 ======================

ifname== “main”:
# 启动Flask服务:host="0.0.0.0"表示允许局域网内访问,port=5000是默认端口
app.run(host=“0.0.0.0”, port=5000, debug=True)

(2)网页模板代码(templates/dashboard.html)

销售数据可视化看板

销售数据可视化看板

<!-- 日期选择器 --> <div class="date-select"> <select id="dateSelect" onchange="window.location.href='/?date='+this.value"> {% for date in available_dates %} <option value="{{ date }}" {% if date == selected_date %}selected{% endif %}>{{ date }}</option> {% endfor %} </select> <a href="/download?date={{ selected_date }}" class="download-btn">下载当前报表&lt;/a&gt; &lt;/div&gt; <!-- 数据汇总卡片 --> {% if summary.error %} <div class="error">{{ summary.error }}</div> {% else %} <div class="summary-card"> <div class="card" style="background-color: #3498db;"> <h3>统计日期</h3> <div class="value">{{ summary.date }}</div> </div> <div class="card" style="background-color: #e74c3c;"> <h3>总销售额(元)</h3> <div class="value">{{ summary.total_sales }}</div> </div> <div class="card" style="background-color: #2ecc71;"> <h3>达标订单数</h3> <div class="value">{{ summary.qualified_orders }}</div> </div> <div class="card" style="background-color: #f39c12;"> <h3>涉及部门数</h3> <div class="value">{{ summary.dept_count }}</div> </div> &lt;/div&gt; <!-- 图表展示区域 --> <div class="chart-area"> <h2>各部门销售额分布</h2> {% if chart_path %} <img src="{{ chart_path }}" alt="部门销售额柱状图"> {% else %} <p style="color: #e74c3c;">未找到{{ summary.date }}的图表文件</p> {% endif %} &lt;/div&gt; <!-- 详细数据表格 --> <div class="data-table"> <h2>{{ summary.date }}销售详细数据</h2> <table> <thead> <tr> {% for key in detail_data.0.keys() %} <th>{{ key }}</th> {% endfor %} </tr> </thead> <tbody> {% for item in detail_data %} <tr> {% for value in item.values() %} <td>{{ value }}</td> {% endfor %} </tr> {% endfor %} </tbody> </table> </div> {% endif %} </div>
  1. 关键代码拆解(新手必看)

(1)Flask核心基础:路由与模板渲染

1. 路由配置:@app.route(“/”) 表示访问 http://localhost:5000/ 时执行dashboard函数

@app.route(“/”)
def dashboard():
# 2. 模板渲染:把数据传递给HTML文件,生成最终网页
return render_template(“dashboard.html”, 变量名=变量值)

(2)数据处理:按日期读取与汇总

  • 文件命名规范:Excel和图表文件命名为“2026-01-08销售筛选结果.xlsx”“2026-01-08部门销售额柱状图.png”;

  • 日期提取:遍历报表文件夹,从文件名中截取日期字符串,验证格式后生成可用日期列表;

  • 数据汇总:读取Excel后,按部门统计销售额、计算总销售额和达标订单数,生成直观的汇总信息。

(3)网页与后端的数据交互

  1. 前端HTML:用下拉框展示所有可用日期,选择日期后通过window.location.href跳转到带日期参数的地址(比如/?date=2026-01-07);

  2. 后端Flask:用request.args.get("date", TODAY)获取前端传递的日期参数;

  3. 重新渲染:根据获取的日期读取对应数据,重新渲染网页,展示选中日期的报表。

(4)局域网共享的关键配置

app.run(host=“0.0.0.0”, port=5000, debug=True)

(5)定时任务联动修改

原保存路径(固定名称)

SAVE_EXCEL_PATH = r"C:…\当日销售筛选结果.xlsx"

修改后(按日期命名)

TODAY = datetime.date.today().strftime(“%Y-%m-%d”)
SAVE_EXCEL_PATH = fr"C:…{TODAY}销售筛选结果.xlsx"
SAVE_CHART_PATH = fr"C:…{TODAY}部门销售额柱状图.png"

四、运行效果与使用方法

  1. 本地运行看板

  2. 按之前的文件结构,创建app.pytemplates/dashboard.htmlstatic/charts文件夹;

  3. 修改app.py中的路径配置(EXCEL_REPORT_FOLDER、CHART_FOLDER),确保指向你的报表和图表文件夹;

  4. 打开命令行,切换到“办公数据看板”主文件夹,执行命令:python app.py;

  5. 命令行显示“Running on http://192.168.1.105:5000/”,打开浏览器输入这个地址,就能看到看板网页。

  6. 核心功能使用

  • 查看当日数据:打开网页默认显示今日销售汇总、图表和详细数据;

  • 查询历史数据:通过下拉框选择历史日期,网页自动刷新显示对应日期的报表;

  • 下载报表:点击“下载当前报表”按钮,自动下载选中日期的Excel文件;

  • 共享访问:把命令行显示的地址发给同一网络的同事/领导,他们就能直接访问看板。

五、新手避坑小贴士

  1. 模板路径错误:必须把HTML文件放在templates文件夹下,static文件夹必须存放静态文件(图表、css),否则Flask无法识别;

  2. 端口被占用:如果启动时提示“Address already in use”,修改app.runport参数(比如改成5001);

  3. 局域网无法访问:检查两台电脑是否在同一WiFi/局域网,关闭防火墙,确保启动时设置了host="0.0.0.0"

  4. 日期格式错误:确保Excel和图表文件的日期部分是“2026-01-08”格式,否则无法被看板识别;

  5. 中文乱码:Python代码开头加# -*- coding: utf-8 -*-,HTML文件指定charset="UTF-8",matplotlib指定中文字体。

六、进阶扩展(新手可选)

  1. 添加用户登录:用Flask-Login扩展给看板加登录功能,避免数据泄露;

  2. 数据筛选与搜索:在网页添加“部门筛选”“销售额范围搜索”功能,精准查看数据;

  3. 实时更新数据:用AJAX实现网页自动刷新(比如每5分钟刷新一次),不用手动刷新页面;

  4. 部署到云服务器:把看板部署到阿里云、腾讯云等服务器,实现外网访问(新手可先学本地部署,再进阶云部署);

  5. 多图表展示:添加折线图(展示近7天销售额趋势)、饼图(部门销售额占比),让数据更直观。

七、总结与系列回顾

  • AI辅助办公:结合ChatGPT API,实现报表自动总结、异常数据智能提醒;

  • 移动端访问:优化看板网页适配手机,实现手机随时查看报表;

  • 多用户权限:给不同角色(领导、员工)设置不同的看板访问权限,数据更安全。

如果这篇文章对你有帮助,欢迎点赞收藏+关注!如果在搭建看板时遇到路径错误、局域网访问失败等问题,随时在评论区留言,我会逐一解答~ 新手不用怕Web开发,Flask入门简单,跟着实战代码多试几次,就能轻松搭建属于自己的办公数据看板!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1132919.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何衡量翻译模型好坏?CSANMT评测指标全解析

如何衡量翻译模型好坏&#xff1f;CSANMT评测指标全解析 &#x1f4ca; 为什么我们需要翻译质量评估指标&#xff1f; 在AI智能中英翻译服务日益普及的今天&#xff0c;用户不再满足于“能翻”&#xff0c;而是追求“翻得准、译得自然”。无论是用于学术文献处理、商务邮件撰…

零代码体验:一键部署中英翻译WebUI的完整指南

零代码体验&#xff1a;一键部署中英翻译WebUI的完整指南 &#x1f310; AI 智能中英翻译服务 (WebUI API) 在跨语言交流日益频繁的今天&#xff0c;高质量、低延迟的自动翻译工具已成为开发者、内容创作者和企业用户的刚需。传统的翻译服务往往依赖云端API&#xff0c;存在…

制造业说明书翻译:确保操作指引准确传达

制造业说明书翻译&#xff1a;确保操作指引准确传达 &#x1f310; AI 智能中英翻译服务 (WebUI API) 在制造业全球化进程中&#xff0c;技术文档的跨语言传播成为关键环节。设备操作手册、安全规范、维护流程等说明书若翻译不准确&#xff0c;不仅影响生产效率&#xff0c;还…

AI翻译性能优化:如何让CSANMT模型在CPU上跑得更快?

AI翻译性能优化&#xff1a;如何让CSANMT模型在CPU上跑得更快&#xff1f; &#x1f310; 背景与挑战&#xff1a;轻量级AI翻译服务的工程需求 随着全球化交流日益频繁&#xff0c;高质量、低延迟的中英翻译服务成为众多企业与开发者的核心需求。然而&#xff0c;大多数神经网络…

如何为翻译服务设计AB测试方案

如何为翻译服务设计AB测试方案 &#x1f4cc; 引言&#xff1a;AI 智能中英翻译服务的落地挑战 随着全球化进程加速&#xff0c;高质量、低延迟的中英翻译需求在企业出海、跨境电商、学术交流等场景中持续增长。尽管当前已有多种基于大模型的翻译解决方案&#xff0c;但在实际…

智能翻译术语偏好设置:定制化CSANMT输出风格

智能翻译术语偏好设置&#xff1a;定制化CSANMT输出风格 &#x1f310; AI 智能中英翻译服务 (WebUI API) 从通用翻译到个性化表达&#xff1a;为何需要术语偏好设置&#xff1f; 随着AI在自然语言处理领域的持续突破&#xff0c;机器翻译已不再是“能翻就行”的工具型应用…

跨境电商内容运营提效:批量翻译商品详情页实战

跨境电商内容运营提效&#xff1a;批量翻译商品详情页实战 在跨境电商日益激烈的竞争环境下&#xff0c;高效、精准地将商品信息本地化是提升转化率的关键。尤其当面对海量 SKU 时&#xff0c;手动翻译不仅耗时耗力&#xff0c;还容易出现表达不一致、语义偏差等问题。本文将介…

智能翻译API性能测试:吞吐量与延迟深度分析

智能翻译API性能测试&#xff1a;吞吐量与延迟深度分析 在AI驱动的语言服务领域&#xff0c;中英智能翻译正逐步从“可用”迈向“好用”。随着跨语言交流需求的激增&#xff0c;用户不仅关注译文质量&#xff0c;更对响应速度、系统稳定性与并发能力提出了更高要求。本文聚焦一…

金融报告翻译要求高?CSANMT在财经语料表现优异

金融报告翻译要求高&#xff1f;CSANMT在财经语料表现优异 &#x1f310; AI 智能中英翻译服务 (WebUI API) 在金融、投资、审计等专业领域&#xff0c;中英文报告的精准互译是跨国协作与信息披露的关键环节。传统机器翻译系统常因术语不准确、句式生硬、逻辑断裂等问题&#…

github项目Readme汉化:开源贡献者的效率工具

github项目Readme汉化&#xff1a;开源贡献者的效率工具 &#x1f310; AI 智能中英翻译服务 (WebUI API) 项目背景与核心价值 在参与国际开源项目的过程中&#xff0c;语言障碍是许多中文开发者面临的现实挑战。尤其是面对大量英文文档、Issue 讨论和 Pull Request 评审时&am…

多引擎聚合翻译:综合多个API的最佳结果

多引擎聚合翻译&#xff1a;综合多个API的最佳结果 &#x1f310; AI 智能中英翻译服务 (WebUI API) 项目背景与技术演进 在跨语言交流日益频繁的今天&#xff0c;高质量的机器翻译已成为自然语言处理&#xff08;NLP&#xff09;领域的重要基础设施。尽管通用大模型如Google …

AI智能中英翻译服务发布:基于达摩院CSANMT,支持WebUI

&#x1f310; AI 智能中英翻译服务 (WebUI API) &#x1f4d6; 项目简介 在跨语言交流日益频繁的今天&#xff0c;高质量、低延迟的机器翻译已成为开发者和企业不可或缺的技术能力。为此&#xff0c;我们正式发布基于达摩院 CSANMT&#xff08;Context-Sensitive Attention N…

AI翻译进入轻量化时代:CPU适配成中小企业首选

AI翻译进入轻量化时代&#xff1a;CPU适配成中小企业首选 &#x1f310; AI 智能中英翻译服务 (WebUI API) 从“云端巨兽”到“本地轻骑”&#xff1a;AI翻译的范式转移 过去&#xff0c;高质量的AI翻译服务几乎等同于GPU集群、高昂成本和复杂的部署流程。企业若想集成智能翻译…

Serverless应用场景:按需调用翻译函数节省资源

Serverless应用场景&#xff1a;按需调用翻译函数节省资源 &#x1f310; AI 智能中英翻译服务 (WebUI API) &#x1f4d6; 项目简介 本镜像基于 ModelScope 的 CSANMT (神经网络翻译) 模型构建&#xff0c;提供高质量的中文到英文翻译服务。相比传统机器翻译&#xff0c;C…

AI翻译服务成本分析:CSANMT CPU版运营支出估算

AI翻译服务成本分析&#xff1a;CSANMT CPU版运营支出估算 &#x1f4ca; 背景与业务场景 随着全球化进程加速&#xff0c;中英双语内容需求持续增长。无论是跨境电商、学术研究还是跨国协作&#xff0c;高质量的自动翻译服务已成为不可或缺的基础设施。然而&#xff0c;部署和…

c代码注释英文化:程序员专属的轻量翻译解决方案

c代码注释英文化&#xff1a;程序员专属的轻量翻译解决方案 &#x1f310; AI 智能中英翻译服务 (WebUI API) &#x1f4d6; 项目简介 在软件开发全球化趋势下&#xff0c;代码中的中文注释往往成为跨国协作的技术壁垒。尤其在开源项目、团队交接或文档国际化过程中&#xff0…

企业微信机器人集成:AI翻译服务嵌入办公流

企业微信机器人集成&#xff1a;AI翻译服务嵌入办公流 &#x1f310; AI 智能中英翻译服务 (WebUI API) &#x1f4d6; 项目简介 本镜像基于 ModelScope 的 CSANMT (神经网络翻译) 模型构建&#xff0c;提供高质量的中文到英文翻译能力。该模型由达摩院研发&#xff0c;专精…

企业文档自动化翻译:如何用镜像降低人工校对成本

企业文档自动化翻译&#xff1a;如何用镜像降低人工校对成本 在跨国协作日益频繁的今天&#xff0c;企业日常运营中涉及大量技术文档、合同协议、产品说明等文本的中英互译需求。传统依赖人工翻译的方式不仅耗时长、成本高&#xff0c;还容易因理解偏差导致语义失真。随着AI技…

SaaS产品多语言支持:CSANMT嵌入客户门户案例

SaaS产品多语言支持&#xff1a;CSANMT嵌入客户门户案例 在SaaS&#xff08;Software as a Service&#xff09;全球化进程中&#xff0c;多语言支持能力已成为提升用户体验、拓展国际市场的重要技术门槛。尤其对于面向中国与英语国家用户的双语服务场景&#xff0c;如何实现高…

Node.js debug模块轻松定位性能瓶颈

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 Node.js Debug模块&#xff1a;轻松定位性能瓶颈的利器目录Node.js Debug模块&#xff1a;轻松定位性能瓶颈的利器 引言&#xf…