Hi,大家好!
开始前,给大家再汇报一下框架的情况,由于近两月参与其他项目的交付,框架开发有所延后;现已调整优先级,计划本月先发布一版可用实现,后续再按需迭代与优化。本来我也是游刃有余,现在是匆匆忙忙,不过这个Flag先立下了。
在 Access 开发中,我们经常需要将数据以可视化的方式呈现。今天分享一个实用技术:使用 VBA 生成包含交互式图表的 HTML 报表。
Access 导出图表到 HTML 主要有两种方式:
使用内置 OutputTo:会将图表转为静态图片,文件体积大
使用 JavaScript 图表库:生成可交互的矢量图表,文件小且效果好
本文采用第二种方案,使用 Chart.js 库实现。
接着,我们要准备好数据,可以像这样:
表有了,那我们再创建一个简单的窗体:
以下是一个完整的导出函数,从数据库读取数据并生成带图表的 HTML:
' 导出带 Chart.js 图表的 HTMLPublicSub ExportHTMLWithChartJS()Dim rs As DAO.RecordsetDim html AsStringDim labels AsStringDim dataValues AsString' 获取数据Set rs = CurrentDb.OpenRecordset("SELECT 月份, 销售额 FROM tblSales ORDER BY 月份")' 构建图表数据labels = ""dataValues = ""DoWhileNot rs.EOFlabels = labels & "'" & rs!月份 & "',"dataValues = dataValues & rs!销售额 & ","rs.MoveNextLooprs.Close' 去掉最后的逗号If Len(labels) > 0Thenlabels = Left(labels, Len(labels) - 1)dataValues = Left(dataValues, Len(dataValues) - 1)EndIf' 构建 HTMLhtml = "<!DOCTYPE html>" & vbCrLfhtml = html & "<html lang='zh-CN'>" & vbCrLfhtml = html & "<head>" & vbCrLfhtml = html & " <meta charset='utf-8'>" & vbCrLfhtml = html & " <meta name='viewport' content='width=device-width, initial-scale=1'>" & vbCrLfhtml = html & " <title>销售趋势图</title>" & vbCrLf' 引入 Chart.jshtml = html & " <script src='https://cdn.jsdelivr.net/npm/chart.js@4.4.0/dist/chart.umd.min.js'></script>" & vbCrLfhtml = html & " <style>" & vbCrLfhtml = html & " body { font-family: 'Microsoft YaHei', sans-serif; margin: 20px; background: #f5f5f5; }" & vbCrLfhtml = html & " .container { max-width: 1200px; margin: 0 auto; background: white; padding: 30px; box-shadow: 0 2px 8px rgba(0,0,0,0.1); }" & vbCrLfhtml = html & " h1 { color: #333; text-align: center; }" & vbCrLfhtml = html & " .chart-container { position: relative; height: 400px; margin-top: 30px; }" & vbCrLfhtml = html & " </style>" & vbCrLfhtml = html & "</head>" & vbCrLfhtml = html & "<body>" & vbCrLfhtml = html & " <div class='container'>" & vbCrLfhtml = html & " <h1>销售趋势分析</h1>" & vbCrLfhtml = html & " <p style='text-align: center; color: #666;'>数据更新时间:" & Now & "</p>" & vbCrLf' 图表容器html = html & " <div class='chart-container'>" & vbCrLfhtml = html & " <canvas id='salesChart'></canvas>" & vbCrLfhtml = html & " </div>" & vbCrLfhtml = html & " </div>" & vbCrLf' JavaScript 图表代码html = html & " <script>" & vbCrLfhtml = html & " const ctx = document.getElementById('salesChart');" & vbCrLfhtml = html & " new Chart(ctx, {" & vbCrLfhtml = html & " type: 'bar'," & vbCrLfhtml = html & " data: {" & vbCrLfhtml = html & " labels: [" & labels & "]," & vbCrLfhtml = html & " datasets: [{" & vbCrLfhtml = html & " label: '销售额(万元)'," & vbCrLfhtml = html & " data: [" & dataValues & "]," & vbCrLfhtml = html & " borderColor: 'rgb(75, 192, 192)'," & vbCrLfhtml = html & " backgroundColor: 'rgba(75, 192, 192, 0.2)'," & vbCrLfhtml = html & " tension: 0.1" & vbCrLfhtml = html & " }]" & vbCrLfhtml = html & " }," & vbCrLfhtml = html & " options: {" & vbCrLfhtml = html & " responsive: true," & vbCrLfhtml = html & " maintainAspectRatio: false," & vbCrLfhtml = html & " plugins: {" & vbCrLfhtml = html & " legend: { display: true, position: 'top' }," & vbCrLfhtml = html & " title: { display: false }" & vbCrLfhtml = html & " }" & vbCrLfhtml = html & " }" & vbCrLfhtml = html & " });" & vbCrLfhtml = html & " </script>" & vbCrLfhtml = html & "</body>" & vbCrLfhtml = html & "</html>"' 保存文件WriteUTF8File "C:\Users\Desktop\html\SalesChart.html", htmlMsgBox "图表导出完成!", vbInformationEndSub' UTF-8 写入函数PrivateSub WriteUTF8File(filePath AsString, content AsString)Dim stream AsObjectSet stream = CreateObject("ADODB.Stream")With stream.Type = 2.Charset = "utf-8".Open.WriteText content.SaveToFile filePath, 2.CloseEndWithSet stream = NothingEndSub
4.1 数据格式化
Chart.js 需要 JavaScript 数组格式的数据:
标签:['一月', '二月', '三月']
数值:[100, 200, 150]
在 VBA 中通过字符串拼接实现,注意去掉最后的逗号。
4.2 图表类型
Chart.js 支持多种图表类型,只需修改 type 参数:
line:折线图
bar:柱状图
pie:饼图
doughnut:环形图
radar:雷达图
4.3 响应式设计
关键配置:
配合 CSS:
4.4 中文支持
必须做到三点:
HTML 头部声明:<meta charset='utf-8'>
使用 UTF-8 保存文件
指定中文字体:font-family: 'Microsoft YaHei'
输出的样式:

Q1:图表不显示?
检查浏览器控制台是否有 JavaScript 错误,通常是数据格式问题。
Q2:离线使用怎么办?
下载 Chart.js 文件到本地,修改引用路径:
这个技术可以应用到:
MRP 运算结果可视化
库存波动趋势分析
生产进度监控仪表板
质量分析图表
通过 VBA 自动化生成,可以实现定时导出、批量生成等功能。
如果你觉得这篇技术分享有用,欢迎点赞收藏。需要完整示例代码的朋友,可以在评论区留言交流。

