- 前端
- UI组件
【免费下载链接】ce
Jspreadsheet is a lightweight JavaScript data grid component for creating interactive data grids with advanced spreadsheet controls.
导读
本指南基于 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 依次引入三组资源:
- jQuery 3.x:Jspreadsheet v2 以 jQuery 插件的形式对外暴露
jexcel方法,所有初始化与调用都基于 jQuery 实例。 - jquery-csv 0.8.x:第三方 CSV 解析插件,遵循 IETF RFC 4180 规范(100% 符合),用于把远程拉取到的 CSV 文本解析为二维数组。
- 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 快速参考文档):
| 参数 | 类型 | 作用 |
|---|---|---|
csv | string | 远程 CSV 文件的完整 URL,组件加载完成后自动请求并解析 |
csvHeaders | boolean | 为true时,CSV 第一行被当作列标题而不是数据行 |
tableOverflow | boolean | 允许表格内容溢出容器,配合下面的高度限制启用内部滚动 |
tableHeight | string | 强制表格的最大高度,例如'300px',超出部分滚动显示 |
colWidths | array | 逐列设置列宽(像素),如[70, 200, 300]对应三列 |
csvFileName | string | 导出 CSV 时使用的默认文件名(见 download.js) |
csvDelimiter | string | CSV 字段分隔符,默认为逗号(见 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.
相关推荐
Aspire 托管集成中的控制器/协调器(Controller/Reconciler)原型:串行编排、命令状态与漂移检测实战指南
Aspire 托管集成中的控制器/协调器(Controller/Reconciler)原型:串行编排、命令状态与漂移检测实战指南 导读 本文围绕 Aspire
前端UI组件如何用Honcho Get Context突破上下文窗口限制:无限对话的秘密武器
如何用Honcho Get Context突破上下文窗口限制:无限对话的秘密武器 Honcho Get Context 是开源 AI 记忆库 Honcho 的核
人工智能AI AgentAgent 记忆RAG后端MCP 服务揭秘DINOv2多头注意力机制:5个核心技术实现深度解析
揭秘DINOv2多头注意力机制:5个核心技术实现深度解析 想象一下,当你的眼睛扫过一张复杂的显微镜图像时,大脑会自动聚焦于细胞核的边缘、细胞膜的轮廓,而不是背景
人工智能计算机视觉深度学习预训练基础模型
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考