Posted 13 June 2023, 8:26 pm EST
Hello Petri,
The Events are triggered through the UI actions like when the user click on the tab strip to select a sheet. Events are not triggered when using the APIs like setActiveSheet method. This behavior is by design and expected.
You could use the following code snippet to get the coordinates of the sheetTabRect. Once you get the coordinates, you could use the Selenium APIs to perform the click on the coordinates and it will trigger the events like ActiveSheetChanged.
// Get the Sheet's Rectange (x, y coordinates and widht and height of the tab rectangle)
getSheetTabRect(spread: any, sheetName: string) {
// Sheet Doesn't exist
if (spread.getSheetIndex(sheetName) === undefined || null) {
return null;
}
var hostID = spread.getHost().id;
var tabStripHost = document.getElementById(hostID + "_tabStrip");
if (hostID === "") {
tabStripHost = document.getElementById("null_tabStrip");
}
var offset = getOffset(tabStripHost), width = tabStripHost?.clientWidth, height = tabStripHost?.clientHeight;
var startX = 0, acTabWidth, flag = false, activeSheetIndex = spread.getSheetIndex(sheetName);
for (var x = 0; x < width!; x++) {
var hitInfo = spread.hitTest(x + offset!.left, height! / 2 + offset!.top);
var tabStripHitInfo = hitInfo && hitInfo.tabStripHitInfo;
if (tabStripHitInfo && tabStripHitInfo.sheetTab) {
if (tabStripHitInfo.sheetTab.sheetIndex === activeSheetIndex) {
if (startX === 0) {
startX = x;
}
flag = true;
} else if (flag) {
acTabWidth = x - startX;
break;
}
} else if (flag) {
acTabWidth = x - startX;
break;
}
}
return { x: startX + offset!.left + 5, y: offset!.top, width: acTabWidth, height: height! - 5 };
}
getOffset(elem: any) {
var docElem, win, box = { top: 0, left: 0 }, ownerDocument = elem && elem.ownerDocument;
if (!ownerDocument) {
return;
}
docElem = ownerDocument.documentElement;
if (elem.getBoundingClientRect) {
try {
box = elem.getBoundingClientRect();
}
catch (e) {
}
}
win = ownerDocument.defaultView;
return {
top: box.top + (win.pageYOffset || docElem.scrollTop) - (docElem.clientTop || 0),
left: box.left + (win.pageXOffset || docElem.scrollLeft) - (docElem.clientLeft || 0)
};
}
Kindly let us know if you still face any problems.
Regards,
Ankit