找回密码
 立即注册

QQ登录

只需一步,快速开始

Clark.Pan 讲师达人认证 悬赏达人认证 SpreadJS 开发认证

超级版主

200

主题

9897

帖子

1万

积分

超级版主

Rank: 8Rank: 8

积分
15523

讲师达人悬赏达人微信认证勋章SpreadJS 认证SpreadJS 高级认证元老葡萄

Clark.Pan 讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-8-25 18:34  /   查看:2126  /  回复:0
xls格式是微软Office Excel生成格式的其中一种。与我们常见的xlsx格式有以下的区别:
从核心结构上来说:xls 是一个特有的二进制格式,其核心结构是复合文档类型的结构,而 xlsx 的核心结构是 XML 类型的结构,采用的是基于 XML 的压缩方式,使其占用的空间更小。xlsx 中最后一个 x 的意义就在于此。
从版本上来讲:xls是excel2003及以前版本生成的文件格式,而xlsx是excel2007及以后版本生成的文件格式。xlsx格式是向下兼容的,可兼容xls格式。

众所周知,SpreadJS仅支持导入导出xlsx格式的Excel文件,但在日常的技术支持中,我们经常会遇到用户提出需要导出xls格式或者有xls格式的文件导入的需求。针对这样的需求,我们也给出了多种解决方法:

一,通过Excel 2007以上的版本进行转换:
导入的时候我们先通过Excel 2007以上的版本打开xls文件,然后另存为成xlsx文件,之后在使用SpreadJS的导入将另存为之后的文件导入到SpreadJS中。
导出的时候我们先使用SpreadJS功能将页面的内容导出成xlsx格式的Excel文件,之后将该文件用Excel 2007以上的版本打开,再另存为成xls格式。
上述做法主要依靠Excel本身的转换能力。基于前面说的兼容性,xls基本可以无损转换为xlsx格式,但是反过来xlsx不一定能无损的转换为xls格式,可能会造成一些功能缺失,这也是所有的方案都会面临的“硬伤”。另外,该方法适用于单文件的转换,无法进行批量转换操作。

二,通过一些第三方的转换工具做转换:
我们之前有做过一个转换工具,具体情况可以参考下面博客:
https://gcdn.grapecity.com.cn/forum.php?mod=viewthread&tid=80289&extra=page%3D1
相较于用Excel去转换,工具的好处解决了不能批量转换的问题。但是也有以下的缺陷:
1.无法在线转换,需要通过软件运行提前转换。
2.软件本身需要安装后运行,目前只支持windows平台。

三,SpreadJS与第三方的前端组件结合使用完成导入导出xls格式文件:
前一阵子在网上看到一个第三方的纯前端组件,可以读取和导出xls格式的Excel文件。该组件名叫sheetjs,github可以下载到免费的版本
https://github.com/SheetJS/sheetjs
该组件本身是基于纯前端的,没有界面UI显示,可以读取xlsx,xls格式的文件,通过API修改,导出生成xlsx,xls。
利用该组件与SpreadJS进行组合,该组件用于xls文件的转换,SpreadJS用于在线编辑展示,导入导出。
详情可以参考附件的demo
同样的,该方案也有自己的不足地方:
sheetjs免费版目前仅支持读取数据,公式。其他诸如单元格的样式,图片,图表,形状等功能均不支持,如果使用sheetjs免费版这么做会导致转换后相关功能的丢失。
解决方案的话,可以尝试去使用sheetjs的收费版,收费版据说可以支持样式等功能(具体我没有尝试过,有兴趣的可以评估一下)。
另外,如果有发现其他更好用的第三方组件也可以进行集成使用,也遇到问题也可以在下方一起讨论


xlsToxlsx.zip

1.58 MB, 下载次数: 40

0 个回复

您需要登录后才可以回帖 登录 | 立即注册
返回顶部