找回密码
 立即注册

QQ登录

只需一步,快速开始

lzmmail

注册会员

1

主题

1

帖子

6

积分

注册会员

积分
6
  • 38

    金币

  • 1

    主题

  • 1

    帖子

最新发帖
lzmmail
注册会员   /  发表于:2024-10-14 10:16  /   查看:336  /  回复:5
1金币
本帖最后由 Wilson.Zhang 于 2024-10-17 15:23 编辑

产品:SpreadJS
版本:17.0.3
调研编号:SJS-26903
Last Review:2024-10-17
当前进展:非问题,已提供解释说明。

当整个表格的宽度大于屏幕宽度时,绘制的图形绘制不全,小于或等于屏幕宽度时绘制的图形没有问题,src>views>shuiwei.vue注释第205行代码开放204行正常,取消注释后,图形绘制不完整。
正常.png
不正常.png

spreadjs.zip

228.95 KB, 下载次数: 6

最佳答案

查看完整内容

您好!经调研,通过Worksheet:getCellRect()获取单元格的坐标有一个前提,即单元格需要显示在浏览器页面视窗内,如果未显示,则后获取结果为undefined。 在为单元格设置固定列宽时,73列单元格尚不可见,Worksheet:getCellRect()结果为undefined。为单元格设置了动态列宽后,被设置动态列宽的单元格将均分页面列宽,形同可见,便可根据内部计算逻辑得到窗口中还未显示的单元格的坐标。 综上所述,您可以使用动态列宽满足需要 ...

5 个回复

倒序浏览
最佳答案
最佳答案
Wilson.Zhang
超级版主   /  发表于:2024-10-14 10:16:29
来自 4#
您好!经调研,通过Worksheet:getCellRect()获取单元格的坐标有一个前提,即单元格需要显示在浏览器页面视窗内,如果未显示,则后获取结果为undefined。

在为单元格设置固定列宽时,73列单元格尚不可见,Worksheet:getCellRect()结果为undefined。为单元格设置了动态列宽后,被设置动态列宽的单元格将均分页面列宽,形同可见,便可根据内部计算逻辑得到窗口中还未显示的单元格的坐标。

综上所述,您可以使用动态列宽满足需要。如果要对单元格设置固定列宽,您可以自定义实现计算逻辑,即通过for循环和固定列宽依次计算相关单元格的坐标,以此替代使用Worksheet:getCellRect()获取单元格坐标。
回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2024-10-15 17:53:52
2#
您好!我们需要根据您提供的demo分析下,之后会及时向您同步结论,请您耐心等候!
回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2024-10-16 17:40:46
3#
您好!您demo中原本注释了第205行设置动态列宽代码,而使用了第206行设置列宽为25的代码,复现了问题,线条绘制在日期为03/13的单元格处停止。之后,我们注释了第206行代码、使用第205行代码运行,可以正常绘制。

通过debug,发现在03/13单元格之后便跳跃至04/30单元格绘制,在绘制之前根据单元格日期数据计算得到的列数为73,符合事实,但是通过Worksheet:getCellRect()获取73列的坐标时结果为undefined,导致待绘制线条的坐标位置计算结果为NaN,这才无法绘制。而通过动态设置列宽可以解决这个问题,至于问题原因,我们调研后向您同步结论,请您耐心等候。
回复 使用道具 举报
前端小白
超级版主   /  发表于:2024-10-18 11:35:04
5#
试试这个
  1. getCumulativeColumnWidth(sheet, calcColumn, hasRowHeader) {
  2.   var width = 0;
  3.   for (var i = 0; i <= calcColumn; i++) {
  4.     if (sheet.getColumnVisible(i)) {
  5.       width += sheet.getColumnWidth(i);
  6.     }
  7.   }
  8.   if (hasRowHeader) {
  9.     for (var j = 0; j < sheet.getColumnCount(0, GC.Spread.Sheets.SheetArea.rowHeader); j++) {
  10.       if (sheet.getColumnVisible(i, GC.Spread.Sheets.SheetArea.rowHeader)) {
  11.         width += sheet.getColumnWidth(i, GC.Spread.Sheets.SheetArea.rowHeader);
  12.       }
  13.     }
  14.   }
  15.   return width;
  16. },
复制代码
回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2024-10-24 14:01:32
6#
您好!由于您较长时间未回复,且从跟帖回复中了解到问题已得到有效解答,那就结帖了。如有新问题,欢迎发新帖沟通。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部