使用SheetJS读写Excel文件

这篇具有很好参考价值的文章主要介绍了使用SheetJS读写Excel文件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目的

项目中有一个Excel转JSON的工具,之前这个工具一直使用 Pythonopenpyxl 库来编写的,然后使用 pyinstaller 打包成 .exe 文件。之前这个工具只是个命令行工具,不带界面的。现在项目升级,打算使用Web前端方式重写这个工具,调整部分功能并新增图形界面。这篇文章中将使用 SheetJS 来操作Excel文件,对相关操作进行简单记录。
sheetjs文档,Web与JS相关,excel,python,开发语言,sheetjs,表格

基础说明

前端操作Excel文件比较常用的库有 SheetJSExcelJS

先说说 ExcelJS

项目地址:https://github.com/exceljs/exceljs

这个库是完全开源的,所有功能都开放使用,这是它相比 SheetJS 的优势。不过最后我没有使用这个库的原因有二:

  • 取单元格使用 ws.getCell('A1') 方式,和 openpyxl 使用 ws['A1'] 方式取单元格相比稍显复杂;
  • 没从文档中找到获取所有合并的单元格信息的方法(虽然最后查看源码可以用 ws._merges 方式来获取合并单元格信息);

再说说 SheetJS

官方页面:https://sheetjs.com/
项目地址:https://github.com/SheetJS/sheetjs

这个库最大的问题就是分为社区版(CE)和专业版(Pro),专业版才是完整功能的版本,支持完整的样式设置、图表、图像处理等功能。当然只是一般的数据读写等操作的话社区版也够用了。

这个库可以使用 ws['A1'] 方式取单元格,操作上人性化些。

SheetJS 可以直接在前端页面中使用,也可以以构建方式使用或是后端使用,这里以接在前端页面中使用进行说明。

<!-- use version 0.19.1 -->
<script lang="javascript" src="https://cdn.sheetjs.com/xlsx-0.19.1/package/dist/xlsx.full.min.js"></script>

<!-- use the latest version -->
<script lang="javascript" src="https://cdn.sheetjs.com/xlsx-latest/package/dist/xlsx.full.min.js"></script>

读取

读取Excel文件操作比较简单,从原始数据中获取工作簿,从工作簿中获取工作表,从工作表中获取单元格数据,基本上就是这个流程了。下面是示例代码:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <script src="https://cdn.sheetjs.com/xlsx-0.19.1/package/dist/xlsx.full.min.js"></script>
    <script>
        // 从文件数据中解析出excel内容
        function parse(data) {
            const workbook = XLSX.read(data); // 从原始数据获取工作簿
                                              // 后端使用可以使用 readFile() 方法直接读取文件

            var first_sheet_name = workbook.SheetNames[0]; // 获得第一个工作表名称

            const worksheet = workbook.Sheets[first_sheet_name]; // 获取工作表

            console.log(worksheet['A1']); // 读取并打印A1端元格数据

            console.log(worksheet['!merges']); // 打印所有合并单元格信息数组
            
            console.log(worksheet['!ref']); // 打印输出当前工作表使用的范围
        }

        // 读取文件数据
        function read(file) {
            let reader = new FileReader();
            reader.onload = function (e) {
                parse(e.target.result);
            };
            reader.readAsArrayBuffer(file);
        }
    </script>
</head>

<body>
    <input type="file" onchange="read(this.files[0])" /><br>
</body>

</html>

下面是单元格数据获取演示:
获取单元格数据时,如果有内容会返回一个对象,对象中 t 表示数据类型( s 表示字符串、 n 表示数值……), v 为原始数据, w 为格式化后的文本……。更多内容可以参考下面链接:
https://docs.sheetjs.com/docs/csf/cell/
如果单元格为空则返回 undefined 。对于合并单元格而言其内容位于左上角的格子。
sheetjs文档,Web与JS相关,excel,python,开发语言,sheetjs,表格

下面是获取合并单元格信息的演示:
下图中 s 表合并单元格的左上格子,e 表示右下格子; c 表示列序号(从0开始), r 表示行序号(从0开始)。
sheetjs文档,Web与JS相关,excel,python,开发语言,sheetjs,表格

事实上 A1 C3 这种表达是Excel中对于单元格的描述,在SheetJS中使用的是 {r:x, c:x} 的方式,两者之间可以通过下面方式转换:

let jsaddr = XLSX.utils.decode_cell("A2"); // 得到{r:1, c:0}
let rawaddr = XLSX.utils.encode_cell({r:1, c:0}); // 得到A2

let jsaddrr = XLSX.utils.decode_range("A1:D3"); // 得到{ s: { c: 0, r: 0 }, e: { c: 3, r: 2 } }
let rawaddrr = XLSX.utils.encode_range({ s: { c: 0, r: 0 }, e: { c: 3, r: 2 } }); // 得到A1:D3

写入

写入操作主要也是处理工作簿、工作表、单元格子等内容,常用的一些操作如下:

let workbook = XLSX.utils.book_new(); // 新建工作簿
let workbook = XLSX.utils.table_to_book(table); // 从dom的table元素新建工作簿

// 也可以直接操作现有的工作簿

let worksheet = XLSX.utils.aoa_to_sheet(data); // 从二维数组新建工作表
let worksheet = XLSX.utils.json_to_sheet(data); // 从json数据新建工作表
let worksheet = XLSX.utils.table_to_sheet(table); // 从dom的table元素新建工作表

XLSX.utils.book_append_sheet(workbook, worksheet, "sheet1"); // 将工作表添加到工作簿

XLSX.utils.sheet_add_aoa(worksheet, data, { origin: "A1" }); // 将二维数组添加到工作表
XLSX.utils.sheet_add_json(worksheet, data, { origin: "A1" }); // 将json数据添加到工作表
XLSX.utils.sheet_add_dom(worksheet, table, { origin: "A1" }); // 将dom的table元素添加到工作表

// 合并单元格就是设置其合并的信息
if(!worksheet["!merges"]) worksheet["!merges"] = [];
worksheet["!merges"].push(XLSX.utils.decode_range("B3:D4"));

let html = XLSX.utils.sheet_to_html(worksheet); // 将工作表内容转成html
let json= XLSX.utils.sheet_to_json(worksheet); // 将工作表内容转成json
let csv = XLSX.utils.sheet_to_csv(worksheet); // 将工作表内容转成csv格式文本
let txt = XLSX.utils.sheet_to_txt(worksheet); // 将工作表内容转成UTF16文本

let data = XLSX.write(workbook, opts); // 生成文档数据
XLSX.writeFile(workbook, filename, opts); // 生成文档文件,浏览器环境中将直接下载
XLSX.writeFileAsync(filename, workbook, opts, cb); // 生成文档文件,浏览器环境中将直接下载
XLSX.writeFileXLSX(workbook, filename, opts); // 生成.xlsx格式文件,浏览器环境中将直接下载

下面是个简单的写入操作示例代码:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <script src="https://cdn.sheetjs.com/xlsx-0.19.1/package/dist/xlsx.full.min.js"></script>
    <script>
        function download() {
            const workbook = XLSX.utils.book_new(); // 新建工作簿

            const worksheet = XLSX.utils.aoa_to_sheet([[22, 333]]); // 从二维数组新建工作表

            XLSX.utils.sheet_add_aoa(worksheet, [["Naisu"]], { origin: 'C2' }); // 向单元格写数据
            XLSX.utils.sheet_add_aoa(worksheet, [[233]], { origin: 'A3' }); // 向单元格写数据
            
            worksheet["!merges"] = [XLSX.utils.decode_range("B3:D4")]; // 合并单元格

            XLSX.utils.book_append_sheet(workbook, worksheet, "sheet1"); // 将工作表添加到工作簿

            XLSX.writeFileXLSX(workbook, 'myfile.xlsx'); // 将工作簿数据建立为./xlsx文件(浏览器环境下会直接下载)
        }
    </script>
</head>

<body>
    <button onclick="download()">下载</button>
</body>

</html>

sheetjs文档,Web与JS相关,excel,python,开发语言,sheetjs,表格

总结

SheetJS 的基础使用是比较简单的,更多内容可以参考官方文档。另外也有中文文档可供参考:
https://github.com/rockboom/SheetJS-docs-zh-CN文章来源地址https://www.toymoban.com/news/detail-622100.html

到了这里,关于使用SheetJS读写Excel文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于 SheetJS 的前端合并单元格复杂表头导入

    项目功能 任意层级合并单元格复杂表头解析 自动转化为目标层级的数据结构 自动生成基于 antdv 的 table 列配置数据 columns 及对于数据源 dataSource。在页面端复现 Excel 效果。 在线示例 步骤零:如需快速测试,可点击顶部的示例按钮,可快速填充测试数据,并自动下载对应的

    2024年01月16日
    浏览(48)
  • xlsx.js: 基于 JavaScript 的 Excel 文件读写库

    如果你需要在浏览器端处理 Excel 文件,那么 xlsx.js 可能是一个不错的选择。这是一个基于 JavaScript 的库,可以方便地读取、创建和修改 Excel 文件。 支持多种文件格式:.xlsx, .xlsm, .xlsb, .ods, .csv 等。 支持数据的读取和写入。 支持多种单元格样式,如字体、颜色、背景色等。

    2024年04月17日
    浏览(54)
  • 使用EasyExcel读写Excel文件

    笔者之前一直使用POI读写Excel文件,最近有个需求需要读取大概80万行数据的Excel,使用POI读取到10.2万行左右就卡死不动了,而且CPU占用直接拉满到100%,内存占用也很高。 查找资料后,发现POI提供了读取大量数据的方法,但是用起来比较复杂。同时看到有人提到用EasyExcel读取

    2024年02月13日
    浏览(51)
  • Python使用openpyxl读写excel文件

    需求:读入sample.xlsx中的信息,通过分析其中的身份证号信息,得到每个人的出生日期,性别,年龄,所在省份,星座,属相等等,将结果写入到另一个excel文件中。 首先,要使用openpyxl第三方库需要安装,安装方法如下: 程序一开头为了能使用第三方库,需要先导入 读入

    2024年02月09日
    浏览(36)
  • Python 读写 Excel 文件库推荐和使用教程

    Python 读写 Excel 文件的库总体看还是很多的, 各有其优缺点, 以下用一图总结各库的优缺点, 同时对整体友好的库重点介绍其使用教程。 库名称 .xls .xlsx 读取 写入 修改 保存 格式调整 插入图片 xlrd √ √ √ × × × × × xlwt √ × × √ √ √ √ √ xlutils √ × × √ √ √ × ×

    2024年02月11日
    浏览(44)
  • 编译xlnt开源库源码,在linux平台使用c++读写excel文件

    里面又编译说明手册 获取到xlnt-master.zip 获取到libstudxml-master.zip 1 解压xlnt-master.zip,解压命令:unzip xlnt-master.zip 2 解压libstudxml-master.zip,解压命令:unzip libstudxml-master.zip 3 将libstudxml-master/libstudxml拷贝到xlnt-master/third-party/libstudxml 注意:是这个xlnt-master/third-party/libstudxml目录下,

    2024年04月25日
    浏览(33)
  • Node.js 使用 officecrypto-tool 读取加密的 Excel (xls, xlsx) 和 Word( docx)文档

    Node.js 使用 officecrypto-tool 读取加密的 Excel (xls, xlsx) 和 Word( docx)文档, 还支持 xlsx 和 docx 文件的加密(具体使用看文档)。暂时不支持doc文件的解密 传送门:officecrypto-tool 读取加密的 Excel 示例 读取加密的 Word 示例 使用:mammoth officecrypto-tool 使用其他的word读取库也是一样的道理

    2024年02月10日
    浏览(39)
  • Excel文件解析以及超大Excel文件读写

             在应用程序的开发过程中,经常需要使用Excel 文件来进行数据的导入或导出。所以,在通过ava语言实现此类需求的时候,往往会面临着Excel文件的解析(导入)或生成(导出)。         在Java技术生态圈中,可以进行Excel文件处理的主流技术包括: Apache POI 、JXL 、Alibaba

    2024年02月07日
    浏览(38)
  • java中 Excel文件解析及超大Excel文件读写

    本文主要对Excel中数据的解析和生成进行总结                   在应用程序的开发过程中,我们经常要用到Excel进行数据的导入或导出。所以,在通过Java语言实现此类需求时,通常会对Excel文件进行解析或生成。   1,概述             在应用程序开发过程中,经常需

    2024年02月07日
    浏览(39)
  • CANoe-读写Excel文件

    1、CANoe读写Excel文件操作: 针对所有可用Excel打开的文件格式,目前CANoe仅支持.csv(文本文件)文件的读写,无法用CAPL编程实现对Excel文件的读写,.xlsx文件和.xls文件无法进行读写。可以在CANoe下创建.NET测试节点,实现对Excel文件的读写操作。 如图所示,openFileRead方法: If

    2024年02月05日
    浏览(100)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包