Skip to content

Commit a06b276

Browse files
committed
fix(EPPlus): DoAdjustDrawings ship-blocker 在 3 处切换点补完
d54ef9d 修了 ExportHelper.AddPictures 一处 DoAdjustDrawings=false 切换, 但全 EPPlus 还有 3 处同样缺 try/finally: - ExcelRangeBase.AutoFitColumns (字体测量循环) - ExcelWorksheet.CreateXml (加载 xlsx xml) - ExcelWorksheets.CloneCells (worksheet 拷贝) 任一处抛未捕获异常都会让 flag 永久卡在 false, 后续 Row.Height / Column.Width / Column.Hidden setter 不重算 drawings, 图片位置错乱. 修复: 用 try/finally 包裹原赋值, finally 恢复 prevDoAdjust. 验证: DrawingsFlush 4/4, ExcelExporter 36/36, XSSF 34/34, ImageOptimization 25/25, 共 100 测试通过.
1 parent d54ef9d commit a06b276

3 files changed

Lines changed: 21 additions & 3 deletions

File tree

src/EPPlus/EPPlus/ExcelRangeBase.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -868,6 +868,8 @@ public void AutoFitColumns(double minimumWidth, double maximumWidth)
868868

869869
bool doAdjust = _worksheet._package.DoAdjustDrawings;
870870
_worksheet._package.DoAdjustDrawings = false;
871+
try
872+
{
871873
var drawWidths = _worksheet.Drawings.GetDrawingWidths();
872874

873875
var fromCol = _fromCol > _worksheet.Dimension._fromCol ? _fromCol : _worksheet.Dimension._fromCol;
@@ -1003,7 +1005,6 @@ public void AutoFitColumns(double minimumWidth, double maximumWidth)
10031005
}
10041006

10051007
_worksheet.Drawings.AdjustWidth(drawWidths);
1006-
_worksheet._package.DoAdjustDrawings = doAdjust;
10071008
}
10081009
finally
10091010
{
@@ -1014,6 +1015,11 @@ public void AutoFitColumns(double minimumWidth, double maximumWidth)
10141015
tf?.Dispose();
10151016
fallbackFont?.Dispose();
10161017
}
1018+
}
1019+
finally
1020+
{
1021+
_worksheet._package.DoAdjustDrawings = doAdjust;
1022+
}
10171023
}
10181024

10191025
private SKFont GetAvailableFont(string text,

src/EPPlus/EPPlus/ExcelWorksheet.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -874,6 +874,8 @@ private void CreateXml()
874874
// First Columns, rows, cells, mergecells, hyperlinks and pagebreakes are loaded from a xmlstream to optimize speed...
875875
bool doAdjust = _package.DoAdjustDrawings;
876876
_package.DoAdjustDrawings = false;
877+
try
878+
{
877879
Stream stream = packPart.GetStream();
878880

879881
#if Core
@@ -907,7 +909,11 @@ private void CreateXml()
907909
else
908910
LoadXmlSafe(_worksheetXml, xml, encoding);
909911

910-
_package.DoAdjustDrawings = doAdjust;
912+
}
913+
finally
914+
{
915+
_package.DoAdjustDrawings = doAdjust;
916+
}
911917
ClearNodes();
912918
}
913919
/// <summary>

src/EPPlus/EPPlus/ExcelWorksheets.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -526,6 +526,8 @@ private void CloneCells(ExcelWorksheet Copy, ExcelWorksheet added)
526526

527527
bool doAdjust = _pck.DoAdjustDrawings;
528528
_pck.DoAdjustDrawings = false;
529+
try
530+
{
529531
//Merged cells
530532
foreach (var r in Copy.MergedCells) //Issue #94
531533
{
@@ -586,7 +588,11 @@ private void CloneCells(ExcelWorksheet Copy, ExcelWorksheet added)
586588
}
587589
}
588590
}
589-
added._package.DoAdjustDrawings = doAdjust;
591+
}
592+
finally
593+
{
594+
added._package.DoAdjustDrawings = doAdjust;
595+
}
590596
}
591597

592598
private int CopyValues(ExcelWorksheet Copy, ExcelWorksheet added, int row, int col)

0 commit comments

Comments
 (0)