|
@@ -99,6 +99,14 @@ ZEND_BEGIN_ARG_INFO_EX(xls_insert_text_arginfo, 0, 0, 5)
|
|
|
ZEND_ARG_INFO(0, format_handle)
|
|
|
ZEND_END_ARG_INFO()
|
|
|
|
|
|
+ZEND_BEGIN_ARG_INFO_EX(xls_insert_date_arginfo, 0, 0, 5)
|
|
|
+ ZEND_ARG_INFO(0, row)
|
|
|
+ ZEND_ARG_INFO(0, column)
|
|
|
+ ZEND_ARG_INFO(0, timestamp)
|
|
|
+ ZEND_ARG_INFO(0, format)
|
|
|
+ ZEND_ARG_INFO(0, format_handle)
|
|
|
+ZEND_END_ARG_INFO()
|
|
|
+
|
|
|
ZEND_BEGIN_ARG_INFO_EX(xls_insert_url_arginfo, 0, 0, 4)
|
|
|
ZEND_ARG_INFO(0, row)
|
|
|
ZEND_ARG_INFO(0, column)
|
|
@@ -427,7 +435,51 @@ PHP_METHOD(vtiful_xls, insertText)
|
|
|
} else {
|
|
|
type_writer(data, row, column, &obj->write_ptr, format, NULL);
|
|
|
}
|
|
|
+}
|
|
|
+/* }}} */
|
|
|
+
|
|
|
+/** {{{ \Vtiful\Kernel\xls::insertDate(int $row, int $column, int $timestamp[, string $format, resource $formatHandle])
|
|
|
+ */
|
|
|
+PHP_METHOD(vtiful_xls, insertDate)
|
|
|
+{
|
|
|
+ zval *data = NULL, *format_handle = NULL;
|
|
|
+ zend_long row, column;
|
|
|
+ zend_string *format = NULL;
|
|
|
+
|
|
|
+ ZEND_PARSE_PARAMETERS_START(3, 5)
|
|
|
+ Z_PARAM_LONG(row)
|
|
|
+ Z_PARAM_LONG(column)
|
|
|
+ Z_PARAM_ZVAL(data)
|
|
|
+ Z_PARAM_OPTIONAL
|
|
|
+ Z_PARAM_STR(format)
|
|
|
+ Z_PARAM_RESOURCE(format_handle)
|
|
|
+ ZEND_PARSE_PARAMETERS_END();
|
|
|
+
|
|
|
+ ZVAL_COPY(return_value, getThis());
|
|
|
+
|
|
|
+ xls_object *obj = Z_XLS_P(getThis());
|
|
|
+
|
|
|
+ SHEET_LINE_SET(obj, row);
|
|
|
+
|
|
|
+ if (Z_TYPE_P(data) != IS_LONG) {
|
|
|
+ // throw
|
|
|
+ }
|
|
|
+
|
|
|
+ // Default datetime format
|
|
|
+ if (format == NULL) {
|
|
|
+ format = zend_string_init(ZEND_STRL("yyyy-mm-dd hh:mm:ss"), 0);
|
|
|
+ }
|
|
|
+
|
|
|
+ zval _zv_double_time;
|
|
|
+ ZVAL_DOUBLE(&_zv_double_time, ((double)data->value.lval / 86400 + 25569))
|
|
|
+
|
|
|
+ if (format_handle) {
|
|
|
+ type_writer(&_zv_double_time, row, column, &obj->write_ptr, format, zval_get_format(format_handle));
|
|
|
+ } else {
|
|
|
+ type_writer(&_zv_double_time, row, column, &obj->write_ptr, format, NULL);
|
|
|
+ }
|
|
|
|
|
|
+ zval_ptr_dtor(&_zv_double_time);
|
|
|
}
|
|
|
/* }}} */
|
|
|
|
|
@@ -693,13 +745,20 @@ PHP_METHOD(vtiful_xls, getSheetData)
|
|
|
*/
|
|
|
PHP_METHOD(vtiful_xls, nextRow)
|
|
|
{
|
|
|
- xls_object *obj = Z_XLS_P(getThis());
|
|
|
+ zval *zv_type = NULL;
|
|
|
+
|
|
|
+ ZEND_PARSE_PARAMETERS_START(0, 1)
|
|
|
+ Z_PARAM_OPTIONAL
|
|
|
+ Z_PARAM_ARRAY(zv_type)
|
|
|
+ ZEND_PARSE_PARAMETERS_END();
|
|
|
+
|
|
|
+ xls_object *obj = Z_XLS_P(getThis());
|
|
|
|
|
|
if (!obj->read_ptr.sheet_t) {
|
|
|
RETURN_FALSE;
|
|
|
}
|
|
|
|
|
|
- load_sheet_current_row_data(obj->read_ptr.sheet_t, return_value, READ_ROW);
|
|
|
+ load_sheet_current_row_data(obj->read_ptr.sheet_t, return_value, zv_type, READ_ROW);
|
|
|
}
|
|
|
/* }}} */
|
|
|
|
|
@@ -719,6 +778,7 @@ zend_function_entry xls_methods[] = {
|
|
|
PHP_ME(vtiful_xls, getHandle, NULL, ZEND_ACC_PUBLIC)
|
|
|
PHP_ME(vtiful_xls, autoFilter, xls_auto_filter_arginfo, ZEND_ACC_PUBLIC)
|
|
|
PHP_ME(vtiful_xls, insertText, xls_insert_text_arginfo, ZEND_ACC_PUBLIC)
|
|
|
+ PHP_ME(vtiful_xls, insertDate, xls_insert_date_arginfo, ZEND_ACC_PUBLIC)
|
|
|
PHP_ME(vtiful_xls, insertChart, xls_insert_chart_arginfo, ZEND_ACC_PUBLIC)
|
|
|
PHP_ME(vtiful_xls, insertUrl, xls_insert_url_arginfo, ZEND_ACC_PUBLIC)
|
|
|
PHP_ME(vtiful_xls, insertImage, xls_insert_image_arginfo, ZEND_ACC_PUBLIC)
|
|
@@ -754,6 +814,11 @@ VTIFUL_STARTUP_FUNCTION(excel) {
|
|
|
REGISTER_CLASS_PROPERTY_NULL(vtiful_xls_ce, V_XLS_COF, ZEND_ACC_PRIVATE);
|
|
|
REGISTER_CLASS_PROPERTY_NULL(vtiful_xls_ce, V_XLS_FIL, ZEND_ACC_PRIVATE);
|
|
|
|
|
|
+ REGISTER_CLASS_CONST_LONG(vtiful_xls_ce, V_XLS_CONST_READ_TYPE_INT, READ_TYPE_INT);
|
|
|
+ REGISTER_CLASS_CONST_LONG(vtiful_xls_ce, V_XLS_CONST_READ_TYPE_DOUBLE, READ_TYPE_DOUBLE);
|
|
|
+ REGISTER_CLASS_CONST_LONG(vtiful_xls_ce, V_XLS_CONST_READ_TYPE_STRING, READ_TYPE_STRING);
|
|
|
+ REGISTER_CLASS_CONST_LONG(vtiful_xls_ce, V_XLS_CONST_READ_TYPE_DATETIME, READ_TYPE_DATETIME);
|
|
|
+
|
|
|
return SUCCESS;
|
|
|
}
|
|
|
/* }}} */
|