Excelize 开源基础库发布 2.9.1 版本更新

Excelize 开源基础库 2.9.1 版本发布, 2025 年首个更新

Excelize 是 Go 语言编写的用于操作 Office Excel 文档基础库,基于 ECMA-376,ISO/IEC 29500 国际标准。可以使用它来读取、写入由 Excel、WPS、OpenOffice 等办公软件创建的电子表格文档。支持 XLAM / XLSM / XLSX / XLTM / XLTX 等多种文档格式,高度兼容带有样式、图片(表)、透视表、切片器等复杂组件的文档,并提供流式读写支持,用于处理包含大规模数据的工作簿。可应用于各类报表平台、云计算、边缘计算等系统。自 2016 年开源以来已成为云原生应用尤其是 Go 语言开发者在处理电子表格办公文档时的热门选择,正在被广泛应用于大型互联网公司、中小企业客户和初创公司。入选 2023 开源创新榜优秀开源项目、荣获 2022 年中国开源创新大赛一等奖、2020 Gopher China - Go 领域明星开源项目 (GSP)、2018 年开源中国码云最有价值开源项目 GVP (Gitee Most Valuable Project)。

开源代码

GitHub: github.com/xuri/excelize
中文文档: xuri.me/excelize/zh-hans

2025年5月13日,社区正式发布了 2.9.1 版本,该版本包含了多项新增功能、错误修复和兼容性提升优化。下面是有关该版本更新内容的摘要,此版本中最显著的变化包括:

版本说明

此版本中最显著的变化包括:

兼容性提示

  • 升级 Go 语言版本要求至 1.23 或更高版本,以升级依赖包 golang.org/x/crypto
  • DataValidationTypeDataValidationErrorStyleDataValidationOperatorPictureInsertType 的数据类型由 int 变更为 byte
  • 函数 SetCellInt 的形参类型改为 int64,解决 issue 2068
  • 添加图片、图表、形状和表单控件等绘图对象时,偏移设置将不再影响绘图对象的尺寸,解决 issue 2001

新增功能

  • Chart 数据类型中新增 GapWidthOverlap 字段
  • ChartPlotArea 数据类型中新增 ShowDataTableShowDataTableKeys 字段
  • ChartAxis 数据类型中新增 Alignment 字段
  • ChartSeries 数据类型中新增 DataLabel 字段
  • PageLayoutOptions 数据类型中新增 PageOrder 字段
  • 新增 2 项错误变量:ErrPageSetupAdjustToErrStreamSetColStyle
  • 新增 2 项枚举类型:HeaderFooterImagePositionTypeIgnoredErrorsType
  • 新增 2 项数据类型:CalcPropsOptionsHeaderFooterImageOptions
  • 新增 2 项函数 SetCalcPropsGetCalcProps 支持设置和获取工作簿计算属性
  • 新增 AddHeaderFooterImage 函数,支持在页眉和页脚中设置图片,相关 issue 1395
  • 新增 AddIgnoredErrors 函数,支持忽略特定单元格范围内的错误,相关 issue 2046
  • 新增 SetColStyle 函数,支持流式写入时设置列样式,相关 issue 2075
  • 函数 AddChartAddChartSheet 支持设置图表坐标轴文本方向和旋转角度,相关 issue 2025
  • 函数 AddChartAddChartSheet 支持设置柱状图和条形图的间隙宽度和重叠程度,相关 issue 2033
  • 函数 AddChartAddChartSheet 支持设置数据系列标签的格式,相关 issue 2052
  • 函数 AddChartAddChartSheet 支持设置位于图表绘图区域下方的数据表,相关 issue 2117
  • 函数 AddFormControl 函数支持为复选框类型的表单控件设置单元格超链接,相关 issue 2113
  • 函数 SetPageLayout 支持设置页面布局的页面顺序
  • 函数 DeletePicture 支持删除带有单一单元格锚定类型的图片,相关 issue 2059
  • 函数 SetPageLayout 增加了对选项参数的检查,如果给定的选项值无效,将返回错误提示信息
  • 支持跨多个工作表调整数据验证,相关 issue 2072
  • 支持应用带 # 号和零占位符的数字格式,相关 issue 2058
  • 支持应用带 ? 符号的数字格式
  • 支持通过指定 “oneCell” 定位类型添加带有单一单元格锚定类型的绘图对象,相关 issue 2002

问题修复

  • 修复 v2.9.0 中引入的问题,修改由流式写入生成的工作簿后,打开后提示文档损坏问题,解决 issue 2015
  • 修复部分情况下生成重复的“无填充”格式问题,解决 issue 2014
  • 修复部分情况下单元格垂直或水平边框样式丢失问题,解决 issue 2048
  • 修复部分情况下条件格式边框样式丢失的问题,解决 issue 2061
  • 修复部分情况下获取数据透视表时出现 panic 的问题,解决 issue 1954
  • 修复 GetStyle 函数无法获取 VertAlign 格式的问题
  • 修复 CalcCellValue 函数在部分情况下子表达式计算错误的问题,解决 issue 2083
  • 修复部分情况下因图片引用检查有误导致的错误删除图片问题
  • 修复流式写入时,非零行样式 ID 未覆盖默认单元格样式的问题
  • 修复流式写入时,部分情况下将在工作簿内部生成重复的 col XML 元素问题
  • 修复部分情况下设置图表标题字体时出现的 panic 问题,解决 issue 2102
  • 修复部分情况下删除公式计算链时出现的 panic 问题
  • 修复因共享公式解析错误导致的公式计算结果有误问题,解决 issue 2056
  • 修复当工作簿内部包含大于 4GB 的部件时,生成的 ZIP64 格式文档损坏问题
  • 修复当部分情况下重命名工作表时,自定义名称中的工作表名称更新有误的问题,解决 issue 2126

性能优化

  • 使用深拷贝库 github.com/tiendc/go-deepcopy 代替 github.com/mohae/deepcopy,深度拷贝速度提升 3 倍,相关 issue 2029
  • 修复 v2.9.0 中引入的问题,避免对空白单元格的值进行修剪以降低内存分配
  • 提高公式计算引擎对带有整行或整列单元格引用公式的计算速度
  • 行迭代器读取速度最高提升约 20%,内存分配降低约 10%

其他

  • Go Modules 依赖模块更新
  • 单元测试与文档更新
  • 包含阿拉伯语、德语、英语、西班牙语、法语、意大利语、日语、韩语、葡萄牙语、俄语、简体中文和繁体中文的多国语言文档网站更新
  • 支持 WebAssembly / JavaScript 的 excelize-wasm NPM 包发布版本更新
  • 支持 Python 的 excelize PyPI 包发布版本更新

致谢

感谢 Excelize 的所有贡献者,以下是为此版本提交代码的贡献者列表:

  • wushiling50
  • imirkin (Ilia Mirkin)
  • Juneezee (Eng Zer Jun)
  • Arpelicy
  • zhuhaicity (ZhuHaiCheng)
  • xxf0512 (xxf)
  • gypsy1234
  • mengpromax (MengZhongYuan)
  • hly-717
  • kurtinge (Kurt Inge Smådal)
  • IvanHristov98 (Ivan Hristov)
  • artur-chopikian (Artur Chopikian)
  • romanshevelev (Roman Shevelev)
  • LZCZ
  • hm3248
  • moisespsena (Moises P. Sena)
  • paolobarbolini (Paolo Barbolini)
  • timesince
  • shcabin
  • tgulacsi (Tamás Gulácsi)
  • R3dByt3 (R3dByt3)
  • Now-Shimmer

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/80661.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

xss-labs靶场基础8-10关(记录学习)

前言: 内容: 第八关 关卡资源网站,html编码网站(两个网站,一个是实体编号转义(只对特殊字符有效,字母无效)、实体符号转义) 在线Html实体编码解码-HTML Entity Encodi…

Kafka topic 中的 partition 数据倾斜问题

在 Kafka 中,如果一个 Topic 有多个 Partition,但这些 Partition 中的消息数量或流量分布不均衡,就会出现 数据倾斜(Data Skew) 的问题。 ✅ 什么是数据倾斜? 数据倾斜指的是: 某些 Partitio…

Retrofit vs Feign: 介绍、对比及示例

1. 介绍 Retrofit Retrofit 是 Square 公司开发的一个类型安全的 HTTP 客户端库,主要用于 Android 和 Java 应用。它将 HTTP API 转换为 Java 接口,通过注解来描述 HTTP 请求。 主要特点: 基于注解的 API 定义支持同步和异步调用支持多种数据格式转换…

SpringBoot整合MyBatis-Plus:零XML实现高效CRUD

前言 作为一名开发者,数据库操作是我们日常工作中不可或缺的部分。传统的MyBatis虽然强大,但需要编写大量XML映射文件,这在快速开发的今天显得效率不足。MyBatis-Plus(简称MP)作为MyBatis的增强工具,在保留…

SpringCloud之Gateway基础认识-服务网关

0、Gateway基本知识 Gateway 是在 Spring 生态系统之上构建的 API 网关服务,基于 Spring ,Spring Boot 和 Project Reactor 等技术。 Gateway 旨在提供一种简单而有效的方式来对 API 进行路由,以及提供一些强大的过滤器功能,例如…

Redis扫盲

Redis 缓存中间件 基础篇 键值数据库 key Value 是NoSql数据库 非结构化、无关联的、非SQL、BASE(无法满足ACID) 命令执行是单线程,符合原子性。 低延迟、速度块(基于内存,IO多路复用,良好的编码&am…

【FMMT】基于模糊多模态变压器模型的个性化情感分析

遇到很难的文献看不懂,不应该感到气馁,应该激动,因为外审估计也看不太懂,那么学明白了可以吓唬他 缺陷一:输入依赖性与上下文建模不足​​ ​​缺陷描述​​: 传统自注意力机制缺乏因果关系,难以捕捉序列历史背景多模态数据间的复杂依赖关系未被充分建模CNN/RNN类模型在…

Qt Creator 配置 Android 编译环境

Qt Creator 配置 Android 编译环境 环境配置流程下载JDK修改Qt Creator默认android配置文件修改sdk_definitions.json配置修改的内容 Qt Creator配置 异常处理删除提示占用编译报错连接安卓机调试APP闪退无法进入 debug 断点 环境 Qt Creator 版本 qtcreator-16.0.1Win10 嗯, …

使用聊天模型和提示模板构建一个简单的 LLM 应用程序

官方教程 官方案例 在上面的链接注册后,请确保设置您的环境变量以开始记录追踪 export LANGSMITH_TRACING"true" export LANGSMITH_API_KEY"..."或者,如果在笔记本中,您可以使用以下命令设置它们 import getpass imp…

React vs Vue:点击外部事件处理的对比与实现

React vs Vue:点击外部事件处理的对比与实现 在 Web 应用中,“点击外部事件监听”是一种常见需求,典型应用如:点击弹窗外部关闭弹窗、点击下拉菜单外关闭菜单。虽然在 React 和 Vue 中实现的原理类似——都是通过监听 document 的…

3335. 字符串转换后的长度 I

3335. 字符串转换后的长度 I class Solution:def lengthAfterTransformations(self, s: str, t: int) -> int:# 大质数mod 10**97# 创建一个长度为26的数组cnt,对应26个小写字母cnt [0]*26# 计算出s中26个字符分别有多少个for ch in s:cnt[ord(ch)-ord(a)] 1f…

Java详解LeetCode 热题 100(15):LeetCode 189. 轮转数组(Rotate Array)详解

文章目录 1. 题目描述2. 理解题目3. 解法一:使用额外数组3.1 思路3.2 Java代码实现3.3 代码详解3.4 复杂度分析3.5 适用场景 4. 解法二:环状替换法(原地算法)4.1 思路4.2 Java代码实现4.3 代码详解4.4 复杂度分析4.5 陷阱与注意事…

数据治理域——日志数据采集设计

摘要 本文主要介绍了Web页面端日志采集的设计。首先阐述了页面浏览日志采集,包括客户端日志采集的实现方式、采集内容及技术亮点。接着介绍了无线客户端端日志采集,包括UserTrack的核心设计、移动端与浏览器端采集差异以及典型应用场景崩溃分析。最后探…

PYTHON训练营DAY24

# SO代码我们的感情好像跳楼机 # 元组创建时,可以省略括号:my_tuple4 10, 20, thirty # 字符串要加“ ” 元组 一、创建 my_tuple1 (1, 2, 3) my_tuple2 (a, b, c) my_tuple3 (1, hello, 3.14, [4, 5]) # 可以包含不同类型的元素 print(my_tupl…

超声波传感器模块

欢迎来到 破晓的历程的 博客 ⛺️不负时光,不负己✈️ 文章目录 1.HC-SR04介绍2.HC-SR04原理介绍2.1原理概述3.2原理详解 4驱动代码编写4.1写前思考4.2硬件连线 5.总结hcsr04.hhcsr04.c 1.HC-SR04介绍 超声波传感器有很多种类的型号:HC-SR04、UC-025、…

《Effective Python》第2章 字符串和切片操作——深入理解Python 中的字符数据类型(bytes 与 str)的差异

引言 本篇博客基于学习《Effective Python》第三版 Chapter 2: Strings and Slicing 中的 Item 10: Know the Differences Between bytes and str 的总结与延伸。在 Python 编程中,字符串处理是几乎每个开发者都会频繁接触的基础操作。然而,Python 中的…

py7zr解压文件时报错CrcError(crc32, f.crc32, f.filename)

报错信息 Traceback (most recent call last):File "/home/hp/project/test/file_util.py", line 130, in extract_archive_7zarchive.extract(targets[fixed_file], pathoutput_dir, recursiveTrue)File "/home/hp/miniconda3/envs/celery/lib/python3.10/sit…

物理:由基本粒子组成的个体能否提炼和重组?

个体差异源于基本粒子组合的复杂性与随机性,这一假设若成立,确实可能为生物医学带来革命性突破——但需要突破技术、理论与系统层级的多重壁垒。以下从科学逻辑与技术路径展开分析: 一、随机组合中的共性与稳定结构 1. 自然界的自组织规律 涌现性(Emergence):尽管粒子组…

动态路由EIGRP的配置

动态路由EIGRP的配置 动态路由EIGRP:增强内部网关协议 为何收敛快、不成环? 路由计算的无环路和路由的收敛速度是路由计算的重要指标。EIGRP协议由于使用了DUAL算法,使得EIGRP协议在路由计算中不可能有环路路由产生,同时路由计…

组合问题(多条件)

39. 组合总和 - 力扣&#xff08;LeetCode&#xff09; class Solution { private:vector<vector<int>>result;vector<int>path;void backtracking(vector<int>& candidates, int target,int sum,int startIndex){if(sum>target){return;}if(…