Coze工作流实战:一键上传excel生成数据图表
大家好,我是你们的技术老友。今天我们来聊一个非常接地气又实用的Coze工作流——一键上传Excel,自动生成数据图表。你是不是经常遇到这样的场景:老板甩给你一个Excel文件,让你“快速看一下数据趋势”,或者“做个可视化汇报”。传统做法是打开Excel,选中数据,插入图表,再调整样式……运气好5分钟,运气不好格式调半天。现在,我们用Coze(扣子)平台,把整个流程封装成一个工作流:你只需要上传一个Excel文件,AI自动读取数据、分析字段、生成图表,甚至还能配上文字解读。整个过程就像点外卖一样简单。### 为什么选择Coze做这件事?Coze是字节跳动推出的AI智能体开发平台,它最大的优势是工作流(Workflow)编排能力。你可以把“读取文件→处理数据→调用绘图代码→生成报告”这些步骤像搭积木一样串联起来,每一步都可以用插件或代码块自定义。更重要的是,Coze支持代码节点,这意味着你可以直接写Python代码来处理数据、画图表,灵活性极高。而且Coze工作流可以发布成API,或者嵌入到飞书、微信等应用里,真正做到“一次构建,处处使用”。### 工作流整体设计我们先来看看这个工作流的逻辑结构:1. 用户上传Excel文件(触发器)2. 读取Excel数据(使用pandas)3. 自动识别数值列和分类列(代码自动判断)4. 生成图表(matplotlib或plotly)5. 输出图表图片和文字总结(返回给用户)下面,我们重点拆解两个核心代码节点。### 节点一:读取并解析Excel数据这个节点负责接收上传的文件,用pandas读取,并自动识别哪些列是数值列,哪些是分类列。这样后面画图时才能自动选择合适的图表类型。pythonimport pandas as pdimport iodef process_excel(file_bytes): """ 从上传的Excel文件字节流中读取数据 :param file_bytes: 上传文件的二进制内容 (bytes) :return: 数据概览信息 """ # 使用io.BytesIO将字节转为文件对象 df = pd.read_excel(io.BytesIO(file_bytes)) # 获取列名和数据类型 col_info = [] for col in df.columns: # 判断是否为数值列(int或float) if pd.api.types.is_numeric_dtype(df[col]): col_type = "数值" else: col_type = "分类" col_info.append(f"{col} ({col_type})") # 返回前几行数据预览和列信息 preview = df.head(3).to_string() result = { "列信息": "; ".join(col_info), "数据预览": preview, "总行数": len(df) } return result注意:在Coze的代码节点里,输入输出通过args和result传递。上面这段代码是核心逻辑,实际部署时你需要把file_bytes替换为Coze节点接收到的参数。### 节点二:生成图表并返回图片接下来是最关键的绘图节点。我们会根据上一步识别出的数值列和分类列,自动选择绘制柱状图、折线图或饼图。这里用matplotlib生成图片,然后保存为base64编码返回给Coze。pythonimport matplotlib.pyplot as pltimport pandas as pdimport ioimport base64def generate_chart(df, x_col, y_col, chart_type='auto'): """ 根据数据自动生成图表 :param df: pandas DataFrame :param x_col: 分类列名(横轴) :param y_col: 数值列名(纵轴) :param chart_type: 图表类型(auto/bar/line/pie) :return: base64编码的图片 """ plt.rcParams['font.sans-serif'] = ['SimHei'] # 解决中文显示问题 plt.rcParams['axes.unicode_minus'] = False # 如果数据量小且分类列是文本,默认用柱状图 if chart_type == 'auto': if len(df) < 8: chart_type = 'bar' else: chart_type = 'line' fig, ax = plt.subplots(figsize=(10, 6)) if chart_type == 'bar': ax.bar(df[x_col], df[y_col], color='skyblue') ax.set_xlabel(x_col) ax.set_ylabel(y_col) ax.set_title(f'{y_col} 随 {x_col} 的变化') plt.xticks(rotation=45) elif chart_type == 'line': ax.plot(df[x_col], df[y_col], marker='o', linestyle='-', color='coral') ax.set_xlabel(x_col) ax.set_ylabel(y_col) ax.set_title(f'{y_col} 趋势图') elif chart_type == 'pie': ax.pie(df[y_col], labels=df[x_col], autopct='%1.1f%%') ax.set_title(f'{y_col} 占比分布') plt.tight_layout() # 将图片保存到内存中,并转为base64 buf = io.BytesIO() plt.savefig(buf, format='png') buf.seek(0) img_base64 = base64.b64encode(buf.read()).decode('utf-8') plt.close(fig) return img_base64这个代码节点里,我处理了三个细节:- 中文字体:不设置会乱码。- 图表类型自适应:数据少于8行用柱状图,多于8行用折线图,更直观。- base64编码:Coze工作流返回图片时,通常用base64字符串传递,前端再解码展示。### 在Coze中串联工作流光有代码还不够,我们要在Coze的“工作流”编辑器中这样编排:1. 开始节点:设置一个文件上传的输入参数(类型为文件)。2. 代码节点1:调用process_excel,把文件字节流转成DataFrame,并输出列信息。3. 代码节点2:接收上一步的DataFrame(在Coze中可以通过“变量”传递),然后调用generate_chart,输出base64图片。4. 结束节点:把图片和文字总结一起返回给用户。在Coze的代码节点中,你可以直接用from coze_utils import get_input, output之类的辅助函数(具体看平台版本)。但核心逻辑就是我们上面写的Python代码。### 实战效果演示假设你上传了一份“2024年各月销售额.xlsx”,包含两列:月份(文本)和销售额(数值)。工作流会自动:- 识别出月份是分类列,销售额是数值列。- 因为只有12行数据,自动选择柱状图。- 生成一张带中文标题的柱状图,并返回“销售额最高的月份是X月”等文字总结(这部分可以再接一个LLM节点)。如果你上传的是100天的销售数据,它会自动改成折线图,展示趋势。### 进阶玩法1. 接入LLM总结:在图表生成后,接一个“大模型”节点,让AI根据图表数据写一段业务解读,比如“Q2销售额环比增长20%,主要受促销活动驱动”。2. 多表合并:代码节点里可以支持上传多个Excel,用pandas的concat合并后再分析。3. 导出报告:把图表和解读打包成PDF或HTML报告,直接发送到飞书或钉钉。### 常见坑与避坑指南- 编码问题:Excel文件如果是xlsx格式,必须用openpyxl或pandas的引擎支持;如果是xls,需要xlrd。建议统一让用户上传xlsx。- 内存限制:Coze代码节点有执行时间限制(通常几秒),如果Excel特别大(几万行),建议在代码里做抽样或聚合。- 图表样式:默认matplotlib样式比较朴素,可以导入seaborn美化,但注意不要超时。### 总结通过Coze工作流,我们把“上传Excel→生成图表”这个繁琐过程压缩到了一键完成。核心就在于利用代码节点灵活处理数据,再结合Coze的编排能力,实现自动化和智能化。这个工作流不仅适合个人使用,完全可以部署成团队工具——你只需要把工作流发布成API,前端做个简单的上传页面,后端调Coze接口拿图片结果。整个过程不需要搭建服务器,纯云端运行。动手试试吧:打开Coze平台,创建一个新工作流,把上面的代码粘贴进去,上传一个Excel文件,看看你的第一张自动生成图表长什么样。如果遇到问题,欢迎在评论区留言,我们下期见!
转载自 CSDN-专业IT技术社区
原文链接:https://blog.csdn.net/OxMzzb1yG/article/details/163370086



