【v17】fromJSON后调用showColumn、scroll不生效
本帖最后由 Wilson.Zhang 于 2024-11-28 10:32 编辑const designer = new GC.Spread.Sheets.Designer.Designer(document.getElementById("gc-designer-container"));
const spread = designer.getWorkbook();
const sheet = spread.getActiveSheet();
spread.options.scrollByPixel = true;
spread.options.scrollbarShowMax = true;
spread.options.scrollbarMaxAlign = true;
spread.options.allowExtendPasteRange = true;
如附件所示,在官网中执行以上代码,并将行宽拖宽,滚动后,执行formJSON + showCell, 第一次有偏差,第二次才生效。
场景:在数据协同过程中,保重用户的视图不产生位移,fromJSON,会导致试图重新定位,因此需要使用showCell和scroll进行还原
此问题为线上问题,因此希望能尽快给出解决方案,感谢
PS:帖子编辑有bug,代码补充在结尾了:
spread.suspendPaint();
spread.suspendEvent();
spread.fromJSON(spread.toJSON())
// 模拟定位到fromJSON前的单元格
spread.getActiveSheet().showCell(0,3,'top', 'left')
// 模拟定位到fromJSON前的单元格的偏移量
spread.getActiveSheet().scroll(0,100);
spread.resumePaint();
spread.resumeEvent();
产品:SpreadJS
版本:17.1.9
调研编号:SJS-27356
Last Review:2024-11-28
当前进展:计划在18版本修复。
本帖最后由 Lynn.Dou 于 2024-11-14 15:12 编辑
您好,
您代码中写了 spread.getActiveSheet().scroll(0,100),但是我看视频中并没有执行。
请将视频中第二段代码修改如下,测试看问题是否解决:
//获取偏移值
const topRowOffset = sheet.getViewportTopRowOffset();
const leftColumnOffset = sheet.getViewportLeftColumnOffset();
spread.suspendPaint();
spread.suspendEvent();
spread.fromJSON(spread.toJSON())
// 模拟定位到fromJSON前的单元格
spread.getActiveSheet().showCell(0,3,GC.Spread.Sheets.VerticalPosition.top, GC.Spread.Sheets.HorizontalPosition.left)
spread.resumeEvent();
spread.resumePaint();
// 模拟定位到fromJSON前的单元格的偏移量,需注意要放在paint之后执行
spread.getActiveSheet().scroll(topRowOffset,leftColumnOffset);
Lynn.Dou 发表于 2024-11-14 15:11
您好,
您代码中写了 spread.getActiveSheet().scroll(0,100),但是我看视频中并没有执行。
请将视频中第 ...
您好,采用您给出的代码之后,发现还是无法按照预期执行:
const designer = new GC.Spread.Sheets.Designer.Designer(document.getElementById("gc-designer-container"));
const spread = designer.getWorkbook();
const sheet = spread.getActiveSheet();
spread.options.scrollByPixel = true;
spread.options.scrollbarShowMax = true;
spread.options.scrollbarMaxAlign = true;
spread.options.allowExtendPasteRange = true;
function fromJSONFn () {
try {
let sheet = spread.getActiveSheet();
const row = sheet.getViewportTopRow(1,1)
const col = sheet.getViewportLeftColumn(1,1)
//获取偏移值
const topRowOffset = sheet.getViewportTopRowOffset();
const leftColumnOffset = sheet.getViewportLeftColumnOffset();
spread.suspendPaint();
spread.suspendEvent();
spread.fromJSON(spread.toJSON())
// 模拟定位到fromJSON前的单元格
spread.getActiveSheet().showCell(row,col,GC.Spread.Sheets.VerticalPosition.top, GC.Spread.Sheets.HorizontalPosition.left)
spread.resumeEvent();
spread.resumePaint();
// 模拟定位到fromJSON前的单元格的偏移量,需注意要放在paint之后执行
spread.getActiveSheet().scroll(topRowOffset,leftColumnOffset);
} catch (err) {
console.log(err);
}
}调用fromJSONFn();页面还是未符合跳转预期
收到,我们再调查一下看看 Richard.Ma 发表于 2024-11-14 17:52
收到,我们再调查一下看看
好的,线上问题,麻烦尽快,十分感谢 从您此前提供的视频来看,您期待的效果应是视图聚焦在cell(0,3)上,而不会产生偏移。
所以前面提到的方案,是模拟的视频中在控制台执行代码,测试是可以的。
不过,如果不通过控制台,而是在demo中通过代码执行,直接showCell就可以恢复cell(0,3)视图(不需要scroll),不会有偏移。所以这种差异应是受打开控制台对视图造成了影响导致的。
我整理了一个测试demo,您可以点击按钮看下效果,看在您的项目中直接执行showCell是否可以满足预期。
如果我的理解有偏差,您留下联系方式,我们电话沟通下。 根据沟通的需求,重新调整了demo,您参考下。(完整代码见附件)
注:demo中监听了TopRowChanged、LeftColumnChanged事件来记录当前视图的单元格信息,以便后续恢复。
function events(sheet) {
sheet.bind(GC.Spread.Sheets.Events.TopRowChanged, function (sender, args) {
console.log(args);
rowOffset = args.newOffset;
newRow = args.newTopRow;
});
sheet.bind(GC.Spread.Sheets.Events.LeftColumnChanged, function (sender, args) {
console.log(args);
columnOffset = args.newOffset;
newColumn = args.newLeftCol;
});
}
Lynn.Dou 发表于 2024-11-15 16:56
根据沟通的需求,重新调整了demo,您参考下。(完整代码见附件)
注:demo中监听了TopRowChanged、LeftCol ...
您好,您的demo是符合预期的。
但经排查,我们使用了spread.options.scrollbarAppearance = GC.Spread.Sheets.ScrollbarAppearance.mobile;
,一旦使用此属性,您给的demo也产生了不符合预期的情况,
我们为了用户的视觉体验使用了GC.Spread.Sheets.ScrollbarAppearance.mobile,因此期望能给出一个可以共存的可行方案,十分感谢。 本帖最后由 Lynn.Dou 于 2024-11-18 14:45 编辑
好的,我再结合您提供的信息调研下,有结果贴中同步。(SJS-27356) Lynn.Dou 发表于 2024-11-18 10:50
好的,我再结合您提供的信息调研下,有结果贴中同步。(SJS-27356)
请问有进展了吗?
页:
[1]
2