Skip to content

Commit ab18bf9

Browse files
authored
Merge pull request #331 from viest/dev
Feat: skip empty rows
2 parents e3c02b3 + 005aaf7 commit ab18bf9

File tree

8 files changed

+52
-14
lines changed

8 files changed

+52
-14
lines changed

.github/workflows/main.yml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,9 @@ jobs:
2020
php-version: ${{ matrix.php-versions }}
2121

2222
- name: Setup Dependencies
23-
run: sudo apt-get install zlib1g-dev valgrind -y
23+
run: |
24+
sudo apt-get update
25+
sudo apt-get install zlib1g-dev valgrind -y
2426
2527
- name: Setup Submodule
2628
run: git submodule update --init

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
</div>
44

55
<div align=center>
6-
<a href="https://travis-ci.org/viest/php-ext-xlswriter"><img src="https://travis-ci.org/viest/php-ext-xlswriter.svg?branch=master"/></a>
6+
<a href="https://travis-ci.com/viest/php-ext-xlswriter"><img src="https://travis-ci.com/viest/php-ext-xlswriter.svg?branch=master"/></a>
77
<a href="https://ci.appveyor.com/project/viest/php-ext-excel-export/branch/master"><img src="https://ci.appveyor.com/api/projects/status/w4cfjo9e4gsrs6rn/branch/master?svg=true"/></a>
88
<a href="https://github.com/viest/php-ext-xlswriter/releases"><img src="https://img.shields.io/github/release/viest/php-ext-excel-export.svg"/></a>
99
</div>

README_zh.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
</div>
44

55
<div align=center>
6-
<a href="https://travis-ci.org/viest/php-ext-xlswriter"><img src="https://travis-ci.org/viest/php-ext-xlswriter.svg?branch=master"/></a>
6+
<a href="https://travis-ci.com/viest/php-ext-xlswriter"><img src="https://travis-ci.com/viest/php-ext-xlswriter.svg?branch=master"/></a>
77
<a href="https://ci.appveyor.com/project/viest/php-ext-excel-export/branch/master"><img src="https://ci.appveyor.com/api/projects/status/w4cfjo9e4gsrs6rn/branch/master?svg=true"/></a>
88
<a href="https://github.com/viest/php-ext-xlswriter/releases"><img src="https://img.shields.io/github/release/viest/php-ext-excel-export.svg"/></a>
99
</div>

include/read.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@ int sheet_read_row(xlsxioreadersheet sheet_t);
2323
void sheet_list(xlsxioreader file_t, zval *zv_result_t);
2424
xlsxioreader file_open(const char *directory, const char *file_name);
2525
void skip_rows(xlsxioreadersheet sheet_t, zval *zv_type_t, zend_long data_type_default, zend_long zl_skip_row);
26-
void load_sheet_all_data(xlsxioreadersheet sheet_t, zval *zv_type_t, zend_long data_type_default, zval *zv_result_t);
26+
void load_sheet_all_data(xlsxioreadersheet sheet_t, zend_long sheet_flag, zval *zv_type_t, zend_long data_type_default, zval *zv_result_t);
27+
void load_sheet_row_data (xlsxioreadersheet sheet_t, zend_long sheet_flag, zval *zv_type_t, zend_long data_type_default, zval *zv_result_t);
2728
xlsxioreadersheet sheet_open(xlsxioreader file_t, const zend_string *zs_sheet_name_t, const zend_long zl_flag);
2829
unsigned int load_sheet_current_row_data(xlsxioreadersheet sheet_t, zval *zv_result_t, zval *zv_type, zend_long data_type_default, unsigned int flag);
2930
unsigned int load_sheet_current_row_data_callback(zend_string *zs_sheet_name_t, xlsxioreader file_t, void *callback_data);

include/xlswriter.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ typedef struct {
4545
xlsxioreader file_t;
4646
xlsxioreadersheet sheet_t;
4747
zend_long data_type_default;
48+
zend_long sheet_flag;
4849
} xls_resource_read_t;
4950

5051
typedef struct {

kernel/excel.c

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1121,16 +1121,16 @@ PHP_METHOD(vtiful_xls, openFile)
11211121

11221122
xls_object* obj = Z_XLS_P(getThis());
11231123

1124-
if (obj->read_ptr.file_t != NULL) {
1125-
xlsxioread_close(obj->read_ptr.file_t);
1126-
obj->read_ptr.file_t = NULL;
1127-
}
1128-
11291124
if (obj->read_ptr.sheet_t != NULL) {
11301125
xlsxioread_sheet_close(obj->read_ptr.sheet_t);
11311126
obj->read_ptr.sheet_t = NULL;
11321127
}
11331128

1129+
if (obj->read_ptr.file_t != NULL) {
1130+
xlsxioread_close(obj->read_ptr.file_t);
1131+
obj->read_ptr.file_t = NULL;
1132+
}
1133+
11341134
obj->read_ptr.file_t = file_open(Z_STRVAL_P(zv_config_path), ZSTR_VAL(zs_file_name));
11351135
}
11361136
/* }}} */
@@ -1160,6 +1160,7 @@ PHP_METHOD(vtiful_xls, openSheet)
11601160
xlsxioread_sheet_close(obj->read_ptr.sheet_t);
11611161
}
11621162

1163+
obj->read_ptr.sheet_flag = zl_flag;
11631164
obj->read_ptr.sheet_t = sheet_open(obj->read_ptr.file_t, zs_sheet_name, zl_flag);
11641165
}
11651166
/* }}} */
@@ -1329,12 +1330,12 @@ PHP_METHOD(vtiful_xls, getSheetData)
13291330
zval *zv_type = zend_read_property(vtiful_xls_ce, PROP_OBJ(getThis()), ZEND_STRL(V_XLS_TYPE), 0, NULL);
13301331

13311332
if (zv_type != NULL && Z_TYPE_P(zv_type) == IS_ARRAY) {
1332-
load_sheet_all_data(obj->read_ptr.sheet_t, zv_type, obj->read_ptr.data_type_default, return_value);
1333+
load_sheet_all_data(obj->read_ptr.sheet_t, obj->read_ptr.sheet_flag, zv_type, obj->read_ptr.data_type_default, return_value);
13331334

13341335
return;
13351336
}
13361337

1337-
load_sheet_all_data(obj->read_ptr.sheet_t, NULL, obj->read_ptr.data_type_default, return_value);
1338+
load_sheet_all_data(obj->read_ptr.sheet_t, obj->read_ptr.sheet_flag, NULL, obj->read_ptr.data_type_default, return_value);
13381339
}
13391340
/* }}} */
13401341

@@ -1359,7 +1360,7 @@ PHP_METHOD(vtiful_xls, nextRow)
13591360
zv_type_t = zend_read_property(vtiful_xls_ce, PROP_OBJ(getThis()), ZEND_STRL(V_XLS_TYPE), 0, NULL);
13601361
}
13611362

1362-
load_sheet_current_row_data(obj->read_ptr.sheet_t, return_value, zv_type_t, obj->read_ptr.data_type_default, READ_ROW);
1363+
load_sheet_row_data(obj->read_ptr.sheet_t, obj->read_ptr.sheet_flag, zv_type_t, obj->read_ptr.data_type_default, return_value);
13631364
}
13641365
/* }}} */
13651366

kernel/read.c

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -390,7 +390,32 @@ unsigned int load_sheet_current_row_data_callback (zend_string *zs_sheet_name_t,
390390
/* }}} */
391391

392392
/* {{{ */
393-
void load_sheet_all_data (xlsxioreadersheet sheet_t, zval *zv_type_t, zend_long data_type_default, zval *zv_result_t)
393+
void load_sheet_row_data (xlsxioreadersheet sheet_t, zend_long sheet_flag, zval *zv_type_t, zend_long data_type_default, zval *zv_result_t)
394+
{
395+
size_t row_index = 0;
396+
397+
do {
398+
load_sheet_current_row_data(sheet_t, zv_result_t, zv_type_t, data_type_default, READ_ROW);
399+
400+
if (row_index == xlsxioread_sheet_last_row_index(sheet_t)) {
401+
return;
402+
}
403+
404+
row_index = xlsxioread_sheet_last_row_index(sheet_t);
405+
406+
if (sheet_flag & XLSXIOREAD_SKIP_EMPTY_ROWS
407+
&& Z_TYPE_P(zv_result_t) == IS_ARRAY
408+
&& zend_hash_num_elements(Z_ARR_P(zv_result_t)) == 0) {
409+
continue;
410+
}
411+
412+
return;
413+
} while (1);
414+
}
415+
/* }}} */
416+
417+
/* {{{ */
418+
void load_sheet_all_data (xlsxioreadersheet sheet_t, zend_long sheet_flag, zval *zv_type_t, zend_long data_type_default, zval *zv_result_t)
394419
{
395420
if (Z_TYPE_P(zv_result_t) != IS_ARRAY) {
396421
array_init(zv_result_t);
@@ -402,6 +427,14 @@ void load_sheet_all_data (xlsxioreadersheet sheet_t, zval *zv_type_t, zend_long
402427
ZVAL_NULL(&_zv_tmp_row);
403428

404429
load_sheet_current_row_data(sheet_t, &_zv_tmp_row, zv_type_t, data_type_default, READ_SKIP_ROW);
430+
431+
if (sheet_flag & XLSXIOREAD_SKIP_EMPTY_ROWS
432+
&& Z_TYPE(_zv_tmp_row) == IS_ARRAY
433+
&& zend_hash_num_elements(Z_ARR(_zv_tmp_row)) == 0) {
434+
zval_ptr_dtor(&_zv_tmp_row);
435+
continue;
436+
}
437+
405438
add_next_index_zval(zv_result_t, &_zv_tmp_row);
406439
}
407440
}

tests/fix-207.phpt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,4 +72,4 @@ array(2) {
7272
[1]=>
7373
int(24)
7474
}
75-
}
75+
}

0 commit comments

Comments
 (0)