11
11
12
12
namespace MiniExcelLibs . Csv
13
13
{
14
- internal class CsvWriter : IExcelWriter , IDisposable
14
+ internal partial class CsvWriter : IExcelWriter , IDisposable
15
15
{
16
16
private readonly StreamWriter _writer ;
17
17
private readonly CsvConfiguration _configuration ;
@@ -27,26 +27,6 @@ public CsvWriter(Stream stream, object value, IConfiguration configuration, bool
27
27
_writer = _configuration . StreamWriterFunc ( stream ) ;
28
28
}
29
29
30
- public int [ ] SaveAs ( )
31
- {
32
- if ( _value == null )
33
- {
34
- _writer . Write ( "" ) ;
35
- _writer . Flush ( ) ;
36
- return new int [ 0 ] ;
37
- }
38
-
39
- var rowsWritten = WriteValues ( _value ) ;
40
- _writer . Flush ( ) ;
41
-
42
- return new [ ] { rowsWritten } ;
43
- }
44
-
45
- public int Insert ( bool overwriteSheet = false )
46
- {
47
- return SaveAs ( ) . FirstOrDefault ( ) ;
48
- }
49
-
50
30
private void AppendColumn ( StringBuilder rowBuilder , CellWriteInfo column )
51
31
{
52
32
rowBuilder . Append ( CsvHelpers . ConvertToCsvValue ( ToCsvString ( column . Value , column . Prop ) , _configuration ) ) ;
@@ -57,69 +37,31 @@ private static void RemoveTrailingSeparator(StringBuilder rowBuilder)
57
37
{
58
38
if ( rowBuilder . Length == 0 )
59
39
return ;
60
-
40
+
61
41
rowBuilder . Remove ( rowBuilder . Length - 1 , 1 ) ;
62
42
}
63
43
64
44
private string GetHeader ( List < ExcelColumnInfo > props ) => string . Join (
65
45
_configuration . Seperator . ToString ( ) ,
66
46
props . Select ( s => CsvHelpers . ConvertToCsvValue ( s ? . ExcelColumnName , _configuration ) ) ) ;
67
47
68
- private int WriteValues ( object values )
69
- {
70
- var writeAdapter = MiniExcelWriteAdapterFactory . GetWriteAdapter ( values , _configuration ) ;
71
-
72
- var props = writeAdapter . GetColumns ( ) ;
73
- if ( props == null )
74
- {
75
- _writer . Write ( _configuration . NewLine ) ;
76
- _writer . Flush ( ) ;
77
- return 0 ;
78
- }
79
-
80
- if ( _printHeader )
81
- {
82
- _writer . Write ( GetHeader ( props ) ) ;
83
- _writer . Write ( _configuration . NewLine ) ;
84
- }
85
-
86
- if ( writeAdapter == null )
87
- return 0 ;
88
-
89
- var rowBuilder = new StringBuilder ( ) ;
90
- var rowsWritten = 0 ;
91
-
92
- foreach ( var row in writeAdapter . GetRows ( props ) )
93
- {
94
- rowBuilder . Clear ( ) ;
95
- foreach ( var column in row )
96
- {
97
- AppendColumn ( rowBuilder , column ) ;
98
- }
99
- RemoveTrailingSeparator ( rowBuilder ) ;
100
- _writer . Write ( rowBuilder . ToString ( ) ) ;
101
- _writer . Write ( _configuration . NewLine ) ;
102
-
103
- rowsWritten ++ ;
104
- }
105
- return rowsWritten ;
106
- }
107
-
108
- private async Task < int > WriteValuesAsync ( StreamWriter writer , object values , string seperator , string newLine , CancellationToken cancellationToken )
48
+ [ Zomp . SyncMethodGenerator . CreateSyncVersion ]
49
+ private async Task < int > WriteValuesAsync ( StreamWriter writer , object values , string seperator , string newLine , CancellationToken cancellationToken = default )
109
50
{
110
51
cancellationToken . ThrowIfCancellationRequested ( ) ;
111
-
112
- #if NETSTANDARD2_0_OR_GREATER || NET
52
+
113
53
IMiniExcelWriteAdapter writeAdapter = null ;
114
54
if ( ! MiniExcelWriteAdapterFactory . TryGetAsyncWriteAdapter ( values , _configuration , out var asyncWriteAdapter ) )
115
55
{
116
56
writeAdapter = MiniExcelWriteAdapterFactory . GetWriteAdapter ( values , _configuration ) ;
117
57
}
118
- var props = writeAdapter != null ? writeAdapter . GetColumns ( ) : await asyncWriteAdapter . GetColumnsAsync ( ) . ConfigureAwait ( false ) ;
58
+ List < ExcelColumnInfo > props ;
59
+ #if SYNC_ONLY
60
+ props = writeAdapter ? . GetColumns ( ) ;
119
61
#else
120
- IMiniExcelWriteAdapter writeAdapter = MiniExcelWriteAdapterFactory . GetWriteAdapter ( values , _configuration ) ;
121
- var props = writeAdapter . GetColumns ( ) ;
62
+ props = writeAdapter != null ? writeAdapter . GetColumns ( ) : await asyncWriteAdapter . GetColumnsAsync ( ) . ConfigureAwait ( false ) ;
122
63
#endif
64
+
123
65
if ( props == null )
124
66
{
125
67
await _writer . WriteAsync ( _configuration . NewLine
@@ -134,7 +76,7 @@ await _writer.FlushAsync(
134
76
) . ConfigureAwait ( false ) ;
135
77
return 0 ;
136
78
}
137
-
79
+
138
80
if ( _printHeader )
139
81
{
140
82
await _writer . WriteAsync ( GetHeader ( props )
@@ -148,10 +90,10 @@ await _writer.WriteAsync(newLine
148
90
#endif
149
91
) . ConfigureAwait ( false ) ;
150
92
}
151
-
93
+
152
94
var rowBuilder = new StringBuilder ( ) ;
153
95
var rowsWritten = 0 ;
154
-
96
+
155
97
if ( writeAdapter != null )
156
98
{
157
99
foreach ( var row in writeAdapter . GetRows ( props , cancellationToken ) )
@@ -162,7 +104,7 @@ await _writer.WriteAsync(newLine
162
104
cancellationToken . ThrowIfCancellationRequested ( ) ;
163
105
AppendColumn ( rowBuilder , column ) ;
164
106
}
165
-
107
+
166
108
RemoveTrailingSeparator ( rowBuilder ) ;
167
109
await _writer . WriteAsync ( rowBuilder . ToString ( )
168
110
#if NET5_0_OR_GREATER
@@ -174,24 +116,24 @@ await _writer.WriteAsync(newLine
174
116
. AsMemory ( ) , cancellationToken
175
117
#endif
176
118
) . ConfigureAwait ( false ) ;
177
-
119
+
178
120
rowsWritten ++ ;
179
121
}
180
122
}
181
- #if NETSTANDARD2_0_OR_GREATER || NET
182
123
else
183
124
{
125
+ #if ! SYNC_ONLY
184
126
await foreach ( var row in asyncWriteAdapter . GetRowsAsync ( props , cancellationToken ) . ConfigureAwait ( false ) )
185
127
{
186
128
cancellationToken . ThrowIfCancellationRequested ( ) ;
187
129
rowBuilder . Clear ( ) ;
188
-
130
+
189
131
await foreach ( var column in row . ConfigureAwait ( false ) )
190
132
{
191
133
cancellationToken . ThrowIfCancellationRequested ( ) ;
192
134
AppendColumn ( rowBuilder , column ) ;
193
135
}
194
-
136
+
195
137
RemoveTrailingSeparator ( rowBuilder ) ;
196
138
await _writer . WriteAsync ( rowBuilder . ToString ( )
197
139
#if NET5_0_OR_GREATER
@@ -203,18 +145,19 @@ await _writer.WriteAsync(newLine
203
145
. AsMemory ( ) , cancellationToken
204
146
#endif
205
147
) . ConfigureAwait ( false ) ;
206
-
148
+
207
149
rowsWritten ++ ;
208
150
}
209
- }
210
151
#endif
152
+ }
211
153
return rowsWritten ;
212
154
}
213
155
156
+ [ Zomp . SyncMethodGenerator . CreateSyncVersion ]
214
157
public async Task < int [ ] > SaveAsAsync ( CancellationToken cancellationToken = default )
215
158
{
216
159
cancellationToken . ThrowIfCancellationRequested ( ) ;
217
-
160
+
218
161
var seperator = _configuration . Seperator . ToString ( ) ;
219
162
var newLine = _configuration . NewLine ;
220
163
@@ -239,10 +182,11 @@ await _writer.FlushAsync(
239
182
cancellationToken
240
183
#endif
241
184
) . ConfigureAwait ( false ) ;
242
-
185
+
243
186
return new [ ] { rowsWritten } ;
244
187
}
245
188
189
+ [ Zomp . SyncMethodGenerator . CreateSyncVersion ]
246
190
public async Task < int > InsertAsync ( bool overwriteSheet = false , CancellationToken cancellationToken = default )
247
191
{
248
192
var rowsWritten = await SaveAsAsync ( cancellationToken ) . ConfigureAwait ( false ) ;
@@ -260,11 +204,11 @@ public string ToCsvString(object value, ExcelColumnInfo p)
260
204
{
261
205
return dateTime . ToString ( p . ExcelFormat , _configuration . Culture ) ;
262
206
}
263
- return _configuration . Culture . Equals ( CultureInfo . InvariantCulture )
264
- ? dateTime . ToString ( "yyyy-MM-dd HH:mm:ss" , _configuration . Culture )
207
+ return _configuration . Culture . Equals ( CultureInfo . InvariantCulture )
208
+ ? dateTime . ToString ( "yyyy-MM-dd HH:mm:ss" , _configuration . Culture )
265
209
: dateTime . ToString ( _configuration . Culture ) ;
266
210
}
267
-
211
+
268
212
if ( p ? . ExcelFormat != null && value is IFormattable formattableValue )
269
213
return formattableValue . ToString ( p . ExcelFormat , _configuration . Culture ) ;
270
214
0 commit comments