找回密码
 立即注册

QQ登录

只需一步,快速开始

palan_qu
金牌服务用户   /  发表于:2020-3-30 15:41  /   查看:6867  /  回复:18
888金币
本帖最后由 palan_qu 于 2020-3-31 16:14 编辑

1: sheet.setColumnWidth(colno, 72,  GC.Spread.Sheets.SheetArea.viewport) 将列宽设置为 72
2: 使用 @grapecity/spread-excelio v13.0.7 保存 excel 文件
3:使用 sheet.getColumnVisible(colno)将2保存的excel文件 同一列的列宽读取出来, 为63

??? 为什么读出来的列宽不一样了???

怎么解决这个问题,这样我们前后不一致我们没法写测试

最佳答案

查看完整内容

您好,这个问题是环境造成的 导出时默认字体是'normal normal normal 11pt/normal Calibri' 但是nodejs环境的mock-browser并不认识这种格式font,导致获取字号为空。后续计算出现误差。 请添加如下代码,指定默认字体,导出再导入后就一致了。

18 个回复

倒序浏览
最佳答案
最佳答案
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2020-3-30 15:41:54
来自 17#
您好,这个问题是环境造成的
导出时默认字体是'normal normal normal 11pt/normal Calibri'
但是nodejs环境的mock-browser并不认识这种格式font,导致获取字号为空。后续计算出现误差。
请添加如下代码,指定默认字体,导出再导入后就一致了。

  1. var defaultStyle = new GC.Spread.Sheets.Style();
  2. defaultStyle.font = "11pt Calibri"
  3. sheet.setDefaultStyle(defaultStyle)
复制代码


回复 使用道具 举报
palan_qu
金牌服务用户   /  发表于:2020-3-30 16:03:12
2#
本帖最后由 palan_qu 于 2020-3-30 17:11 编辑

每次给我变成原来的 7/8, 请问这是不是一个bug???
回复 使用道具 举报
palan_qu
金牌服务用户   /  发表于:2020-3-30 17:00:20
3#
回复 使用道具 举报
Fiooona
论坛元老   /  发表于:2020-3-30 17:37:39
4#
SpreadJS 导入导出Excel无法保持列宽一致,原因如下:
Excel的单位是Point,这个Point是根据当前字体去决定和像素的比的。不同语言不同操作系统下Excel下这个比例可能时不同的。
因为SpreadJS时在浏览器里运行,无法获取环境的变量,所以就一个固定的比值进行换算。
如果您环境时固定的,您可以尝试找出一个合适的比值重新设置列宽。

导出ssjson 文件再导入表单是可以保持完全一致的。
组件化表格编辑器(预览版)试用进行中,点击了解详情!
请点击评分,对我的服务做出评价!5分为非常满意!
回复 使用道具 举报
palan_qu
金牌服务用户   /  发表于:2020-3-30 17:37:45
5#
回复 使用道具 举报
Fiooona
论坛元老   /  发表于:2020-3-30 17:41:49
6#
如上面回复,这个不是一个bug , SpreadJS无法实现导入导出Excel保持列宽一致。
组件化表格编辑器(预览版)试用进行中,点击了解详情!
请点击评分,对我的服务做出评价!5分为非常满意!
回复 使用道具 举报
palan_qu
金牌服务用户   /  发表于:2020-3-30 17:46:33
7#
Fiooona 发表于 2020-3-30 17:37
SpreadJS 导入导出Excel无法保持列宽一致,原因如下:
Excel的单位是Point,这个Point是根据当前字体去决定 ...

1:有没有使用ssjson具体例子,不知道ssjson是什么东西;

2: spreajs 在浏览器或者nodejs下运行时,固定的换算比例是多少,可能自定义不换算或者设置换算值为1

3:我们测试的环境是固定的,该怎么去找那个合适的比值,我们最终要达到效果是,使用spredjs 导入导出后,在spread JS 里面读取出来列宽是一致的即可。
回复 使用道具 举报
Fiooona
论坛元老   /  发表于:2020-3-30 18:04:24
8#

在线表格编辑器中可以导入导出JSON,附件是一个前端JS的例子。固定换算比例与电脑环境,Excel版本,默认字体都有关系,如果您的环境固定,并且特别需要让导入导出的列宽一致,可以这样换算,如果用于保存表单模板可以使用保存ssjson文件。

13.0.7测试Demo.zip

2.1 MB, 下载次数: 93

组件化表格编辑器(预览版)试用进行中,点击了解详情!
请点击评分,对我的服务做出评价!5分为非常满意!
回复 使用道具 举报
palan_qu
金牌服务用户   /  发表于:2020-3-30 19:13:41
9#
Fiooona 发表于 2020-3-30 18:04
在线表格编辑器中可以导入导出JSON,附件是一个前端JS的例子。固定换算比例与电脑环境,Excel版本,默认 ...

demo 看到了,谢谢, 但是还是有几个问题

1. 你上面说可以这样换算,后面貌似没有后文了,到底该怎样换算

2. 目前这个问题我依旧觉得这是个bug,理由如下:
  a.  spreadjs v12 没有出现这个问题,v13才有这个问题
  b.  你上面说因为excel里面的单位是points, 和spreadjs  用的单位pixel有一定转化比例,不同系统不一样,所以spreajs里面写死了一个比例。 那么导出的时候你使用固定比例(sheet.setColumnWidth) 去保存,将pixel转换为point, 那你导入的时候(sheet.getColumnWidth)也应该也使用该比例将point 转换为pixel,实际上你们并没有这么多做,所以导致了导入跟导出的列宽读取不一致的情况

请问这样理解对么?

回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部