@@ -99,6 +99,14 @@ ZEND_BEGIN_ARG_INFO_EX(xls_insert_text_arginfo, 0, 0, 5)
9999 ZEND_ARG_INFO (0 , format_handle )
100100ZEND_END_ARG_INFO ()
101101
102+ ZEND_BEGIN_ARG_INFO_EX (xls_insert_date_arginfo , 0 , 0 , 5 )
103+ ZEND_ARG_INFO (0 , row )
104+ ZEND_ARG_INFO (0 , column )
105+ ZEND_ARG_INFO (0 , timestamp )
106+ ZEND_ARG_INFO (0 , format )
107+ ZEND_ARG_INFO (0 , format_handle )
108+ ZEND_END_ARG_INFO ()
109+
102110ZEND_BEGIN_ARG_INFO_EX (xls_insert_url_arginfo , 0 , 0 , 4 )
103111 ZEND_ARG_INFO (0 , row )
104112 ZEND_ARG_INFO (0 , column )
@@ -427,7 +435,51 @@ PHP_METHOD(vtiful_xls, insertText)
427435 } else {
428436 type_writer (data , row , column , & obj -> write_ptr , format , NULL );
429437 }
438+ }
439+ /* }}} */
440+
441+ /** {{{ \Vtiful\Kernel\xls::insertDate(int $row, int $column, int $timestamp[, string $format, resource $formatHandle])
442+ */
443+ PHP_METHOD (vtiful_xls , insertDate )
444+ {
445+ zval * data = NULL , * format_handle = NULL ;
446+ zend_long row , column ;
447+ zend_string * format = NULL ;
448+
449+ ZEND_PARSE_PARAMETERS_START (3 , 5 )
450+ Z_PARAM_LONG (row )
451+ Z_PARAM_LONG (column )
452+ Z_PARAM_ZVAL (data )
453+ Z_PARAM_OPTIONAL
454+ Z_PARAM_STR (format )
455+ Z_PARAM_RESOURCE (format_handle )
456+ ZEND_PARSE_PARAMETERS_END ();
457+
458+ ZVAL_COPY (return_value , getThis ());
459+
460+ xls_object * obj = Z_XLS_P (getThis ());
461+
462+ SHEET_LINE_SET (obj , row );
463+
464+ if (Z_TYPE_P (data ) != IS_LONG ) {
465+ // throw
466+ }
467+
468+ // Default datetime format
469+ if (format == NULL ) {
470+ format = zend_string_init (ZEND_STRL ("yyyy-mm-dd hh:mm:ss" ), 0 );
471+ }
472+
473+ zval _zv_double_time ;
474+ ZVAL_DOUBLE (& _zv_double_time , ((double )data -> value .lval / 86400 + 25569 ))
475+
476+ if (format_handle ) {
477+ type_writer (& _zv_double_time , row , column , & obj -> write_ptr , format , zval_get_format (format_handle ));
478+ } else {
479+ type_writer (& _zv_double_time , row , column , & obj -> write_ptr , format , NULL );
480+ }
430481
482+ zval_ptr_dtor (& _zv_double_time );
431483}
432484/* }}} */
433485
@@ -693,13 +745,20 @@ PHP_METHOD(vtiful_xls, getSheetData)
693745 */
694746PHP_METHOD (vtiful_xls , nextRow )
695747{
696- xls_object * obj = Z_XLS_P (getThis ());
748+ zval * zv_type = NULL ;
749+
750+ ZEND_PARSE_PARAMETERS_START (0 , 1 )
751+ Z_PARAM_OPTIONAL
752+ Z_PARAM_ARRAY (zv_type )
753+ ZEND_PARSE_PARAMETERS_END ();
754+
755+ xls_object * obj = Z_XLS_P (getThis ());
697756
698757 if (!obj -> read_ptr .sheet_t ) {
699758 RETURN_FALSE ;
700759 }
701760
702- load_sheet_current_row_data (obj -> read_ptr .sheet_t , return_value , READ_ROW );
761+ load_sheet_current_row_data (obj -> read_ptr .sheet_t , return_value , zv_type , READ_ROW );
703762}
704763/* }}} */
705764
@@ -719,6 +778,7 @@ zend_function_entry xls_methods[] = {
719778 PHP_ME (vtiful_xls , getHandle , NULL , ZEND_ACC_PUBLIC )
720779 PHP_ME (vtiful_xls , autoFilter , xls_auto_filter_arginfo , ZEND_ACC_PUBLIC )
721780 PHP_ME (vtiful_xls , insertText , xls_insert_text_arginfo , ZEND_ACC_PUBLIC )
781+ PHP_ME (vtiful_xls , insertDate , xls_insert_date_arginfo , ZEND_ACC_PUBLIC )
722782 PHP_ME (vtiful_xls , insertChart , xls_insert_chart_arginfo , ZEND_ACC_PUBLIC )
723783 PHP_ME (vtiful_xls , insertUrl , xls_insert_url_arginfo , ZEND_ACC_PUBLIC )
724784 PHP_ME (vtiful_xls , insertImage , xls_insert_image_arginfo , ZEND_ACC_PUBLIC )
@@ -754,6 +814,11 @@ VTIFUL_STARTUP_FUNCTION(excel) {
754814 REGISTER_CLASS_PROPERTY_NULL (vtiful_xls_ce , V_XLS_COF , ZEND_ACC_PRIVATE );
755815 REGISTER_CLASS_PROPERTY_NULL (vtiful_xls_ce , V_XLS_FIL , ZEND_ACC_PRIVATE );
756816
817+ REGISTER_CLASS_CONST_LONG (vtiful_xls_ce , V_XLS_CONST_READ_TYPE_INT , READ_TYPE_INT );
818+ REGISTER_CLASS_CONST_LONG (vtiful_xls_ce , V_XLS_CONST_READ_TYPE_DOUBLE , READ_TYPE_DOUBLE );
819+ REGISTER_CLASS_CONST_LONG (vtiful_xls_ce , V_XLS_CONST_READ_TYPE_STRING , READ_TYPE_STRING );
820+ REGISTER_CLASS_CONST_LONG (vtiful_xls_ce , V_XLS_CONST_READ_TYPE_DATETIME , READ_TYPE_DATETIME );
821+
757822 return SUCCESS ;
758823}
759824/* }}} */
0 commit comments