You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rails应用中如何实现含图表的Excel导出?(涉及axlsx与QuickChart)

在Rails中导出带图表的Excel文件解决方案

一、关于QuickChart API的使用方式

QuickChart是生成图表图片的服务,没法直接在.xlsx模板里调用API,但你可以先调用API生成图表图片,再把图片嵌入到axlsx生成的Excel文件中。具体操作:

  1. 构造QuickChart的请求参数(比如图表类型、数据),发送HTTP请求获取图片二进制数据。
  2. 使用axlsx的add_image方法,把图片插入到Excel的指定位置。

示例代码片段:

require 'net/http'

# 获取QuickChart图片数据
chart_url = "https://quickchart.io/chart?c={type:'bar',data:{labels:['A','B','C'],datasets:[{data:[10,20,30]}]}}"
image_data = Net::HTTP.get(URI(chart_url))

# 用axlsx生成Excel并插入图片
Axlsx::Package.new do |p|
  p.workbook.add_worksheet(name: 'Chart Sheet') do |sheet|
    # 写入基础数据
    sheet.add_row ['Category', 'Value']
    sheet.add_row ['A', 10]
    sheet.add_row ['B', 20]
    sheet.add_row ['C', 30]
    # 插入生成的图表图片
    sheet.add_image(image_src: StringIO.new(image_data), start_at: 'E2') do |image|
      image.width = 400
      image.height = 300
    end
  end
  p.serialize('chart_excel.xlsx')
end

二、直接在Excel中绘制图表的Gem推荐

1. axlsx(本身内置图表功能)

你正在使用的axlsx其实自带完整的图表绘制能力,无需额外依赖。它支持柱状图、折线图、饼图、散点图等多种类型,还能直接绑定Excel工作表中的数据范围,实现数据与图表联动。

示例代码(Rails控制器中生成带柱状图的Excel):

def export_excel
  package = Axlsx::Package.new
  workbook = package.workbook

  workbook.add_worksheet(name: 'Sales Data') do |sheet|
    # 写入数据
    sheet.add_row ['Month', 'Revenue']
    sheet.add_row ['Jan', 15000]
    sheet.add_row ['Feb', 22000]
    sheet.add_row ['Mar', 18000]

    # 创建柱状图并绑定数据
    chart = sheet.add_chart(Axlsx::BarChart, start_at: 'D2', end_at: 'K15')
    chart.title = 'Monthly Revenue'
    chart.add_series(name: 'Revenue', data: sheet['B2:B4'], labels: sheet['A2:A4'])
  end

  send_data package.to_stream.read, filename: 'sales_report.xlsx', type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
end

2. axlsx_rails

这是专为Rails集成axlsx开发的gem,支持用ERB模板编写Excel内容(包括图表),更贴合Rails的开发习惯。你可以在模板中直接定义图表逻辑,绑定业务数据。

使用步骤:

  • 添加gem到Gemfile:gem 'axlsx_rails'
  • 生成对应模板文件(比如app/views/reports/sales.xlsx.axlsx),在模板中编写图表和数据逻辑。

总结

  • 如果偏好QuickChart的图表样式,可采用“生成图片+嵌入Excel”的方式;
  • 更推荐直接使用axlsx内置的图表功能,无需依赖外部服务,图表与数据的联动性更好,导出效率也更高。

内容的提问来源于stack exchange,提问作者umer butt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 03:20:16