@@ -32,6 +32,8 @@ PHP_VTIFUL_API zend_object *vtiful_xls_objects_new(zend_class_entry *ce)
3232{
3333 xls_object * intern = vtiful_object_alloc (sizeof (xls_object ), ce );
3434
35+ SHEET_LINE_INIT (intern )
36+
3537 zend_object_std_init (& intern -> zo , ce );
3638 object_properties_init (& intern -> zo , ce );
3739
@@ -59,8 +61,9 @@ ZEND_BEGIN_ARG_INFO_EX(xls_construct_arginfo, 0, 0, 1)
5961 ZEND_ARG_INFO (0 , config )
6062ZEND_END_ARG_INFO ()
6163
62- ZEND_BEGIN_ARG_INFO_EX (xls_file_name_arginfo , 0 , 0 , 1 )
64+ ZEND_BEGIN_ARG_INFO_EX (xls_file_name_arginfo , 0 , 0 , 2 )
6365 ZEND_ARG_INFO (0 , file_name )
66+ ZEND_ARG_INFO (0 , sheet_name )
6467ZEND_END_ARG_INFO ()
6568
6669ZEND_BEGIN_ARG_INFO_EX (xls_file_add_sheet , 0 , 0 , 1 )
@@ -146,11 +149,14 @@ PHP_METHOD(vtiful_xls, __construct)
146149 */
147150PHP_METHOD (vtiful_xls , fileName )
148151{
149- zval file_path , * dir_path ;
150- zend_string * file_name ;
152+ zval file_path , * dir_path = NULL ;
153+ zend_string * zs_file_name = NULL , * zs_sheet_name = NULL ;
154+ char * sheet_name = NULL ;
151155
152- ZEND_PARSE_PARAMETERS_START (1 , 1 )
153- Z_PARAM_STR (file_name )
156+ ZEND_PARSE_PARAMETERS_START (1 , 2 )
157+ Z_PARAM_STR (zs_file_name )
158+ Z_PARAM_OPTIONAL
159+ Z_PARAM_STR (zs_sheet_name )
154160 ZEND_PARSE_PARAMETERS_END ();
155161
156162 ZVAL_COPY (return_value , getThis ());
@@ -160,10 +166,14 @@ PHP_METHOD(vtiful_xls, fileName)
160166 xls_object * obj = Z_XLS_P (getThis ());
161167
162168 if (obj -> ptr .workbook == NULL ) {
163- xls_file_path (file_name , dir_path , & file_path );
169+ xls_file_path (zs_file_name , dir_path , & file_path );
170+
171+ if (zs_sheet_name != NULL ) {
172+ sheet_name = ZSTR_VAL (zs_sheet_name );
173+ }
164174
165175 obj -> ptr .workbook = workbook_new (Z_STRVAL (file_path ));
166- obj -> ptr .worksheet = workbook_add_worksheet (obj -> ptr .workbook , NULL );
176+ obj -> ptr .worksheet = workbook_add_worksheet (obj -> ptr .workbook , sheet_name );
167177
168178 add_property_zval (return_value , V_XLS_FIL , & file_path );
169179
@@ -188,6 +198,8 @@ PHP_METHOD(vtiful_xls, addSheet)
188198
189199 xls_object * obj = Z_XLS_P (getThis ());
190200
201+ SHEET_LINE_INIT (obj )
202+
191203 if (obj -> ptr .workbook == NULL) {
192204 zend_throw_exception (vtiful_exception_ce , "Please create a file first, use the filename method" , 130 );
193205 return ;
@@ -249,19 +261,19 @@ PHP_METHOD(vtiful_xls, header)
249261
250262 xls_object * obj = Z_XLS_P (getThis ());
251263
252- ZEND_HASH_FOREACH_NUM_KEY_VAL (Z_ARRVAL_P (header ), header_l_key , header_value ) {
264+ ZEND_HASH_FOREACH_NUM_KEY_VAL (Z_ARRVAL_P (header ), header_l_key , header_value )
253265 type_writer (header_value , 0 , header_l_key , & obj -> ptr , NULL );
254266 zval_ptr_dtor (header_value );
255- } ZEND_HASH_FOREACH_END ();
267+ ZEND_HASH_FOREACH_END ();
256268}
257269/* }}} */
258270
259271/** {{{ \Vtiful\Kernel\xls::data(array $data)
260272 */
261273PHP_METHOD (vtiful_xls , data )
262274{
263- zval * data , * data_r_value , * data_l_value ;
264- zend_long data_r_key , data_l_key ;
275+ zval * data = NULL , * data_r_value = NULL , * data_l_value = NULL ;
276+ zend_long data_l_key ;
265277
266278 ZEND_PARSE_PARAMETERS_START (1 , 1 )
267279 Z_PARAM_ARRAY (data )
@@ -271,14 +283,16 @@ PHP_METHOD(vtiful_xls, data)
271283
272284 xls_object * obj = Z_XLS_P (getThis ());
273285
274- ZEND_HASH_FOREACH_NUM_KEY_VAL (Z_ARRVAL_P (data ), data_r_key , data_r_value ) {
286+ ZEND_HASH_FOREACH_VAL (Z_ARRVAL_P (data ), data_r_value )
275287 if (Z_TYPE_P (data_r_value ) == IS_ARRAY ) {
276- ZEND_HASH_FOREACH_NUM_KEY_VAL (Z_ARRVAL_P (data_r_value ), data_l_key , data_l_value ) {
277- type_writer (data_l_value , data_r_key + 1 , data_l_key , & obj -> ptr , NULL );
288+ SHEET_LINE_ADD (obj )
289+
290+ ZEND_HASH_FOREACH_NUM_KEY_VAL (Z_ARRVAL_P (data_r_value ), data_l_key , data_l_value )
291+ type_writer (data_l_value , SHEET_CURRENT_LINE (obj ), data_l_key , & obj - > ptr , NULL );
278292 zval_ptr_dtor (data_l_value );
279- } ZEND_HASH_FOREACH_END ();
293+ ZEND_HASH_FOREACH_END ();
280294 }
281- } ZEND_HASH_FOREACH_END ();
295+ ZEND_HASH_FOREACH_END ();
282296}
283297/* }}} */
284298
0 commit comments