☰
Jspreadsheet v2 实战:从外部 CSV / JSON 文件创建 JavaScript 数据表格并导出
2026/9/29 9:05:26 网站建设 项目流程
  • 前端
  • UI组件

【免费下载链接】ce

Jspreadsheet is a lightweight JavaScript data grid component for creating interactive data grids with advanced spreadsheet controls.

项目地址:https://gitcode.com/gh_mirrors/ce/ce
点击查看免费下载

导读

本指南基于 Jspreadsheet v2(jQuery 插件形态,即 Jexcel)官方示例文档,讲解如何以远程 CSV 文件为数据源、自动将首行解析为表头来创建可交互的 JavaScript 电子表格,同时给出基于外部 JSON 文件的等价方案,并演示download、getData等方法将表格内容导出为 CSV 或 JSON。读者将掌握csv、csvHeaders、csvDelimiter、url、colWidths、tableOverflow、tableHeight等核心配置项的用法,理解数据加载与解析的底层原理(对应 worksheets.js 与 helpers.js 中的实现),并能够构建"远程数据导入 → 在线编辑 → 一键导出"的完整闭环。

环境准备:引入 jQuery、CSV 解析器与 Jspreadsheet v2

在开始之前,需要通过 CDN 依次引入三组资源:

  1. jQuery 3.x:Jspreadsheet v2 以 jQuery 插件的形式对外暴露jexcel方法,所有初始化与调用都基于 jQuery 实例。
  2. jquery-csv 0.8.x:第三方 CSV 解析插件,遵循 IETF RFC 4180 规范(100% 符合),用于把远程拉取到的 CSV 文本解析为二维数组。
  3. Jspreadsheet v2(Jexcel 2.1.0):组件核心的 JS 文件与 CSS 样式文件。
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-csv/0.8.3/jquery.csv.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jexcel/2.1.0/js/jquery.jexcel.js"></script> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jexcel/2.1.0/css/jquery.jexcel.min.css" type="text/css" />

说明:本示例中 jQuery 与 jquery-csv 是 Jspreadsheet v2 引入外部 CSV 数据时的运行前提。当前仓库的 Jspreadsheet 源码在数据源为csv时通过内部jSuites.ajax拉取文本并自行完成解析(详见下文 加载原理),因此若直接使用仓库中 src/index.js 构建的最新版本,可以省略 jquery-csv 依赖;但按 v2 官方示例原样运行(使用jexcel/2.1.0的 CDN 产物)则必须保留它。

从外部 CSV 文件创建表格

核心配置项

下面这段代码是官方示例的完整实现:通过csv指定远程文件地址,开启csvHeaders让首行成为表头,并配合表格布局相关配置。

<html> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-csv/0.8.3/jquery.csv.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jexcel/2.1.0/js/jquery.jexcel.js"></script> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jexcel/2.1.0/css/jquery.jexcel.min.css" type="text/css" /> <div id="my"></div> <p><button id='download'>Export my spreadsheet as CSV</button></p> <script> $('#my').jexcel({ // Full CSV URL csv:'/jspreadsheet/demo1.csv', // Use the first row of your CSV as the headers csvHeaders:true, tableOverflow:true, tableHeight:'300px', // Headers colWidths: [70, 200, 300], }); $('#download').on('click', function () { $('#my').jexcel('download'); }); </script> </html>

示例用到的配置参数说明如下(完整参数表可参考 v2 快速参考文档):

参数类型作用
csvstring远程 CSV 文件的完整 URL,组件加载完成后自动请求并解析
csvHeadersboolean为true时,CSV 第一行被当作列标题而不是数据行
tableOverflowboolean允许表格内容溢出容器,配合下面的高度限制启用内部滚动
tableHeightstring强制表格的最大高度,例如'300px',超出部分滚动显示
colWidthsarray逐列设置列宽(像素),如[70, 200, 300]对应三列
csvFileNamestring导出 CSV 时使用的默认文件名(见 download.js)
csvDelimiterstringCSV 字段分隔符,默认为逗号(见 helpers.js)

一键导出为 CSV

示例中绑定在按钮上的download方法是 Jspreadsheet 内置的导出方法(见 v2 快速参考 的方法表):

$('#my').jexcel('download');

它在底层会以csvDelimiter作为分隔符拼接全部单元格内容,并通过Blob生成text/csv;charset=utf-8文件触发浏览器下载,文件名取csvFileName或工作表名(当前版本源码见 download.js,其中还包含\uFEFF(BOM)前缀以保证 Excel 正确识别 UTF-8 编码)。若希望导出的文件名固定,可以在初始化时设置csvFileName: 'my-spreadsheet'。

从外部 JSON 文件创建表格

与 CSV 加载类似,Jspreadsheet 还提供了基于远程 JSON 文件的初始化方式:只需把csv换成url指令即可。

<html> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-csv/0.8.3/jquery.csv.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jexcel/2.1.0/js/jquery.jexcel.js"></script> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jexcel/2.1.0/css/jquery.jexcel.min.css" type="text/css" /> <div id="my1"></div> <script> $('#my1').jexcel({ // The URL from your data table file in JSON format. url:'/jspreadsheet/json' }); </script> </html>

url与csv的差异体现在响应内容的解析方式上:JSON 请求期望返回一个数组(或形如{ data: [...] }的对象),组件会直接将其作为表格数据;而 CSV 请求则按文本逐字符解析(详见下文)。实际接口返回结构可参考当前仓库中 test/data.js 等测试用例所使用的数据组织方式。

加载原理:csv 与 url 在源码中的实现

在 Jspreadsheet 当前源码中,工作表的初始化构建逻辑位于 src/utils/worksheets.js 的buildWorksheet函数(L434-L527),它根据配置项分流处理三种数据来源:

  • 存在csv选项(L453-L494):通过jSuites.ajax以 GET 方式请求csv指向的地址,dataType: 'text';拿到文本后调用parseCSV(result, obj.options.csvDelimiter)将其转换为二维数组。当csvHeaders == true且解析结果非空时,第一行会被shift()弹出作为表头,并依次写入obj.options.columns[i].title——如果预先通过columns配置了列标题,则以预配置值为准(代码注释明确说明"Precedence over pre-configurated titles",即预配置标题优先)。
  • 存在url选项(L495-L512):同样通过jSuites.ajax请求,但dataType: 'json',成功后取result.data ? result.data : result作为数据源,不做 CSV 解析。
  • 两者皆无:直接进入prepareTable使用内存数据(如data配置项)构建。

parseCSV函数定义在 src/utils/helpers.js,采用逐字符状态机:以delimiter(默认,)分隔字段,以"处理带引号字段与双引号转义(""表示字段内的字面引号),以\r\n/\n切分行,并兼容 CRLF 行尾。这正是示例中"包括表头"的 CSV 能够被正确解析的底层保障。

值得留意的是,上述加载是异步的(buildWorksheet内使用Promise收集加载任务并await Promise.all),因此依赖数据加载完成的初始化逻辑应放在onload事件中处理,事件列表见 v2 快速参考 的事件表。

进阶:加载后读取与再导出表格数据

以远程 CSV 建表只是第一步,实际业务中往往还需要把用户在表格中的编辑结果取出来。Jspreadsheet 的getData方法可以随时读取当前表格数据,配合$.csv.fromArrays或JSON.stringify即可再次生成 CSV / JSON:

$('#my').jexcel({ csv:'https://bossanova.uk/components/bossanova-ui/demo/demo1.csv', csvHeaders:true, colWidths: [70, 200, 300], }); $('#upload').on('click', function () { var data = $('#my').jexcel('getData'); $('#txt').val($.csv.fromArrays(data)); }); $('#json').on('click', function () { var data = $('#my').jexcel('getData'); $('#txt').val(JSON.stringify(data)); });

这里利用了getData(可选参数onlyHighlighedCells,传false表示取全部数据,方法签名见 v2 快速参考 方法表)与$.csv.fromArrays(jquery-csv 插件提供的数组转 CSV 工具)。这样便打通了完整的链路:

远程 CSV / JSON 导入 → 浏览器内编辑 →getData读取 → 导出 CSV 或 JSON

此外,若要在加载完成后追加或修改数据,还可结合setData(传 JSON 更新数据,第二个参数可控制是否忽略 spare 行列配置)、updateSettings等方法,程序化地操作表格,相关用法可参考 工作数据示例 与 程序化变更文档。

常见问题与注意事项

  • 跨域问题:csv/url指向的远程地址受浏览器同源策略限制,示例中的/jspreadsheet/demo1.csv是相对路径(与页面同源)。如果数据源跨域,需要服务端开启 CORS,或通过同源代理转发。
  • 表头冲突:开启csvHeaders: true后,CSV 首行自动成为列标题;若同时通过columns预配置了title,预配置值优先(见 worksheets.js)。
  • 编码与 Excel 兼容:导出时下载模块会为 CSV 内容添加\uFEFFBOM(download.js),避免 Excel 打开乱码;导入时请确保远程 CSV 文件本身为 UTF-8 编码。
  • 异步加载时序:数据加载是异步完成的,建议把依赖数据就绪的逻辑放进onload事件;表格溢出布局可参考 表格溢出示例。
  • 版本差异:本文示例基于 Jspreadsheet v2(jexcel/2.1.0,jQuery 插件形态)。当前仓库主分支的 Jspreadsheet 已演进为多工作表架构(worksheetName、worksheets等概念见 worksheets.js),API 与 v2 存在差异,升级时请参考 从 v4 升级到 v5 等相关迁移文档,并核对当前版本的 配置文档。

小结

本文围绕 Jspreadsheet v2 的官方示例,完整覆盖了从外部 CSV 创建电子表格(csv+csvHeaders+ 布局参数)、从外部 JSON 创建表格(url)、表格数据导出(download/getData)三条主线,并结合当前仓库源码(worksheets.js、helpers.js、download.js)解释了 CSV 拉取、解析、表头提取与导出的底层实现,同时给出了跨域、编码、异步时序等实战注意事项。掌握这些内容后,你可以快速把任意 CSV / JSON 数据源接入 Jspreadsheet,构建可在线编辑、可导出的数据表格页面。

  • 前端
  • UI组件

【免费下载链接】ce

Jspreadsheet is a lightweight JavaScript data grid component for creating interactive data grids with advanced spreadsheet controls.

项目地址:https://gitcode.com/gh_mirrors/ce/ce
点击查看免费下载

相关推荐

上一篇:如何快速掌握 Ansible Roles:面向初学者的完整指南
下一篇:ImGuiFileDialog实战:实现文件多选、缩略图显示与路径导航

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询