找回密码
 立即注册

QQ登录

只需一步,快速开始

innerwang

中级会员

84

主题

342

帖子

868

积分

中级会员

积分
868
innerwang
中级会员   /  发表于:2024-7-10 14:58  /   查看:1128  /  回复:7
1金币
本帖最后由 innerwang 于 2024-7-10 15:00 编辑

之前发过这个帖子
https://gcdn.grapecity.com.cn/fo ... d=203464&pid=770202

其中 19楼回复了如下内容
image.png309797667.png
30楼的热心朋友回复了如下内容
image.png654400329.png
31楼回复如下
image.png378984069.png


现在再次来看这个帖子,表示还是看不懂是如何计算的,想请教一下

有如下三个问题:
1.  19楼中提到的 【Math.floor(72 / 8.38)】, 这个是怎么得到的? 是像30楼解释的这个是得到的 excel 列宽吗?然后 178px 又是怎么算出来的呢?
2.  31 楼中提到的会用 span 计算最大数字宽度,我想问一下这个是怎么计算的?
3.  按照30楼说测量excel 的最大字符宽度的方式,我在 excel 中测试了一下不同的字体,为什么感觉都是一样的,是我的测量方式不对吗?
如下图:从B-G列,都是在 在线表格编辑器中将列宽设置为了100

image.png994501342.png


将模板通过 excelIO 导出为 excel文件,将鼠标移到每一列上看测量结果,结果都是一样的,每一列都是 【13.50/86
image.png820628967.png

详情录屏为:
excel 量宽度.zip (4 MB, 下载次数: 437)

最佳答案

查看完整内容

您好, 1、用之前帖子中的文件举例,下图中描述了这两个参数是如何获取的。 178的计算过程为:8/9*200≈178 列宽从200px变为178px是因为导出Excel文件时,没有注册“sans-serif”的maxDigitWidth,在上面的算式中,9是浏览器自动计算出maxDigitWidth的值。 换句话说,浏览器给出的Excel中的列宽计算不正确。如果希望保证Excel文件和Spread中的列宽保持一致,并且在导入和导出时不会改变,则应将“sans-serif”的ma ...

7 个回复

倒序浏览
最佳答案
最佳答案
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2024-7-10 14:58:22
来自 2#
您好,

1、用之前帖子中的文件举例,下图中描述了这两个参数是如何获取的。

image.png372639464.png

178的计算过程为:8/9*200≈178

列宽从200px变为178px是因为导出Excel文件时,没有注册“sans-serif”的maxDigitWidth,在上面的算式中,9是浏览器自动计算出maxDigitWidth的值。

换句话说,浏览器给出的Excel中的列宽计算不正确。如果希望保证Excel文件和Spread中的列宽保持一致,并且在导入和导出时不会改变,则应将“sans-serif”的maxDigitWidth注册为8,然后重新导出一个具有正确列宽的新 Excel 文件。

正确的maxDigitWidth值应由Math.floor(72/8.38)算出,即为8,所以,在注册了正确的maxDigitWidth值后,上面的算式将变为8/8*200=200。(30楼的热心用户也给了很详细的解释)

2、span测量的方法涉及到SpreadJS底层,这边也无从得知,无法为您解答。

3、在之前的Demo测试文件中,其默认字体是“sans-serif”,其对全局生效,如果要测试其他的字体,建议每一个字体对应一个文件进行测试。
回复 使用道具 举报
innerwang
中级会员   /  发表于:2024-7-10 18:10:48
3#
Joestar.Xu 发表于 2024-7-10 17:47
您好,

1、用之前帖子中的文件举例,下图中描述了这两个参数是如何获取的。
178的计算过程为:8/9*200≈178


这里的8和9分别是指啥? 200 是指存在 spreadJS里面的列宽吗?
回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2024-7-11 09:34:13
4#
您好,8和9都是maxDigitWidth,9是“sans-serif”这个衬线字体在浏览器中自动计算出的结果,200是SpreadJS中的列宽。
回复 使用道具 举报
innerwang
中级会员   /  发表于:2024-7-15 09:18:23
5#
Joestar.Xu 发表于 2024-7-11 09:34
您好,8和9都是maxDigitWidth,9是“sans-serif”这个衬线字体在浏览器中自动计算出的结果,200是SpreadJS ...

所以 8是 excel 中查看列宽的结果??还是通过别的计算方式得到的呢?
回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2024-7-15 17:29:47
6#
是的,可以这么理解,8是通过Math.floor(72/8.38)计算得出的。
回复 使用道具 举报
innerwang
中级会员   /  发表于:2024-7-16 14:02:38
7#
Joestar.Xu 发表于 2024-7-15 17:29
是的,可以这么理解,8是通过Math.floor(72/8.38)计算得出的。

了解了,可以结贴了,谢谢。
回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2024-7-16 14:21:26
8#
不客气,那就先结贴了,后续有其他问题的话随时开新帖提问哈。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部