From bf48d7fd9a1f3964a7101716b8b2da404ec6643a Mon Sep 17 00:00:00 2001 From: viest Date: Thu, 19 Dec 2019 21:04:53 +0800 Subject: [PATCH] Feat: mergeCells and insertFormula support format --- include/xlswriter.h | 2 +- kernel/excel.c | 32 ++++++++++++++++++++++++++++---- kernel/write.c | 4 ++-- 3 files changed, 31 insertions(+), 7 deletions(-) diff --git a/include/xlswriter.h b/include/xlswriter.h index e810dfe..eefea59 100644 --- a/include/xlswriter.h +++ b/include/xlswriter.h @@ -177,9 +177,9 @@ void auto_filter(zend_string *range, xls_resource_write_t *res); void format_copy(lxw_format *new_format, lxw_format *other_format); void xls_file_path(zend_string *file_name, zval *dir_path, zval *file_path); void freeze_panes(xls_resource_write_t *res, zend_long row, zend_long column); -void merge_cells(zend_string *range, zend_string *value, xls_resource_write_t *res); void set_row(zend_string *range, double height, xls_resource_write_t *res, lxw_format *format); void set_column(zend_string *range, double width, xls_resource_write_t *res, lxw_format *format); +void merge_cells(zend_string *range, zend_string *value, xls_resource_write_t *res, lxw_format *format); void url_writer(zend_long row, zend_long columns, xls_resource_write_t *res, zend_string *url, lxw_format *format); void chart_writer(zend_long row, zend_long columns, xls_resource_chart_t *chart_resource, xls_resource_write_t *res); void worksheet_set_rows(lxw_row_t start, lxw_row_t end, double height, xls_resource_write_t *res, lxw_format *format); diff --git a/kernel/excel.c b/kernel/excel.c index e31ed37..3f3d081 100644 --- a/kernel/excel.c +++ b/kernel/excel.c @@ -137,6 +137,7 @@ ZEND_BEGIN_ARG_INFO_EX(xls_insert_formula_arginfo, 0, 0, 3) ZEND_ARG_INFO(0, row) ZEND_ARG_INFO(0, column) ZEND_ARG_INFO(0, formula) + ZEND_ARG_INFO(0, format_handle) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(xls_auto_filter_arginfo, 0, 0, 1) @@ -146,6 +147,7 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(xls_merge_cells_arginfo, 0, 0, 2) ZEND_ARG_INFO(0, range) ZEND_ARG_INFO(0, data) + ZEND_ARG_INFO(0, format_handle) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(xls_set_column_arginfo, 0, 0, 3) @@ -625,13 +627,18 @@ PHP_METHOD(vtiful_xls, insertImage) */ PHP_METHOD(vtiful_xls, insertFormula) { + zval *format_handle = NULL; zend_string *formula = NULL; zend_long row = 0, column = 0; - ZEND_PARSE_PARAMETERS_START(3, 3) + int argc = ZEND_NUM_ARGS(); + + ZEND_PARSE_PARAMETERS_START(3, 4) Z_PARAM_LONG(row) Z_PARAM_LONG(column) Z_PARAM_STR(formula) + Z_PARAM_OPTIONAL + Z_PARAM_RESOURCE(format_handle) ZEND_PARSE_PARAMETERS_END(); ZVAL_COPY(return_value, getThis()); @@ -640,7 +647,13 @@ PHP_METHOD(vtiful_xls, insertFormula) WORKBOOK_NOT_INITIALIZED(obj); - formula_writer(formula, row, column, &obj->write_ptr, obj->format_ptr.format); + if (argc == 3) { + formula_writer(formula, row, column, &obj->write_ptr, obj->format_ptr.format); + } + + if (argc == 4) { + formula_writer(formula, row, column, &obj->write_ptr, zval_get_format(format_handle)); + } } /* }}} */ @@ -668,11 +681,16 @@ PHP_METHOD(vtiful_xls, autoFilter) */ PHP_METHOD(vtiful_xls, mergeCells) { + zval *format_handle = NULL; zend_string *range = NULL, *data = NULL; - ZEND_PARSE_PARAMETERS_START(2, 2) + int argc = ZEND_NUM_ARGS(); + + ZEND_PARSE_PARAMETERS_START(2, 3) Z_PARAM_STR(range) Z_PARAM_STR(data) + Z_PARAM_OPTIONAL + Z_PARAM_RESOURCE(format_handle) ZEND_PARSE_PARAMETERS_END(); ZVAL_COPY(return_value, getThis()); @@ -681,7 +699,13 @@ PHP_METHOD(vtiful_xls, mergeCells) WORKBOOK_NOT_INITIALIZED(obj); - merge_cells(range, data, &obj->write_ptr); + if (argc == 3) { + merge_cells(range, data, &obj->write_ptr, obj->format_ptr.format); + } + + if (argc == 4) { + merge_cells(range, data, &obj->write_ptr, zval_get_format(format_handle)); + } } /* }}} */ diff --git a/kernel/write.c b/kernel/write.c index aa481b2..c3d785a 100644 --- a/kernel/write.c +++ b/kernel/write.c @@ -199,9 +199,9 @@ void auto_filter(zend_string *range, xls_resource_write_t *res) /* * Merge cells. */ -void merge_cells(zend_string *range, zend_string *value, xls_resource_write_t *res) +void merge_cells(zend_string *range, zend_string *value, xls_resource_write_t *res, lxw_format *format) { - worksheet_merge_range(res->worksheet, RANGE(ZSTR_VAL(range)), ZSTR_VAL(value), NULL); + worksheet_merge_range(res->worksheet, RANGE(ZSTR_VAL(range)), ZSTR_VAL(value), format); } /*