SheetJS 教程

SheetJS 入门示例

前面对 SheetJS 有了一个简单认识,下面将通过一个简单示例来快速敲开 SheetJS 的大门。

将HTML表格导出为Excel XLSX格式

该示例演示如何将 HTML 表格(table 标签)导出为 Excel XLSX 格式,详细步骤如下:

1、确保你的表格有一个ID:

<table id="TableToExport" border="1">
    <tr>
        <th colspan="3">SheetJS Table Export</th>
    </tr>
    <tr>
        <td>Author</td>
        <td>ID</td>
        <td>你好!</td>
    </tr>
    <tr>
        <td>SheetJS</td>
        <td>7262</td>
        <td>வணக்கம்!</td>
    </tr>
    <tr>
        <td colspan="3">Powered by SheetJS</td>
    </tr>
</table>

2、在你的页面中包含对 SheetJS 库的引用:

<script src="https://cdn.sheetjs.com/xlsx-0.20.3/package/dist/xlsx.full.min.js"></script>

注意:为了访问速度,将该 JS 存放到自己的资源库中,访问如下:

<script src="https://www.hxstrive.com/cdn/libs/SheetJS/0.20.3/xlsx.full.min.js"></script>

3、添加一个按钮,用户点击该按钮即可生成导出文件:

<button id="sheetjsexport"><b>Export as XLSX</b></button>

4、 为点击事件添加一个事件处理器,以将表格数据导出为XLSX格式:

<script>
    document.getElementById("sheetjsexport").addEventListener('click', function() {
      /* 从HTML DOM表格创建工作表 */
      var wb = XLSX.utils.table_to_book(document.getElementById("TableToExport"));
      /* 导出到文件(开始下载) */
      XLSX.writeFile(wb, "SheetJSTable.xlsx");
    });
</script>

完整示例

下面是示例的完整代码,点击 “试一试” 可以在线预览:

示例:

<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>SheetJS 教程</title>
    <!-- 引入 SheetJS 库 -->
    <script src="https://www.hxstrive.com/cdn/libs/SheetJS/0.20.3/xlsx.full.min.js"></script>
</head>
<body>
    
    <!-- 创建一个表格 -->
    <table id="TableToExport" border="1">
        <tr>
            <th colspan="3">SheetJS Table Export</th>
        </tr>
        <tr>
            <td>Author</td>
            <td>ID</td>
            <td>你好!</td>
        </tr>
        <tr>
            <td>SheetJS</td>
            <td>7262</td>
            <td>வணக்கம்!</td>
        </tr>
        <tr>
            <td colspan="3">Powered by SheetJS</td>
        </tr>
    </table>


    <!-- 添加一个按钮,触发导出 -->
    <p>
        <button type="button" id="sheetjsexport"><b>Export as XLSX</b></button>
    </p>

    <!-- 编写JS脚本,实现导出功能 -->
    <script>
        document.getElementById("sheetjsexport").addEventListener('click', function() {
            /* 从HTML DOM表格创建工作表 */
            var wb = XLSX.utils.table_to_book(document.getElementById("TableToExport"));
            /* 导出到文件(开始下载) */
            XLSX.writeFile(wb, "SheetJSTable.xlsx");
        });
    </script>
</body>
</html>

看看效果👉自己动手试一试 »

下载并预览 Apple Numbers 工作簿

Apple Numbers(常称 Numbers 表格)是苹果公司 iWork 办公套件的核心组件,以画布式排版、跨设备协作与直观数据处理为特色,原生适配 macOS、iOS、iPadOS,内置数百种函数与模板,适合个人 / 团队创建报表、预算表、数据分析表等,可与 Excel 格式互转,广泛用于数据管理与可视化场景。

详细步骤如下:

1、为表格创建一个容器 DIV:

<div id="TableContainer"></div>

2、在你的页面中包含对 SheetJS 库的引用:

<script src="https://cdn.sheetjs.com/xlsx-0.20.3/package/dist/xlsx.full.min.js"></script>

3、添加一个脚本块来下载并更新页面:

<script>
  (async() => {
    /* 替换为文件的URL */
    const URL_TO_DOWNLOAD = "https://docs.sheetjs.com/pres.numbers";
    const ab = await (await fetch(URL_TO_DOWNLOAD)).arrayBuffer();
    /* 解析文件并获取第一个工作表 */
    const wb = XLSX.read(ab);
    const wsname = wb.SheetNames[0];
    const ws = wb.Sheets[wsname];
    /* 生成 HTML */
    var output = document.getElementById("TableContainer");
    output.innerHTML = XLSX.utils.sheet_to_html(ws);
  })();
</script>

注意:格式 .numbers 是苹果 iWork 套件中 Numbers 应用的原生文件格式,本质是包含 XML 数据与资源的 ZIP 归档包,用于存储表格数据、公式、图表、样式等内容

完整示例

下面是示例的完整代码,点击 “试一试” 可以在线预览:

示例:

<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>SheetJS 教程</title>
    <!-- 引入 SheetJS 库 -->
    <script src="https://www.hxstrive.com/cdn/libs/SheetJS/0.20.3/xlsx.full.min.js"></script>
</head>
<body>
    
    <!-- 创建一个表格 -->
    <div id="TableContainer"></div>

    <!-- 编写JS脚本,实现导出功能 -->
    <script>
    (async() => {
        /* 替换为文件的URL */
        const URL_TO_DOWNLOAD = "https://www.hxstrive.com/cdn/resources/sheetjs/sheetjs_pres.numbers";
        const ab = await (await fetch(URL_TO_DOWNLOAD)).arrayBuffer();

        /* 解析文件并获取第一个工作表 */
        const wb = XLSX.read(ab);
        const wsname = wb.SheetNames[0];
        const ws = wb.Sheets[wsname];

        /* 生成 HTML */
        var output = document.getElementById("TableContainer");
        output.innerHTML = XLSX.utils.sheet_to_html(ws);
    })();
    </script>
</body>
</html>

看看效果👉自己动手试一试 »

在浏览器上预览工作簿

此示例从一个 CSV 字符串开始。使用“文件输入”元素选择要加载的工作簿。使用“导出XLSX”按钮将表格写入XLSX。

完整代码如下:

示例:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>SheetJS 教程</title>
    <!-- 引入 SheetJS 库 -->
    <script src="https://www.hxstrive.com/cdn/libs/SheetJS/0.20.3/xlsx.full.min.js"></script>
    <!-- 样式美化(和之前保持一致) -->
    <style>
        body { padding: 20px; font-family: Arial, sans-serif; }
        .container { max-width: 800px; margin: 0 auto; }
        button { margin-left: 10px; padding: 6px 12px; cursor: pointer; }
        input[type="file"] { margin-bottom: 10px; }
        #tabeller { margin-top: 20px; border-collapse: collapse; width: 100%; }
        #tabeller th, #tabeller td { border: 1px solid #ddd; padding: 8px; text-align: left; }
        #tabeller th { background-color: #f2f2f2; }
        #table-preview { margin-top: 20px; }
    </style>
</head>
<body>
    <div class="container">
        <!-- 导入文件按钮 -->
        <input type="file" id="file-input" accept=".xlsx,.xls,.csv" />
        <!-- 导出按钮 -->
        <button id="export-btn"><b>Export XLSX!</b></button>
        <!-- 表格预览区域 -->
        <div id="table-preview"></div>
    </div>

    <script>
        /**
         * 渲染表格到页面
         * @param {Object} worksheet - SheetJS工作表对象
         */
        function renderTable(worksheet) {
            // 生成HTML表格字符串
            const tableHtml = XLSX.utils.sheet_to_html(worksheet, { id: "tabeller" });
            // 插入到预览区域
            const previewContainer = document.getElementById('table-preview');
            previewContainer.innerHTML = tableHtml;
            // 缓存表格DOM元素,方便后续导出
            tableElement = document.getElementById('tabeller');
        }

        /**
         * 处理文件导入
         */
        async function handleFileImport(e) {
            // 未选择文件则返回
            if (!e.target.files[0]) return;
            const file = e.target.files[0];
            
            // 读取文件为ArrayBuffer
            const data = await file.arrayBuffer();
            // 解析文件
            const wb = XLSX.read(data);
            // 取第一个工作表
            const ws = wb.Sheets[wb.SheetNames[0]];
            // 渲染表格
            renderTable(ws);
            // 清空文件选择框(可选,提升体验)
            e.target.value = '';
        }

        /**
         * 处理文件导出
         */
        function handleFileExport() {
            // 校验表格是否存在
            if (!tableElement) {
                alert("暂无表格数据可导出!");
                return;
            }
            // 从HTML表格生成工作簿
            const wb = XLSX.utils.table_to_book(tableElement);
            // 导出为XLSX文件
            XLSX.writeFile(wb, "SheetJSIntro.xlsx");
        }

        // 核心变量:存储表格DOM
        let tableElement = null;

        // 加载示例CSV数据
        const csv = `\
            This,is,a,Test
            வணக்கம்,สวัสดี,你好,가지마
            1,2,3,4`;
        // 解析CSV为工作簿并生成表格
        const wb = XLSX.read(csv, { type: "string" });
        const ws = wb.Sheets.Sheet1;
        renderTable(ws);

        // 绑定导入文件事件
        document.getElementById('file-input').addEventListener('change', handleFileImport);
        // 绑定导出按钮事件
        document.getElementById('export-btn').addEventListener('click', handleFileExport);
    </script>
</body>
</html>

看看效果👉自己动手试一试 »

参考资料 https://docs.sheetjs.com/docs/,更多知识请阅读后续章节。

 

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
其他应用
公众号