找回密码
 立即注册

QQ登录

只需一步,快速开始

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

超级版主

200

主题

9899

帖子

1万

积分

超级版主

Rank: 8Rank: 8

积分
15531

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

Clark.Pan 讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2020-5-5 20:09  /   查看:2963  /  回复:0
众所周知SpreadJS是一个高度类似Excel的一个电子表单,具有Excel大部分的功能,并且是纯前端的实现的一款产品。虽然SpreadJS高度接近Excel,但有些地方还是与Excel有不一致的设定。其中默认列宽不一致的设定是其中一个已知的不一致问题。Excel中的默认列宽是不固定的,是会根据默认字体,操作系统,Excel版本,显示DPI等多方面因素影响动态生成的。及时同一个Excel文件,在不同版本,不同操作系统的机器上打开,默认列宽都是不同的。这里有一篇文章详述了这个问题:
https://docs.microsoft.com/en-us/office/troubleshoot/excel/determine-column-widths
而SpreadJS上的默认字体是calibri,与英文版本的Excel默认字体相同。这里就会有一个问题在中国的用户使用的绝大多数都是中文版本的Excel或者WPS,默认的字体是宋体与英文的Excel不同。这样就会导致中文生成的Excel文档导入到SpreadJS中默认列宽大小不一致。
这里有一个解决办法,是可以初始化SpreadJS后将spread对象的默认字体改为宋体再导入。可以通过下面的操作来设置:
1.首先确认当前spread对象用的是什么主题,这里currentTheme这个API是sheet上设置的,所以随便获取其中一个sheet用下面方法获取主题名称
  1. sheet.currentTheme().name()
复制代码
一般默认获取的是Office

2.根据上面获取的主题名称获取相应的主题对象并修改,例如我们拿到Office主题后,我们可以通过GC.Spread.Sheets.Themes.Office来获取当前主题的对象,之后我们看一下其中的bodyFont方法

  1. GC.Spread.Sheets.Themes.Office.bodyFont()
复制代码
拿到的结果就是Calibri。接下来我们就要修改这个bodyFont()为宋体
  1. GC.Spread.Sheets.Themes.Office.bodyFont("宋体")
复制代码
3.导入对应的Excel文件查看效果。
这样统一了其中默认字体的原因,但是其余操作系统,DPI等其他原因造成的列宽不一致扔无法统一。所以也不能完全解决这个问题。目前这里是一个已知的与Excel的差异。


0 个回复

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