纲要
Claude与Skills生态XLSXSkill 的安装与使用- 数据理解与智能分析流程
ECharts图表生成技术- HTML 仪表盘构建
- Word 报告自动化生成
- 多模型效果对比
技术背景与选型
在数据分析与可视化的常规工作流中,Excel 文件处理、数据清洗、图表生成及报告撰写通常需要多部门协作,且耗时数天。借助 Claude 的 Skills 机制,可以将上述流程整合为一条自动化流水线。
本文涉及的核心技术组件包括:
Claude(Anthropic):具备文件读取与代码生成能力的大语言模型XLSX Skill:Claude官方提供的 Excel 文件读写与解析扩展ECharts:百度开源的高性能 JavaScript 图表库,用于 Web 端数据可视化- HTML/CSS/JavaScript:构建最终仪表盘的前端技术栈
- Word 文档生成:通过
Claude生成结构化报告,可导出为.docx格式
XLSX Skill 安装与环境准备
Claude 通过 Skills 机制扩展其对特定文件格式的处理能力。XLSX Skill 是官方维护的扩展之一,用于支持 .xlsx 文件的读取、解析与数据提取。
安装方式 :在 Claude 对话界面中,选择 Skills 管理面板,搜索并安装 XLSX 即可启用。
安装完成后,Claude 将具备以下能力:
- 解析多
SheetExcel 文件 - 提取结构化数据(支持数值、文本、日期等类型)
- 识别表头与数据行的映射关系
- 支持数据量级:单文件数千行以内均可流畅处理
注:当前
XLSX Skill为官方提供的基础版本,如需更复杂的格式处理(如合并单元格、自定义样式),可前往GitHub搜索社区贡献的高级Skills。
数据理解:从读取到语义解析
数据分析的第一步并非生成图表,而是理解数据 。许多 AI 工具在读取 Excel 后仅做数值提取,而缺少对数据含义的深度理解。正确的做法是要求模型阅读并理解文档内容,而非仅提取原始数值。
目录结构示例
dir
├── 011-数据可视化/
│ ├── 个人记账.xlsx # 原始数据文件
│ ├── index.html # 生成的仪表盘
│ └── 运营报告.docx # 自动生成的报告文档
数据概览
该 Excel 包含三个 Sheet 页:
| Sheet 名称 | 内容描述 | 数据量 |
|---|---|---|
| 用户交易明细 | 用户 ID、交易金额、支付方式、交易类别等 | 约 400-500 条 |
| 运营分析总览 | 汇总统计指标(总收入、总支出、用户数等) | 聚合结果 |
| 分类统计 | 按不同类别(社交、餐饮、数码等)汇总的交易流水 | 分类汇总 |
图表生成流程
Prompt 设计原则
在实际操作中,向 Claude 下达指令时需要明确以下几点:
- 明确数据源 :通过
@引用上传的 Excel 文件 - 明确理解要求:不仅读取,还需理解数据语义
- 明确图表类型:可指定具体类型,也可让模型根据数据自动选择
- 明确输出格式:生成完整的 HTML 网页,便于浏览器直接打开
- 明确图表库 :使用
ECharts技术
核心 Prompt 示例
txt
请阅读并理解这份 Excel 文档中的数据内容。
根据数据特征,生成合适的图表(柱状图、饼图、折线图、雷达图等均可)。
请使用 ECharts 技术生成图表,并输出为完整的 HTML 网页。
该网页需可在浏览器中直接打开,并适合分享至局域网。
图表生成结果
Claude 在接收到指令后,会自动完成以下工作:
- 解析 Excel 各
Sheet的数据 - 识别数值型字段与维度字段
- 为不同维度匹配最佳图表类型
- 生成包含
ECharts渲染逻辑的 HTML 文件
生成图表清单
| 图表类型 | 展示内容 | 适用场景 |
|---|---|---|
| 折线图 | 月度收支趋势(1-5 月) | 时间序列分析 |
| 柱状图 | 各城市消费排行榜 | 类别对比 |
| 饼图 | 支付方式分布(银行卡/现金/等) | 构成比例分析 |
| 饼图 | 支出分类占比(社交/旅游/餐饮/数码等) | 构成比例分析 |
| 饼图 | 收入占比(兼职/工资/投资等) | 构成比例分析 |
| 雷达图 | 各维度收入对比 | 多指标综合对比 |
HTML 输出特征
- 单文件 HTML,包含所有
EChartsCDN 引用 - 图表自带动态加载动画(每次刷新重绘)
- 所有图表统一布局于同一页面,形成数据仪表盘
- 文件可直接在浏览器中打开,无需额外服务器
关键实现细节
ECharts 是当前 Web 端数据可视化的主流方案之一。其核心优势在于:
- 丰富的图表类型(涵盖本文所需全部类型)
- 良好的交互体验(悬停提示、动态更新)
- 完善的
API文档与社区生态 - 支持响应式布局
ECharts 基本渲染结构
html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>数据可视化仪表盘</title>
<script src="https://cdn.jsdelivr.net/npm/echarts@5/dist/echarts.min.js">
</script>
<style>
.chart-container {
width: 100%;
height: 400px;
display: inline-block;
}
</style>
</head>
<body>
<div id="chart1" class="chart-container"></div>
<script>
const chartDom = document.getElementById('chart1');
const myChart = echarts.init(chartDom);
const option = {
// 图表配置项
xAxis: { type: 'category', data: ['1月', '2月', '3月', '4月', '5月'] },
yAxis: { type: 'value' },
series: [{
data: [120, 200, 150, 180, 220],
type: 'line'
}]
};
myChart.setOption(option);
</script>
</body>
</html>
运营报告自动化生成
完成数据可视化仪表盘后,可进一步要求 Claude 基于已有图表和分析结果,自动生成一份完整的运营报告,用于向管理层汇报。
Prompt 示例
txt
请根据以上数据及图表分析结果,生成一份运营报告。
报告需包含整体概况、核心指标解读、趋势分析及建议。
输出格式为 Word 文档(.docx)。
报告生成结果
Claude 自动生成包含以下章节的报告:
- 整体运营概况
- 用户数据分析
- 交易流水分析
- 收支趋势解读
- 城市与支付方式分布
- 分类支出与收入结构
- 总结与建议
格式说明
当前 Claude 官方提供的 Word 生成 Skill 在排版格式上较为基础。若需要更专业的排版效果(如自定义模板、页眉页脚、表格样式等),建议从 GitHub 社区获取更高级的 Skills 实现。
技术复盘与对比
完整工作流时序
报告生成 ECharts 图表库 Excel 数据源 Claude + XLSX Skill 用户 报告生成 ECharts 图表库 Excel 数据源 Claude + XLSX Skill 用户 #mermaid-svg-2fdtFQy6SgIz5xRu{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-2fdtFQy6SgIz5xRu .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-2fdtFQy6SgIz5xRu .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-2fdtFQy6SgIz5xRu .error-icon{fill:#552222;}#mermaid-svg-2fdtFQy6SgIz5xRu .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-2fdtFQy6SgIz5xRu .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-2fdtFQy6SgIz5xRu .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-2fdtFQy6SgIz5xRu .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-2fdtFQy6SgIz5xRu .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-2fdtFQy6SgIz5xRu .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-2fdtFQy6SgIz5xRu .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-2fdtFQy6SgIz5xRu .marker{fill:#333333;stroke:#333333;}#mermaid-svg-2fdtFQy6SgIz5xRu .marker.cross{stroke:#333333;}#mermaid-svg-2fdtFQy6SgIz5xRu svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-2fdtFQy6SgIz5xRu p{margin:0;}#mermaid-svg-2fdtFQy6SgIz5xRu .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-2fdtFQy6SgIz5xRu text.actor>tspan{fill:black;stroke:none;}#mermaid-svg-2fdtFQy6SgIz5xRu .actor-line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-2fdtFQy6SgIz5xRu .innerArc{stroke-width:1.5;stroke-dasharray:none;}#mermaid-svg-2fdtFQy6SgIz5xRu .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-2fdtFQy6SgIz5xRu .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-2fdtFQy6SgIz5xRu #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-2fdtFQy6SgIz5xRu .sequenceNumber{fill:white;}#mermaid-svg-2fdtFQy6SgIz5xRu #sequencenumber{fill:#333;}#mermaid-svg-2fdtFQy6SgIz5xRu #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-2fdtFQy6SgIz5xRu .messageText{fill:#333;stroke:none;}#mermaid-svg-2fdtFQy6SgIz5xRu .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-2fdtFQy6SgIz5xRu .labelText,#mermaid-svg-2fdtFQy6SgIz5xRu .labelText>tspan{fill:black;stroke:none;}#mermaid-svg-2fdtFQy6SgIz5xRu .loopText,#mermaid-svg-2fdtFQy6SgIz5xRu .loopText>tspan{fill:black;stroke:none;}#mermaid-svg-2fdtFQy6SgIz5xRu .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-2fdtFQy6SgIz5xRu .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-2fdtFQy6SgIz5xRu .noteText,#mermaid-svg-2fdtFQy6SgIz5xRu .noteText>tspan{fill:black;stroke:none;}#mermaid-svg-2fdtFQy6SgIz5xRu .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-2fdtFQy6SgIz5xRu .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-2fdtFQy6SgIz5xRu .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-2fdtFQy6SgIz5xRu .actorPopupMenu{position:absolute;}#mermaid-svg-2fdtFQy6SgIz5xRu .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-2fdtFQy6SgIz5xRu .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-2fdtFQy6SgIz5xRu .actor-man circle,#mermaid-svg-2fdtFQy6SgIz5xRu line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-2fdtFQy6SgIz5xRu :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 上传 Excel 文件并下达分析指令 读取并解析 XLSX 返回结构化数据 理解数据语义并生成图表配置 输出 HTML 页面 返回可交互仪表盘 下达报告生成指令 生成 Word 报告 返回结构化文档
方案对比
| 对比维度 | 人工处理 | Claude + Skills 自动化 |
|---|---|---|
| 数据理解 | 需人工逐列解读 | 自动识别语义 |
| 图表生成 | 手动选择图表类型并绘制 | 自动匹配最优图表 |
| 代码编写 | 需前端开发人员介入 | 自动生成完整 HTML |
| 报告撰写 | 需分析师手动编写 | 自动生成结构化报告 |
| 耗时 | 2-3 天 | 分钟级 |
| 可分享性 | 需额外导出 | 直接生成可访问链接 |
API 速览
本文涉及的核心技术为 ECharts 图表库。以下为相关 API 的快速参考。
ECharts 核心 API
所属库 :echarts(CDN 或 npm 安装)
初始化实例
javascript
const chart = echarts.init(domElement, theme, options);
| 参数 | 类型 | 说明 |
|---|---|---|
domElement |
HTMLElement |
图表容器 DOM 节点 |
theme |
string |
可选,主题名称 |
options |
object |
可选,初始化配置 |
设置图表选项
javascript
chart.setOption(option, notMerge, lazyUpdate);
| 参数 | 类型 | 说明 |
|---|---|---|
option |
object |
图表配置项 |
notMerge |
boolean |
是否不合并之前的配置 |
lazyUpdate |
boolean |
是否延迟更新 |
响应式调整
javascript
window.addEventListener('resize', () => {
chart.resize();
});
常用图表配置结构
柱状图 / 折线图通用配置
javascript
const option = {
title: { text: '图表标题', subtext: '副标题' },
tooltip: { trigger: 'axis' },
legend: { data: ['系列1', '系列2'] },
xAxis: { type: 'category', data: ['A', 'B', 'C'] },
yAxis: { type: 'value' },
series: [
{ name: '系列1', type: 'bar', data: [10, 20, 30] },
{ name: '系列2', type: 'line', data: [15, 25, 35] }
]
};
饼图配置
javascript
const pieOption = {
title: { text: '占比分析' },
tooltip: { trigger: 'item' },
legend: { data: ['类别A', '类别B', '类别C'] },
series: [{
type: 'pie',
radius: '50%',
data: [
{ value: 100, name: '类别A' },
{ value: 80, name: '类别B' },
{ value: 60, name: '类别C' }
]
}]
};
雷达图配置
javascript
const radarOption = {
title: { text: '多维对比' },
radar: {
indicator: [
{ name: '指标A', max: 100 },
{ name: '指标B', max: 100 },
{ name: '指标C', max: 100 }
]
},
series: [{
type: 'radar',
data: [{ value: [80, 70, 90], name: '维度对比' }]
}]
};
Demo 示例
以下为基于本文所述流程生成的完整仪表盘 HTML 示例,该示例展示了如何将静态数据通过 ECharts 渲染为多图表组合的可视化页面。
完整 HTML 代码
html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>个人记账数据仪表盘</title>
<!-- 引入 ECharts 核心库 -->
<script src="https://cdn.jsdelivr.net/npm/echarts@5.5.0/dist/echarts.min.js">
</script>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: 'Segoe UI', 'PingFang SC', Roboto, 'Helvetica Neue', sans-serif;
background: #f5f7fb;
padding: 24px;
}
.dashboard {
max-width: 1440px;
margin: 0 auto;
}
.header {
margin-bottom: 28px;
}
.header h1 {
font-size: 28px;
font-weight: 600;
color: #1a2332;
}
.header p {
color: #6b7a8d;
font-size: 14px;
margin-top: 4px;
}
.stats-grid {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 16px;
margin-bottom: 24px;
}
.stat-card {
background: #fff;
border-radius: 12px;
padding: 18px 20px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
}
.stat-card .label {
font-size: 13px;
color: #8c9aa9;
letter-spacing: 0.3px;
}
.stat-card .value {
font-size: 26px;
font-weight: 700;
color: #0a1a2b;
margin-top: 4px;
}
.chart-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 20px;
}
.chart-box {
background: #ffffff;
border-radius: 12px;
padding: 16px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
transition: box-shadow 0.2s;
}
.chart-box:hover {
box-shadow: 0 6px 20px rgba(0, 0, 0, 0.06);
}
.chart-box .chart-title {
font-size: 15px;
font-weight: 500;
color: #2c3e50;
margin-bottom: 10px;
padding-left: 4px;
border-left: 3px solid #4a90d9;
padding-left: 12px;
}
.chart-container {
width: 100%;
height: 320px;
}
.full-width {
grid-column: 1 / -1;
}
@media (max-width: 768px) {
.stats-grid {
grid-template-columns: repeat(2, 1fr);
}
.chart-grid {
grid-template-columns: 1fr;
}
.full-width {
grid-column: 1;
}
}
</style>
</head>
<body>
<div class="dashboard">
<!-- 头部 -->
<div class="header">
<h1>📊 个人记账数据分析仪表盘</h1>
<p>数据来源:个人记账.xlsx | 更新日期:2026-08-15 | 图表引擎:ECharts 5.5.0</p>
</div>
<!-- 核心指标卡片 -->
<div class="stats-grid">
<div class="stat-card"><div class="label">总用户数</div><div class="value">1,284</div></div>
<div class="stat-card"><div class="label">总交易记录</div><div class="value">487</div></div>
<div class="stat-card"><div class="label">总收入</div><div class="value">¥328,900</div></div>
<div class="stat-card"><div class="label">总支出</div><div class="value">¥214,300</div></div>
</div>
<!-- 图表区域 -->
<div class="chart-grid">
<!-- 1. 月度收支趋势 - 折线图 -->
<div class="chart-box">
<div class="chart-title">月度收支趋势</div>
<div id="trendChart" class="chart-container"></div>
</div>
<!-- 2. 城市消费榜 - 柱状图 -->
<div class="chart-box">
<div class="chart-title">各城市消费榜</div>
<div id="cityChart" class="chart-container"></div>
</div>
<!-- 3. 支付方式分布 - 饼图 -->
<div class="chart-box">
<div class="chart-title">支付方式分布</div>
<div id="paymentChart" class="chart-container"></div>
</div>
<!-- 4. 支出分类占比 - 饼图 -->
<div class="chart-box">
<div class="chart-title">支出分类占比</div>
<div id="expenseChart" class="chart-container"></div>
</div>
<!-- 5. 收入占比 - 饼图 -->
<div class="chart-box">
<div class="chart-title">收入来源占比</div>
<div id="incomeChart" class="chart-container"></div>
</div>
<!-- 6. 收入对比雷达图 -->
<div class="chart-box">
<div class="chart-title">各维度收入对比</div>
<div id="radarChart" class="chart-container"></div>
</div>
</div>
</div>
<script>
// ============================================================
// 1. 月度收支趋势(折线图)
// ============================================================
const trendChart = echarts.init(document.getElementById('trendChart'));
trendChart.setOption({
tooltip: { trigger: 'axis' },
legend: { data: ['收入', '支出'], bottom: 0 },
grid: { left: 40, right: 20, top: 20, bottom: 50 },
xAxis: { type: 'category', data: ['1月', '2月', '3月', '4月', '5月'] },
yAxis: { type: 'value', axisLabel: { formatter: '¥{value}' } },
series: [{
name: '收入',
type: 'line',
smooth: true,
lineStyle: { color: '#27ae60', width: 3 },
areaStyle: { color: 'rgba(39, 174, 96, 0.15)' },
data: [42000, 38500, 51000, 47800, 62000]
}, {
name: '支出',
type: 'line',
smooth: true,
lineStyle: { color: '#e74c3c', width: 3 },
areaStyle: { color: 'rgba(231, 76, 60, 0.10)' },
data: [28000, 31000, 26000, 34000, 29000]
}]
});
// ============================================================
// 2. 城市消费榜(柱状图)
// ============================================================
const cityChart = echarts.init(document.getElementById('cityChart'));
cityChart.setOption({
tooltip: { trigger: 'axis' },
grid: { left: 50, right: 20, top: 20, bottom: 30 },
xAxis: { type: 'category', data: ['上海', '北京', '深圳', '杭州', '广州', '成都'] },
yAxis: { type: 'value', axisLabel: { formatter: '¥{value}' } },
series: [{
type: 'bar',
barWidth: '40%',
itemStyle: {
borderRadius: [4, 4, 0, 0],
color: '#4a90d9'
},
data: [68000, 54000, 47000, 39000, 32000, 21000]
}]
});
// ============================================================
// 3. 支付方式分布(饼图)
// ============================================================
const paymentChart = echarts.init(document.getElementById('paymentChart'));
paymentChart.setOption({
tooltip: { trigger: 'item', formatter: '{b}: {c} ({d}%)' },
legend: { orient: 'horizontal', bottom: 0 },
series: [{
type: 'pie',
radius: ['40%', '65%'],
avoidLabelOverlap: true,
itemStyle: { borderRadius: 6, borderColor: '#fff', borderWidth: 2 },
label: { show: false },
emphasis: { scale: true },
data: [
{ value: 182, name: '银行卡', itemStyle: { color: '#4a90d9' } },
{ value: 145, name: '现金', itemStyle: { color: '#27ae60' } },
{ value: 98, name: '微信支付', itemStyle: { color: '#1abc9c' } },
{ value: 62, name: '支付宝', itemStyle: { color: '#3498db' } }
]
}]
});
// ============================================================
// 4. 支出分类占比(饼图)
// ============================================================
const expenseChart = echarts.init(document.getElementById('expenseChart'));
expenseChart.setOption({
tooltip: { trigger: 'item', formatter: '{b}: {c} ({d}%)' },
legend: { orient: 'horizontal', bottom: 0 },
series: [{
type: 'pie',
radius: ['40%', '65%'],
avoidLabelOverlap: true,
itemStyle: { borderRadius: 6, borderColor: '#fff', borderWidth: 2 },
label: { show: false },
emphasis: { scale: true },
data: [
{ value: 86000, name: '社交' },
{ value: 72000, name: '旅游' },
{ value: 58000, name: '餐饮' },
{ value: 49000, name: '数码' },
{ value: 31000, name: '教育' },
{ value: 18000, name: '医疗' },
{ value: 12000, name: '其他' }
]
}]
});
// ============================================================
// 5. 收入来源占比(饼图)
// ============================================================
const incomeChart = echarts.init(document.getElementById('incomeChart'));
incomeChart.setOption({
tooltip: { trigger: 'item', formatter: '{b}: {c} ({d}%)' },
legend: { orient: 'horizontal', bottom: 0 },
series: [{
type: 'pie',
radius: ['40%', '65%'],
avoidLabelOverlap: true,
itemStyle: { borderRadius: 6, borderColor: '#fff', borderWidth: 2 },
label: { show: false },
emphasis: { scale: true },
data: [
{ value: 152000, name: '工资' },
{ value: 98000, name: '兼职' },
{ value: 54000, name: '投资' },
{ value: 24900, name: '其他' }
]
}]
});
// ============================================================
// 6. 收入对比雷达图
// ============================================================
const radarChart = echarts.init(document.getElementById('radarChart'));
radarChart.setOption({
tooltip: { trigger: 'item' },
legend: { data: ['当前维度'], bottom: 0 },
radar: {
indicator: [
{ name: '总收入', max: 100000 },
{ name: '月均收入', max: 80000 },
{ name: '增长率', max: 50 },
{ name: '活跃度', max: 100 },
{ name: '客单价', max: 20000 }
],
shape: 'polygon',
center: ['50%', '48%'],
radius: '60%',
axisName: { color: '#2c3e50', fontSize: 11 }
},
series: [{
type: 'radar',
data: [{
value: [72000, 48000, 18, 82, 12500],
name: '当前维度',
areaStyle: { color: 'rgba(74, 144, 217, 0.3)' },
lineStyle: { color: '#4a90d9', width: 2 },
itemStyle: { color: '#4a90d9' }
}]
}]
});
// ============================================================
// 响应式处理
// ============================================================
const charts = [trendChart, cityChart, paymentChart, expenseChart, incomeChart, radarChart];
window.addEventListener('resize', () => {
charts.forEach(chart => chart.resize());
});
</script>
</body>
</html>
运行说明
- 将上述 HTML 代码保存为
index.html文件 - 使用浏览器(Chrome / Edge / Firefox 等)直接打开该文件
- 所有图表将自动渲染,无需启动任何本地服务器
- 调整浏览器窗口大小时,图表将自动自适应
技术点总结
- 纯前端实现,无需后端服务,零依赖部署
ECharts处理所有图表渲染与交互逻辑- 数据与配置完全解耦,替换
data数组即可适配新数据集 - 响应式布局适配桌面与移动端
- 所有图表共享同一
ECharts实例,减少资源开销 - 展示了折线图、柱状图、饼图、雷达图四种常用图表类型
参考文档
官方文档
参考链接
总结
本文系统梳理了基于 Claude + XLSX Skill + ECharts 的 Excel 数据自动分析与可视化工作流。核心环节包括数据理解、图表生成、HTML 仪表盘构建以及 Word 报告自动生成。
这一方案将原本需要 2-3 天的人工分析流程压缩至分钟级,显著提升了数据处理与汇报的效率。文中涉及的 Prompt 设计策略、ECharts 配置模板以及完整的 Demo 示例均具备直接落地能力,可作为一人团队或多角色协作场景下的标准化技术方案参考。