Clark.Pan 发表于 2020-5-5 20:09:40

默认列宽不一致问题

众所周知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用下面方法获取主题名称
sheet.currentTheme().name()一般默认获取的是Office

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

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


页: [1]
查看完整版本: 默认列宽不一致问题