From be07cf8238986fd2a0c412593a17e015bded27af Mon Sep 17 00:00:00 2001 From: lrc <571244399@qq.com> Date: Thu, 16 Jul 2026 16:37:45 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A1=A5=E5=85=85=E5=86=BB=E7=BB=93=E8=A1=8C?= =?UTF-8?q?=E5=88=97=E7=9A=84=E8=AE=BE=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Component/XericUIActionTable.ExcelIO.cs | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/Runtime/XTable/Rendering/Component/XericUIActionTable.ExcelIO.cs b/Runtime/XTable/Rendering/Component/XericUIActionTable.ExcelIO.cs index d34ff18..8247db5 100644 --- a/Runtime/XTable/Rendering/Component/XericUIActionTable.ExcelIO.cs +++ b/Runtime/XTable/Rendering/Component/XericUIActionTable.ExcelIO.cs @@ -134,6 +134,24 @@ namespace XericUI.XTable.Rendering.Component } } + // 读取冻结窗格 + string freezePanes = ws.View.FreezePanes; + if (!string.IsNullOrEmpty(freezePanes)) + { + try + { + var addr = new ExcelAddressBase(freezePanes); + int freezeRows = addr.Start.Row - 1; // 1-based → 冻结行数 + int freezeCols = addr.Start.Column - 1; // 1-based → 冻结列数 + if (freezeRows > 0 || freezeCols > 0) + SetFreezeCount(freezeRows, freezeCols); + } + catch + { + // 忽略解析失败的冻结地址 + } + } + // 标记脏并刷新 MarkDirty(TableDirtyType.DataChanged | TableDirtyType.LayoutChanged); RecalculateTotalSize(); @@ -199,6 +217,14 @@ namespace XericUI.XTable.Rendering.Component ws.Row(r + 1).Height = h; } + // 写入冻结窗格 + if (m_FreezeRowCount > 0 || m_FreezeColCount > 0) + { + int freezeRow = m_FreezeRowCount + 1; // 1-based: 冻结行数的下一行 + int freezeCol = m_FreezeColCount + 1; // 1-based: 冻结列数的下一列 + ws.View.FreezePanes = ExcelCellBase.GetAddress(freezeRow, freezeCol); + } + // 写入单元格数据和样式 for (int r = 0; r < rows; r++) {