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

AmCharts如何导出包含JPG图表与Excel文件的ZIP压缩包

AmCharts关联资源打包导出ZIP实现方案

核心流程

整个实现分为三个独立环节,环节输出的Blob对象均可直接被ZIP打包工具识别,无需额外格式转换:

  • 通过AmCharts内置导出能力获取合规的JPG格式图像Blob,规避跨域污染问题
  • 将图表关联的数据源转换为xlsx格式的Blob对象
  • 通过JSZip将两类Blob打包为ZIP文件触发浏览器下载

步骤1:获取可打包的图表JPG图片对象

禁止直接从DOM抓取canvas节点转图片——如果图表加载过外部图片资源,手动抓取canvas会触发浏览器跨域安全限制,导致生成的图片为空。用导出插件内置的capture接口已经完成了跨域合规处理,可以直接生成可用的图片Blob:

// 以AmCharts v4/v5版本为例
// 触发图表捕获,不使用默认的导出下载逻辑
chart.exporting.capture(false).then((canvasElement) => {
  // 将canvas转为指定质量的JPG格式Blob
  return new Promise((resolve) => {
    canvasElement.toBlob(
      (resultBlob) => resolve(resultBlob), 
      'image/jpeg', 
      0.9 // 图像质量,范围0-1
    );
  });
}).then((chartJpgBlob) => {
  // 输出的chartJpgBlob就是可直接用于打包的图片对象
  window.tempJpgBlob = chartJpgBlob;
});

步骤2:生成关联数据源的Excel文件Blob

直接使用xlsx库将图表绑定的数据源转换为可打包的xlsx格式对象:

import * as XLSX from 'xlsx';
// 提取图表绑定的原始数据源
const chartDataSource = chart.data;
// 构建Excel工作表
const worksheet = XLSX.utils.json_to_sheet(chartDataSource);
const workbook = XLSX.utils.book_new();
XLSX.utils.book_append_sheet(workbook, worksheet, "图表原始数据");
// 生成可直接打包的Excel Blob对象
const chartExcelBlob = XLSX.write(workbook, {
  bookType: 'xlsx',
  type: 'blob'
});

步骤3:打包两类文件为ZIP并导出

使用JSZip将两个Blob对象写入ZIP结构,最终触发浏览器下载:

import JSZip from 'jszip';
const zipInstance = new JSZip();
// 写入JPG图片文件
zipInstance.file('图表预览.jpg', window.tempJpgBlob);
// 写入Excel数据源文件
zipInstance.file('图表关联数据源.xlsx', chartExcelBlob);
// 生成ZIP格式Blob并触发下载
zipInstance.generateAsync({type: 'blob'}).then((zipBlob) => {
  const downloadLink = URL.createObjectURL(zipBlob);
  const downloadAnchor = document.createElement('a');
  downloadAnchor.href = downloadLink;
  downloadAnchor.download = '图表及数据打包导出.zip';
  downloadAnchor.click();
  // 释放临时生成的URL资源
  URL.revokeObjectURL(downloadLink);
});

注意:所有资源生成逻辑均为异步流程,必须等JPG图片Blob、Excel Blob完全生成后,再执行ZIP打包操作,否则会出现ZIP内文件损坏的问题。

内容的提问来源于stack exchange,提问作者Bayan Zaza

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.25 15:24:02