javascript 导出excel表

1、使用 xlsx-js-style工具(基于SheetJS )

地址: https://github.com/gitbrent/xlsx-js-style/

2、使用方法

引入:

复制代码
<!--引入xlsx-->
<script type="text/javascript" src="./assets/common/libs/xlsx/xlsx.min.js"></script>

示例:

复制代码
/**【自定义导出档案表】**/
    // 导出excel方法
    function exportExcel(dataList) {
        // 1. 先判断数据是否存在
        if(!dataList || dataList.length === 0){
            Feng.error("暂无导出数据!",err);
            return;
        }
        /**
         * 2. 对象数组转二维AOA
         * 示例:[{name:"张三",age:28}, {name:"李四",age:32}] 转换成 [["姓名","年龄"],["张三",28],["李四",32]]
         */
        var header = ["文件名称","文件描述","文件类型","成果目录名称","成果目录说明", "归档人",
                    "编制单位", "流程编码","流程名称","硬盘编码","硬盘描述","硬盘sn码"];

        var aoaData = [header];
        dataList.forEach(item => {
            aoaData.push([item.文件名称, item.文件描述, item.文件类型, item.成果目录名称, item.成果目录说明, item.归档人,
                item.编制单位, item.流程编码, item.流程名称,  item.硬盘编码, item.硬盘描述, item.硬盘sn码]);
        });

        // 3. 创建工作表(格式合法,不再报错)
        var ws = XLSX.utils.aoa_to_sheet(aoaData);

        // ========== 样式逻辑 ==========
        var headerStyle = {
            font: { bold: true, sz: 12, color: { rgb: '000000' } },
            fill: { fgColor: { rgb: 'CCCCCC' } },
            alignment: { horizontal: 'center', vertical: 'center' }
        };
        var range = XLSX.utils.decode_range(ws['!ref']);
        // 循环所有单元格设置样式
        for (var r = range.s.r; r <= range.e.r; r++) {
            for (var c = range.s.c; c <= range.e.c; c++) {
                const cellAddress = XLSX.utils.encode_cell({ r, c });
                if (!ws[cellAddress]) {
                    // 空单元格也要创建,否则无法显示边框
                    ws[cellAddress] = { v: '' };
                }
                // 第一行=表头
                if (r === 0) {
                    ws[cellAddress].s = createTitleCellStyle();
                } else {
                    ws[cellAddress].s = createContentCellStyle();
                }
            }
        }
        // 列宽
        ws['!cols'] = [{wch:20},{wch:20},{wch:20},{wch:20},{wch:20},{wch:20},{wch:20},{wch:20},{wch:20},{wch:20},{wch:20},{wch:20}];

        // 导出
        var wb = XLSX.utils.book_new();
        XLSX.utils.book_append_sheet(wb, ws, "档案表");
        XLSX.writeFile(wb, "档案表.xlsx");
    }
    // 导出数据请求
    $('#btnExport').click(function () {
        // 请求数据
        var excelUrl = Feng.ctxPath + "/chjArchiveResultslist/excel/list";
        $.ajax({
            url: excelUrl,
            type:"get",
            dataType:"json",
            contentType: "application/json",
            success:function(res){
                if("200" == res.code){
                    console.log("档案表查询:",res);
                    // 示例数据源
                    // var data = [
                    //         { id: 1, name: "张三", phone: "13800138000" },
                    //         { id: 2, name: "李四", phone: "13900139000" }
                    //     ];

                    // 调用导出excel表方法
                    exportExcel(res.data, "档案表");
                }
            },error:function(err){
                Feng.error("档案表查询失败!",err);
            }
        });
    });

    // 表头样式:加粗、居中、边框、灰色背景
    function createTitleCellStyle() {
        return {
            font: { bold: true },
            alignment: { horizontal: 'center', vertical: 'center' },
            fill: { fgColor: { rgb: 'FFDCDCDC' } },
            border: {
                top: { style: 'thin' },
                bottom: { style: 'thin' },
                left: { style: 'thin' },
                right: { style: 'thin' }
            }
        }
    }

    // 内容单元格样式:居中、边框
    function createContentCellStyle() {
        return {
            alignment: { horizontal: 'center', vertical: 'center' },
            border: {
                top: { style: 'thin' },
                bottom: { style: 'thin' },
                left: { style: 'thin' },
                right: { style: 'thin' }
            }
        }
    }
相关推荐
WL学习笔记4 小时前
日期类(C++)
开发语言·c++·日期类实现
谢亮_vipxieliang5 小时前
Go map与结构体的正确使用
开发语言·golang·哈希算法
H.莓飛5 小时前
【C++】命名空间、缺省参数、函数重载与引用
linux·开发语言·c++·visual studio
xxwl5855 小时前
数据结构知识点和代码实现总结(C语言实现)
c语言·开发语言·数据结构
lerhxx6 小时前
AI 应用如何高效优雅地恢复中断?—— "连接解耦 + 状态持久化"
前端·javascript
mantou1328 小时前
我给 AI Agent 做了个「油猴」:让 Claude Code / Codex 直接用你已登录的浏览器
前端·javascript·后端
默_笙8 小时前
🍕 一个主编、三个工种、两本手册:搭一支 AI 调研队
前端·javascript
code2cat8 小时前
Java进阶篇之AtomicMarkableReference:引用还在,标记已经改变
java·开发语言·cas·并发编程·逻辑删除
CappuccinoRose9 小时前
FormData数据处理
开发语言·前端·javascript·表单数据
Zguigo9 小时前
【CUDA8】第一个CUDA C++ Kernel --vector add
java·开发语言·c++