1- using System . Dynamic ;
21using MiniExcelLib . OpenXml ;
32using OpenXmlReader = MiniExcelLib . OpenXml . OpenXmlReader ;
43
@@ -16,11 +15,14 @@ public async IAsyncEnumerable<T> QueryAsync<T>(string path, string? sheetName =
1615 string startCell = "A1" , bool treatHeaderAsData = false , OpenXmlConfiguration ? configuration = null ,
1716 [ EnumeratorCancellation ] CancellationToken cancellationToken = default ) where T : class , new ( )
1817 {
18+ #if NET8_0_OR_GREATER
19+ var stream = FileHelper . OpenSharedRead ( path ) ;
20+ await using var disposableStream = stream . ConfigureAwait ( false ) ;
21+ #else
1922 using var stream = FileHelper . OpenSharedRead ( path ) ;
20-
23+ #endif
2124 var query = QueryAsync < T > ( stream , sheetName , startCell , treatHeaderAsData , configuration , cancellationToken ) ;
2225
23- //Foreach yield return twice reason : https://stackoverflow.com/questions/66791982/ienumerable-extract-code-lazy-loading-show-stream-was-not-readable
2426 await foreach ( var item in query . ConfigureAwait ( false ) )
2527 yield return item ;
2628 }
@@ -40,7 +42,13 @@ public async IAsyncEnumerable<dynamic> QueryAsync(string path, bool useHeaderRow
4042 string ? sheetName = null , string startCell = "A1" , OpenXmlConfiguration ? configuration = null ,
4143 [ EnumeratorCancellation ] CancellationToken cancellationToken = default )
4244 {
45+ #if NET8_0_OR_GREATER
46+ var stream = FileHelper . OpenSharedRead ( path ) ;
47+ await using var disposableStream = stream . ConfigureAwait ( false ) ;
48+ #else
4349 using var stream = FileHelper . OpenSharedRead ( path ) ;
50+ #endif
51+
4452 await foreach ( var item in QueryAsync ( stream , useHeaderRow , sheetName , startCell , configuration , cancellationToken ) . ConfigureAwait ( false ) )
4553 yield return item ;
4654 }
@@ -72,7 +80,12 @@ public async IAsyncEnumerable<dynamic> QueryRangeAsync(string path, bool useHead
7280 string ? sheetName = null , string startCell = "A1" , string endCell = "" , OpenXmlConfiguration ? configuration = null ,
7381 [ EnumeratorCancellation ] CancellationToken cancellationToken = default )
7482 {
83+ #if NET8_0_OR_GREATER
84+ var stream = FileHelper . OpenSharedRead ( path ) ;
85+ await using var disposableStream = stream . ConfigureAwait ( false ) ;
86+ #else
7587 using var stream = FileHelper . OpenSharedRead ( path ) ;
88+ #endif
7689 await foreach ( var item in QueryRangeAsync ( stream , useHeaderRow , sheetName , startCell , endCell , configuration , cancellationToken ) . ConfigureAwait ( false ) )
7790 yield return item ;
7891 }
@@ -93,7 +106,12 @@ public async IAsyncEnumerable<dynamic> QueryRangeAsync(string path, bool useHead
93106 int ? endColumnIndex = null , OpenXmlConfiguration ? configuration = null ,
94107 [ EnumeratorCancellation ] CancellationToken cancellationToken = default )
95108 {
109+ #if NET8_0_OR_GREATER
110+ var stream = FileHelper . OpenSharedRead ( path ) ;
111+ await using var disposableStream = stream . ConfigureAwait ( false ) ;
112+ #else
96113 using var stream = FileHelper . OpenSharedRead ( path ) ;
114+ #endif
97115 await foreach ( var item in QueryRangeAsync ( stream , useHeaderRow , sheetName , startRowIndex , startColumnIndex , endRowIndex , endColumnIndex , configuration , cancellationToken ) . ConfigureAwait ( false ) )
98116 yield return item ;
99117 }
@@ -121,7 +139,12 @@ public async Task<DataTable> QueryAsDataTableAsync(string path, bool useHeaderRo
121139 string ? sheetName = null , string startCell = "A1" , OpenXmlConfiguration ? configuration = null ,
122140 CancellationToken cancellationToken = default )
123141 {
142+ #if NET8_0_OR_GREATER
143+ var stream = FileHelper . OpenSharedRead ( path ) ;
144+ await using var disposableStream = stream . ConfigureAwait ( false ) ;
145+ #else
124146 using var stream = FileHelper . OpenSharedRead ( path ) ;
147+ #endif
125148 return await QueryAsDataTableAsync ( stream , useHeaderRow , sheetName , startCell , configuration , cancellationToken ) . ConfigureAwait ( false ) ;
126149 }
127150
@@ -133,7 +156,6 @@ public async Task<DataTable> QueryAsDataTableAsync(Stream stream, bool useHeader
133156 string ? sheetName = null , string startCell = "A1" , OpenXmlConfiguration ? configuration = null ,
134157 CancellationToken cancellationToken = default )
135158 {
136- /*Issue #279*/
137159 sheetName ??= ( await GetSheetNamesAsync ( stream , configuration , cancellationToken ) . ConfigureAwait ( false ) ) . First ( ) ;
138160
139161 var dt = new DataTable ( sheetName ) ;
@@ -187,7 +209,12 @@ public async Task<DataTable> QueryAsDataTableAsync(Stream stream, bool useHeader
187209 [ CreateSyncVersion ]
188210 public async Task < List < string > > GetSheetNamesAsync ( string path , OpenXmlConfiguration ? config = null , CancellationToken cancellationToken = default )
189211 {
212+ #if NET8_0_OR_GREATER
213+ var stream = FileHelper . OpenSharedRead ( path ) ;
214+ await using var disposableStream = stream . ConfigureAwait ( false ) ;
215+ #else
190216 using var stream = FileHelper . OpenSharedRead ( path ) ;
217+ #endif
191218 return await GetSheetNamesAsync ( stream , config , cancellationToken ) . ConfigureAwait ( false ) ;
192219 }
193220
@@ -207,7 +234,12 @@ public async Task<List<string>> GetSheetNamesAsync(Stream stream, OpenXmlConfigu
207234 [ CreateSyncVersion ]
208235 public async Task < List < SheetInfo > > GetSheetInformationsAsync ( string path , OpenXmlConfiguration ? config = null , CancellationToken cancellationToken = default )
209236 {
237+ #if NET8_0_OR_GREATER
238+ var stream = FileHelper . OpenSharedRead ( path ) ;
239+ await using var disposableStream = stream . ConfigureAwait ( false ) ;
240+ #else
210241 using var stream = FileHelper . OpenSharedRead ( path ) ;
242+ #endif
211243 return await GetSheetInformationsAsync ( stream , config , cancellationToken ) . ConfigureAwait ( false ) ;
212244 }
213245
@@ -226,7 +258,12 @@ public async Task<List<SheetInfo>> GetSheetInformationsAsync(Stream stream, Open
226258 [ CreateSyncVersion ]
227259 public async Task < IList < ExcelRange > > GetSheetDimensionsAsync ( string path , CancellationToken cancellationToken = default )
228260 {
261+ #if NET8_0_OR_GREATER
262+ var stream = FileHelper . OpenSharedRead ( path ) ;
263+ await using var disposableStream = stream . ConfigureAwait ( false ) ;
264+ #else
229265 using var stream = FileHelper . OpenSharedRead ( path ) ;
266+ #endif
230267 return await GetSheetDimensionsAsync ( stream , cancellationToken ) . ConfigureAwait ( false ) ;
231268 }
232269
@@ -242,7 +279,12 @@ public async Task<ICollection<string>> GetColumnNamesAsync(string path, bool use
242279 string ? sheetName = null , string startCell = "A1" , OpenXmlConfiguration ? configuration = null ,
243280 CancellationToken cancellationToken = default )
244281 {
282+ #if NET8_0_OR_GREATER
283+ var stream = FileHelper . OpenSharedRead ( path ) ;
284+ await using var disposableStream = stream . ConfigureAwait ( false ) ;
285+ #else
245286 using var stream = FileHelper . OpenSharedRead ( path ) ;
287+ #endif
246288 return await GetColumnNamesAsync ( stream , useHeaderRow , sheetName , startCell , configuration , cancellationToken ) . ConfigureAwait ( false ) ;
247289 }
248290
@@ -260,6 +302,25 @@ public async Task<ICollection<string>> GetColumnNamesAsync(Stream stream, bool u
260302 return [ ] ;
261303 }
262304
305+ [ CreateSyncVersion ]
306+ public async Task < CommentResultSet > RetrieveCommentsAsync ( string path , string ? sheetName , CancellationToken cancellationToken = default )
307+ {
308+ #if NET8_0_OR_GREATER
309+ var stream = FileHelper . OpenSharedRead ( path ) ;
310+ await using var disposableStream = stream . ConfigureAwait ( false ) ;
311+ #else
312+ using var stream = FileHelper . OpenSharedRead ( path ) ;
313+ #endif
314+ return await RetrieveCommentsAsync ( stream , sheetName , cancellationToken ) . ConfigureAwait ( false ) ;
315+ }
316+
317+ [ CreateSyncVersion ]
318+ public async Task < CommentResultSet > RetrieveCommentsAsync ( Stream stream , string ? sheetName , CancellationToken cancellationToken = default )
319+ {
320+ using var reader = await OpenXmlReader . CreateAsync ( stream , null , cancellationToken ) . ConfigureAwait ( false ) ;
321+ return await reader . ReadCommentsAsync ( sheetName , cancellationToken ) . ConfigureAwait ( false ) ;
322+ }
323+
263324 #endregion
264325
265326 #region DataReader
0 commit comments