Skip to content

Commit 54875f7

Browse files
authored
Merge pull request #338 from viest/dev
Feat: custom skip hidden rows
2 parents d731591 + 4bf4374 commit 54875f7

File tree

6 files changed

+72
-4
lines changed

6 files changed

+72
-4
lines changed

include/excel.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626

2727
#define V_XLS_CONST_READ_SKIP_NONE "SKIP_NONE"
2828
#define V_XLS_CONST_READ_SKIP_EMPTY_ROW "SKIP_EMPTY_ROW"
29+
#define V_XLS_CONST_READ_SKIP_HIDDEN_ROW "SKIP_HIDDEN_ROW"
2930
#define V_XLS_CONST_READ_SKIP_EMPTY_CELLS "SKIP_EMPTY_CELLS"
3031
#define V_XLS_CONST_READ_SKIP_EMPTY_VALUE "SKIP_EMPTY_VALUE"
3132

kernel/excel.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1549,6 +1549,7 @@ VTIFUL_STARTUP_FUNCTION(excel) {
15491549
#ifdef ENABLE_READER
15501550
REGISTER_CLASS_CONST_LONG(vtiful_xls_ce, V_XLS_CONST_READ_SKIP_NONE, XLSXIOREAD_SKIP_NONE);
15511551
REGISTER_CLASS_CONST_LONG(vtiful_xls_ce, V_XLS_CONST_READ_SKIP_EMPTY_ROW, XLSXIOREAD_SKIP_EMPTY_ROWS);
1552+
REGISTER_CLASS_CONST_LONG(vtiful_xls_ce, V_XLS_CONST_READ_SKIP_HIDDEN_ROW, XLSXIOREAD_SKIP_HIDDEN_ROWS);
15521553
REGISTER_CLASS_CONST_LONG(vtiful_xls_ce, V_XLS_CONST_READ_SKIP_EMPTY_CELLS, XLSXIOREAD_SKIP_EMPTY_CELLS);
15531554
REGISTER_CLASS_CONST_LONG(vtiful_xls_ce, V_XLS_CONST_READ_SKIP_EMPTY_VALUE, SKIP_EMPTY_VALUE);
15541555
#endif

library/libxlsxio/include/xlsxio_read.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,8 @@ DLL_EXPORT_XLSXIO void xlsxioread_list_sheets (xlsxioreader handle, xlsxioread_l
158158
#define XLSXIOREAD_SKIP_ALL_EMPTY (XLSXIOREAD_SKIP_EMPTY_ROWS | XLSXIOREAD_SKIP_EMPTY_CELLS)
159159
/*! \brief skip extra cells to the right of the rightmost header cell \hideinitializer */
160160
#define XLSXIOREAD_SKIP_EXTRA_CELLS 0x04
161+
/*! \brief skip hidden rows \hideinitializer */
162+
#define XLSXIOREAD_SKIP_HIDDEN_ROWS 0x08
161163
/*! @} */
162164

163165
/*! \brief type of pointer to callback function for processing a worksheet cell value

library/libxlsxio/lib/xlsxio_read.c

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1022,10 +1022,11 @@ void data_sheet_expat_callback_find_row_start (void* callbackdata, const XML_Cha
10221022
struct data_sheet_callback_data* data = (struct data_sheet_callback_data*)callbackdata;
10231023
if (XML_Char_icmp_ins(name, X("row")) == 0) {
10241024
const XML_Char* hidden = get_expat_attr_by_name(atts, X("hidden"));
1025-
if (!hidden || XML_Char_tol(hidden) == 0) {//nesting level for current tag to skip
1026-
//start handler to set after skipping
1027-
//end handler to set after skipping
1028-
//data handler to set after skipping
1025+
if (!hidden || XML_Char_tol(hidden) == 0 || !(data->flags & XLSXIOREAD_SKIP_HIDDEN_ROWS)) {
1026+
//nesting level for current tag to skip
1027+
//start handler to set after skipping
1028+
//end handler to set after skipping
1029+
//data handler to set after skipping
10291030

10301031
data->rownr++;
10311032
data->colnr = 0;
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
--TEST--
2+
Check for vtiful presence
3+
--SKIPIF--
4+
<?php
5+
require __DIR__ . '/include/skipif.inc';
6+
skip_disable_reader();
7+
?>
8+
--FILE--
9+
<?php
10+
$config = ['path' => './tests/xlsx'];
11+
$excel = new \Vtiful\Kernel\Excel($config);
12+
13+
$data = $excel->openFile('hidden_row.xlsx')
14+
->openSheet('Sheet1')
15+
->getSheetData();
16+
17+
var_dump($data);
18+
19+
$data = $excel->openFile('hidden_row.xlsx')
20+
->openSheet('Sheet1', \Vtiful\Kernel\Excel::SKIP_HIDDEN_ROW|\Vtiful\Kernel\Excel::SKIP_EMPTY_ROW)
21+
->getSheetData();
22+
23+
var_dump($data);
24+
?>
25+
--CLEAN--
26+
<?php
27+
@unlink(__DIR__ . '/tutorial.xlsx');
28+
?>
29+
--EXPECT--
30+
array(4) {
31+
[0]=>
32+
array(1) {
33+
[0]=>
34+
string(4) "name"
35+
}
36+
[1]=>
37+
array(1) {
38+
[0]=>
39+
string(8) "ZhangSan"
40+
}
41+
[2]=>
42+
array(1) {
43+
[0]=>
44+
string(4) "LiSi"
45+
}
46+
[3]=>
47+
array(1) {
48+
[0]=>
49+
string(6) "WangWu"
50+
}
51+
}
52+
array(2) {
53+
[0]=>
54+
array(1) {
55+
[0]=>
56+
string(4) "name"
57+
}
58+
[1]=>
59+
array(1) {
60+
[0]=>
61+
string(6) "WangWu"
62+
}
63+
}

tests/xlsx/hidden_row.xlsx

8.56 KB
Binary file not shown.

0 commit comments

Comments
 (0)