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' }
            }
        }
    }
相关推荐
西门啐血2 小时前
上位机开发之假装有设备,使用 C# 模拟串口设备
开发语言·mongodb·c#
小罗水2 小时前
第17章 后台管理端与演示支持
javascript·vue.js·ecmascript
阿米亚波3 小时前
【C++ STL】std::unordered_multiset
开发语言·数据结构·c++·笔记·stl
我是唐青枫3 小时前
Java ReentrantLock 实战详解:比 synchronized 更灵活的可重入锁
java·开发语言
QH139292318803 小时前
# R&S ZNB43 ZNA43 ZNA67矢量网络分析仪
开发语言·网络·php
脚踏实地皮皮晨4 小时前
003003001_Grid控件
开发语言·windows·算法·c#·visual studio
十年磨剑走天涯4 小时前
C++ STL 容器操作复杂度速查表
开发语言·c++
万少4 小时前
DeepSeek-V4-Flash 正式版上线了,但这 3 个坑我帮你提前踩了
前端·javascript·后端
always_TT4 小时前
【Python requirements.txt 依赖管理】
开发语言·python