diff --git a/packages/engine-render/src/components/sheets/extensions/background.ts b/packages/engine-render/src/components/sheets/extensions/background.ts index 247dafe604..773cf8fdfe 100644 --- a/packages/engine-render/src/components/sheets/extensions/background.ts +++ b/packages/engine-render/src/components/sheets/extensions/background.ts @@ -187,10 +187,38 @@ export class Background extends SheetExtension { return true; } - // getRowVisible can take a lot of time, sometimes over 20+ms, this return condition should put in the last. - const visibleRow = spreadsheetSkeleton.worksheet.getRowVisible(row); - const visibleCol = spreadsheetSkeleton.worksheet.getColVisible(col); - if (!visibleRow || !visibleCol) return true; + if (!isMerged && !isMergedMainCell) { + // getRowVisible can take a lot of time, sometimes over 20+ms, this return condition should put in the last. + const visibleRow = spreadsheetSkeleton.worksheet.getRowVisible(row); + if (!visibleRow) return true; + + const visibleCol = spreadsheetSkeleton.worksheet.getColVisible(col); + if (!visibleCol) return true; + } else { + let isAllRowHidden = true; + + for (let r = mergeInfo.startRow; r <= mergeInfo.endRow; r++) { + const visibleRow = spreadsheetSkeleton.worksheet.getRowVisible(r); + if (visibleRow) { + isAllRowHidden = false; + break; + } + } + + if (isAllRowHidden) return true; + + let isAllColHidden = true; + + for (let c = mergeInfo.startColumn; c <= mergeInfo.endColumn; c++) { + const visibleCol = spreadsheetSkeleton.worksheet.getColVisible(c); + if (visibleCol) { + isAllColHidden = false; + break; + } + } + + if (isAllColHidden) return true; + } // precise is a workaround for windows, macOS does not have this issue. const startXPrecise = fixLineWidthByScale(startX, scaleX); diff --git a/packages/engine-render/src/components/sheets/extensions/border.ts b/packages/engine-render/src/components/sheets/extensions/border.ts index 5bcf220f15..9f6fa2d6bc 100644 --- a/packages/engine-render/src/components/sheets/extensions/border.ts +++ b/packages/engine-render/src/components/sheets/extensions/border.ts @@ -106,8 +106,10 @@ export class Border extends SheetExtension { if (!isMerged) { const visibleRow = spreadsheetSkeleton.worksheet.getRowVisible(row); + if (!visibleRow) return true; + const visibleCol = spreadsheetSkeleton.worksheet.getColVisible(col); - if (!visibleRow || !visibleCol) return true; + if (!visibleCol) return true; } if (!this.isRenderDiffRangesByRow(mergeInfo.startRow, mergeInfo.endRow, diffRanges)) { diff --git a/packages/engine-render/src/components/sheets/extensions/font.ts b/packages/engine-render/src/components/sheets/extensions/font.ts index b0a55b847c..2f5353b402 100644 --- a/packages/engine-render/src/components/sheets/extensions/font.ts +++ b/packages/engine-render/src/components/sheets/extensions/font.ts @@ -246,8 +246,10 @@ export class Font extends SheetExtension { if (notInMergeRange) { const visibleRow = spreadsheetSkeleton.worksheet.getRowVisible(row); + if (!visibleRow) return true; + const visibleCol = spreadsheetSkeleton.worksheet.getColVisible(col); - if (!visibleRow || !visibleCol) return true; + if (!visibleCol) return true; } else { let isAllRowHidden = true;