1
+ using ClosedXML . Excel ;
1
2
using System ;
2
3
using System . Collections . Generic ;
3
4
using System . Linq ;
4
- using ClosedXML . Excel ;
5
- using ClosedXML . Report . Utils ;
6
5
7
6
namespace ClosedXML . Report . Excel
8
7
{
@@ -15,8 +14,6 @@ internal class TempSheetBuffer: IReportBuffer
15
14
private int _clmn ;
16
15
private int _prevrow ;
17
16
private int _prevclmn ;
18
- private int _maxClmn ;
19
- private int _maxRow ;
20
17
21
18
public TempSheetBuffer ( XLWorkbook wb )
22
19
{
@@ -36,22 +33,27 @@ private void Init()
36
33
_sheet = _wb . AddWorksheet ( SheetName ) ;
37
34
_sheet . SetCalcEngineCacheExpressions ( false ) ;
38
35
}
39
- // _sheet.Visibility = XLWorksheetVisibility.VeryHidden;
36
+ _sheet . Visibility = XLWorksheetVisibility . VeryHidden ;
40
37
}
41
- _row = 1 ;
42
- _clmn = 1 ;
43
- _maxRow = _prevrow = 1 ;
44
- _maxClmn = _prevclmn = 1 ;
38
+ _row = _prevrow = 1 ;
39
+ _clmn = _prevclmn = 1 ;
45
40
Clear ( ) ;
41
+ _sheet . Style = _wb . Worksheets . First ( ) . Style ;
46
42
}
47
43
48
44
public void WriteValue ( object value , IXLStyle cellStyle )
49
45
{
50
46
var xlCell = _sheet . Cell ( _row , _clmn ) ;
51
- xlCell . SetValue ( value ) ;
47
+ try
48
+ {
49
+ xlCell . SetValue ( value ) ;
50
+ }
51
+ catch ( ArgumentException )
52
+ {
53
+ xlCell . SetValue ( value ? . ToString ( ) ) ;
54
+ }
55
+
52
56
xlCell . Style = cellStyle ?? _wb . Style ;
53
- _maxClmn = Math . Max ( _maxClmn , _clmn ) ;
54
- _maxRow = Math . Max ( _maxRow , _row ) ;
55
57
ChangeAddress ( _row , _clmn + 1 ) ;
56
58
}
57
59
@@ -60,8 +62,6 @@ public void WriteFormulaR1C1(string formula, IXLStyle cellStyle)
60
62
var xlCell = _sheet . Cell ( _row , _clmn ) ;
61
63
xlCell . Style = cellStyle ;
62
64
xlCell . SetFormulaR1C1 ( formula ) ;
63
- _maxClmn = Math . Max ( _maxClmn , _clmn ) ;
64
- _maxRow = Math . Max ( _maxRow , _row ) ;
65
65
ChangeAddress ( _row , _clmn + 1 ) ;
66
66
}
67
67
@@ -92,15 +92,13 @@ private void ChangeAddress(int row, int clmn)
92
92
93
93
public IXLRange CopyTo ( IXLRange range )
94
94
{
95
- // LastCellUsed may produce the wrong result, see https://github.com/ClosedXML/ClosedXML/issues/339
96
- var lastCell = _sheet . Cell (
97
- _sheet . LastRowUsed ( true ) ? . RowNumber ( ) ?? 1 ,
98
- _sheet . LastColumnUsed ( true ) ? . ColumnNumber ( ) ?? 1 ) ;
99
- var tempRng = _sheet . Range ( _sheet . Cell ( 1 , 1 ) , lastCell ) ;
95
+ var firstCell = _sheet . Cell ( 1 , 1 ) ;
96
+ var lastCell = _sheet . LastCellUsed ( XLCellsUsedOptions . All ) ?? firstCell ;
97
+ var tempRng = _sheet . Range ( firstCell , lastCell ) ;
100
98
101
99
var rowDiff = tempRng . RowCount ( ) - range . RowCount ( ) ;
102
100
if ( rowDiff > 0 )
103
- range . LastRow ( ) . Unsubscribed ( ) . RowAbove ( ) . Unsubscribed ( ) . InsertRowsBelow ( rowDiff , true ) ;
101
+ range . LastRow ( ) . RowAbove ( ) . InsertRowsBelow ( rowDiff , true ) ;
104
102
else if ( rowDiff < 0 )
105
103
range . Worksheet . Range (
106
104
range . LastRow ( ) . RowNumber ( ) + rowDiff + 1 ,
@@ -126,32 +124,31 @@ public IXLRange CopyTo(IXLRange range)
126
124
127
125
var tgtSheet = range . Worksheet ;
128
126
var tgtStartRow = range . RangeAddress . FirstAddress . RowNumber ;
129
- using ( var srcRows = _sheet . Rows ( tempRng . RangeAddress . FirstAddress . RowNumber , tempRng . RangeAddress . LastAddress . RowNumber ) )
130
- foreach ( var row in srcRows )
131
- {
132
- var xlRow = tgtSheet . Row ( row . RowNumber ( ) + tgtStartRow - 1 ) ;
133
- xlRow . OutlineLevel = row . OutlineLevel ;
134
- if ( row . IsHidden )
135
- xlRow . Collapse ( ) ;
136
- else
137
- xlRow . Expand ( ) ;
138
- }
127
+ var srcRows = _sheet . Rows ( tempRng . RangeAddress . FirstAddress . RowNumber , tempRng . RangeAddress . LastAddress . RowNumber ) ;
128
+ foreach ( var row in srcRows )
129
+ {
130
+ var xlRow = tgtSheet . Row ( row . RowNumber ( ) + tgtStartRow - 1 ) ;
131
+ xlRow . OutlineLevel = row . OutlineLevel ;
132
+ if ( row . IsHidden )
133
+ xlRow . Collapse ( ) ;
134
+ else
135
+ xlRow . Expand ( ) ;
136
+ }
139
137
return range ;
140
138
}
141
139
142
140
public void Clear ( )
143
141
{
144
- using ( var srcRows = _sheet . RowsUsed ( true ) )
145
- foreach ( var row in srcRows )
146
- {
147
- row . OutlineLevel = 0 ;
148
- }
142
+ var srcRows = _sheet . RowsUsed ( XLCellsUsedOptions . All ) ;
143
+ foreach ( var row in srcRows )
144
+ {
145
+ row . OutlineLevel = 0 ;
146
+ }
149
147
_sheet . Clear ( ) ;
150
148
}
151
149
152
150
public void AddConditionalFormats ( IEnumerable < IXLConditionalFormat > formats , IXLRangeBase fromRange , IXLRangeBase toRange )
153
151
{
154
- //var tempRng = _sheet.Range(_sheet.Cell(1, 1), _sheet.Cell(_prevrow, _prevclmn));
155
152
foreach ( var format in formats )
156
153
{
157
154
format . CopyRelative ( fromRange , toRange , true ) ;
0 commit comments