如何用jQuery和Ajax下载.xlsx文件?含CSV转XLSX及单元格处理需求
解决方案:将CSV下载改为XLSX并保留JSON完整内容
核心思路
使用**SheetJS(xlsx)**库实现XLSX文件生成,该库能自动处理含特殊字符(如逗号)的内容,确保JSON数据完整存入单个单元格,同时支持多工作表结构,比原CSV的空行分隔更规范。
步骤实现
1. 引入SheetJS库
将SheetJS库文件下载到本地后引入项目:
<script src="path/to/xlsx.full.min.js"></script>
2. 修改原有代码逻辑
替换原CSV生成及下载部分,改用SheetJS构建XLSX文件:
if(response.result.tripDetails.length != 0 || response.result.requestedData.length != 0) { // 表头及数据初始化 let rows1 = [ ["Trip ID", "Trip", "Country", "Add Date Time GMT", "Add Date Time Local", "Remove Date Time GMT", "Remove Date Time Local","Create Date"] ]; let rows2 = [ ["Request", "Local Time", "GMT Time", "Created Date"] ]; // 处理行程数据 response.result.tripDetails.forEach(function (locationTrackingTripData) { let row = [ locationTrackingTripData.tripId, locationTrackingTripData.trip, locationTrackingTripData.country, locationTrackingTripData.addDateTimeGMT, locationTrackingTripData.addDateTimeLocal, locationTrackingTripData.removeDateTimeGMT, locationTrackingTripData.removeDateTimeLocal, locationTrackingTripData.createdDate ]; rows1.push(row); }); // 处理请求数据:将JSON转为字符串,确保完整存入单元格 response.result.requestedData.forEach(function (locationTrackingRequestedData) { let row = [ JSON.stringify(locationTrackingRequestedData.request), // 转成JSON字符串避免拆分 locationTrackingRequestedData.localTime, locationTrackingRequestedData.GMTTime, locationTrackingRequestedData.createdDate ]; rows2.push(row); }); // 构建XLSX工作簿 const wb = XLSX.utils.book_new(); // 创建第一个工作表(行程详情) const ws1 = XLSX.utils.aoa_to_sheet(rows1); XLSX.utils.book_append_sheet(wb, ws1, "Trip Details"); // 创建第二个工作表(请求数据) const ws2 = XLSX.utils.aoa_to_sheet(rows2); XLSX.utils.book_append_sheet(wb, ws2, "Requested Data"); // 触发XLSX文件下载 XLSX.writeFile(wb, "locationTrackingDetails.xlsx"); }
关键说明
- JSON内容处理:通过
JSON.stringify()将JSON对象转为字符串,SheetJS会将该字符串完整写入单个单元格,不会因逗号拆分内容。 - 多工作表设计:原CSV中用空行分隔的两组数据,改为两个独立工作表,更符合Excel的使用习惯,数据结构更清晰。
- 可靠性提升:相比手动拼接CSV,SheetJS会自动处理单元格的特殊字符、换行等问题,避免出现格式错误。
内容的提问来源于stack exchange,提问作者Dulani Maheshi
相关产品推荐
相关产品推荐

