Posted 22 October 2025, 2:31 am EST
Hi,
There isn’t a built-in API to directly draw custom overlays on cell ranges, full columns, or rows. However, this can be implemented using a “FloatingObject” overlay. By dynamically calculating the pixel dimensions of the target range and positioning a floating object over it, you can create a custom semi-transparent overlay (or even use a canvas for custom drawings). The overlay can be fixed in position and size, and updated whenever required.
Here’s a working sample snippet that demonstrates this approach:
var overlay = addRangeOverlay(sheet, { row: 0, col: 0, rowCount: 3, colCount: 2 }, "myOverlay");
// Function to create a range overlay
function addRangeOverlay(sheet, range, id) {
id = id || ("overlay_" + Date.now());
function getRangeRect(s, r) {
var top = 0, left = 0, width = 0, height = 0;
for (var rr = 0; rr < r.row; rr++) top += s.getRowHeight(rr);
for (var cc = 0; cc < r.col; cc++) left += s.getColumnWidth(cc);
for (var rr = r.row; rr < r.row + r.rowCount; rr++) height += s.getRowHeight(rr);
for (var cc = r.col; cc < r.col + r.colCount; cc++) width += s.getColumnWidth(cc);
return { x: left, y: top, width: width, height: height };
}
var rect = getRangeRect(sheet, range);
var floatObj = new GC.Spread.Sheets.FloatingObjects.FloatingObject(id, rect.x, rect.y, rect.width, rect.height);
var container = document.createElement("div");
container.style.width = "100%";
container.style.height = "100%";
container.style.pointerEvents = "none";
container.style.boxSizing = "border-box";
container.style.background = "rgba(255, 230, 0, 0.25)";
floatObj.content(container);
floatObj.allowResize(false);
floatObj.allowMove(false);
sheet.floatingObjects.add(floatObj);
function updateOverlay() {
var newRect = getRangeRect(sheet, range);
floatObj.x(newRect.x);
floatObj.y(newRect.y);
floatObj.width(newRect.width);
floatObj.height(newRect.height);
}
return {
id: id,
remove: function () {
try { sheet.floatingObjects.remove(floatObj); } catch (e) { }
},
update: updateOverlay,
element: container,
floatObj: floatObj
};
}
Sample: https://jscodemine.mescius.io/share/HE7UQTZQMUaKLyg3-jqvfQ/?IsEmbed=false&Theme=Unset&PreviewDirection=0&IsEditorShow=true&IsExplorerShow=true&IsPreviewShow=true&IsConsoleShow=true&IsRunBTNShow=false&IsResetBTNShow=false&IsOpenInCodemineBTNShow=false&PanelWidth=20&PanelWidth=50&PanelWidth=30&defaultOpen={"OpenedFileName"%3A["%2Findex.html"%2C"%2Fsrc%2Fdata.js"%2C"%2Fsrc%2Fapp.js"%2C"%2Fpackage.json"]%2C"ActiveFile"%3A"%2Fsrc%2Fapp.js"}
This approach allows you to overlay visual elements across cell ranges, full rows, or columns, without modifying the underlying data.
References:
Regards,
Priyam