@@ -28,6 +28,8 @@ fn sparse_rows_batch(
2828 include_comments : bool ,
2929 include_formulas : bool ,
3030 include_images : bool ,
31+ skip_empty_values : bool ,
32+ skip_blank_values : bool ,
3133) -> PyResult < Vec < PyRow > > {
3234 let wb = workbook. read ( ) . map_err ( to_py_err) ?;
3335 let ws = wb
@@ -100,10 +102,12 @@ fn sparse_rows_batch(
100102
101103 if current_row != Some ( row) {
102104 if let Some ( prev_row) = current_row {
103- rows. push ( PyRow {
104- index : prev_row,
105- cells : std:: mem:: take ( & mut current_cells) ,
106- } ) ;
105+ if !current_cells. is_empty ( ) {
106+ rows. push ( PyRow {
107+ index : prev_row,
108+ cells : std:: mem:: take ( & mut current_cells) ,
109+ } ) ;
110+ }
107111 }
108112 current_row = Some ( row) ;
109113 }
@@ -118,6 +122,16 @@ fn sparse_rows_batch(
118122 ws. get_value_at ( row, col) . to_string ( )
119123 } ;
120124
125+ if skip_blank_values || skip_empty_values {
126+ let raw = ws. get_value_at ( row, col) ;
127+ if skip_blank_values && raw. is_blank ( ) {
128+ continue ;
129+ }
130+ if skip_empty_values && raw. is_empty ( ) {
131+ continue ;
132+ }
133+ }
134+
121135 let style = if include_styles {
122136 ws. cell_style_at ( row, col) . map ( PyStyle :: from)
123137 } else {
@@ -190,10 +204,12 @@ fn sparse_rows_batch(
190204 }
191205
192206 if let Some ( last_row) = current_row {
193- rows. push ( PyRow {
194- index : last_row,
195- cells : current_cells,
196- } ) ;
207+ if !current_cells. is_empty ( ) {
208+ rows. push ( PyRow {
209+ index : last_row,
210+ cells : current_cells,
211+ } ) ;
212+ }
197213 }
198214
199215 Ok ( rows)
@@ -219,6 +235,8 @@ pub struct PyRowIterator {
219235 include_comments : bool ,
220236 include_formulas : bool ,
221237 include_images : bool ,
238+ skip_empty_values : bool ,
239+ skip_blank_values : bool ,
222240 next_row : u32 ,
223241 max_row : u32 ,
224242 buffer : Vec < PyRow > ,
@@ -254,6 +272,8 @@ impl PyRowIterator {
254272 self . include_comments ,
255273 self . include_formulas ,
256274 self . include_images ,
275+ self . skip_empty_values ,
276+ self . skip_blank_values ,
257277 ) ?;
258278 self . cursor = 0 ;
259279
@@ -388,7 +408,9 @@ impl PyWorksheet {
388408 include_hyperlinks=None ,
389409 include_comments=None ,
390410 include_formulas=None ,
391- include_images=None
411+ include_images=None ,
412+ skip_empty_values=false ,
413+ skip_blank_values=false
392414 ) ) ]
393415 fn get_rows_batch (
394416 & self ,
@@ -402,6 +424,8 @@ impl PyWorksheet {
402424 include_comments : Option < bool > ,
403425 include_formulas : Option < bool > ,
404426 include_images : Option < bool > ,
427+ skip_empty_values : bool ,
428+ skip_blank_values : bool ,
405429 ) -> PyResult < Vec < PyRow > > {
406430 sparse_rows_batch (
407431 & self . workbook ,
@@ -416,6 +440,8 @@ impl PyWorksheet {
416440 include_comments. unwrap_or ( false ) ,
417441 include_formulas. unwrap_or ( false ) ,
418442 include_images. unwrap_or ( false ) ,
443+ skip_empty_values,
444+ skip_blank_values,
419445 )
420446 }
421447
@@ -428,7 +454,9 @@ impl PyWorksheet {
428454 include_hyperlinks=None ,
429455 include_comments=None ,
430456 include_formulas=None ,
431- include_images=None
457+ include_images=None ,
458+ skip_empty_values=false ,
459+ skip_blank_values=false
432460 ) ) ]
433461 fn iterate_rows (
434462 & self ,
@@ -440,6 +468,8 @@ impl PyWorksheet {
440468 include_comments : Option < bool > ,
441469 include_formulas : Option < bool > ,
442470 include_images : Option < bool > ,
471+ skip_empty_values : bool ,
472+ skip_blank_values : bool ,
443473 ) -> PyResult < PyRowIterator > {
444474 Ok ( PyRowIterator {
445475 workbook : Arc :: clone ( & self . workbook ) ,
@@ -452,6 +482,8 @@ impl PyWorksheet {
452482 include_comments : include_comments. unwrap_or ( false ) ,
453483 include_formulas : include_formulas. unwrap_or ( false ) ,
454484 include_images : include_images. unwrap_or ( false ) ,
485+ skip_empty_values,
486+ skip_blank_values,
455487 next_row : 0 ,
456488 max_row : worksheet_max_row ( & self . workbook , self . sheet_index ) ?,
457489 buffer : Vec :: new ( ) ,
0 commit comments