浏览代码

Feat: mergeCells and insertFormula support format

viest 5 年之前
父节点
当前提交
bf48d7fd9a
共有 3 个文件被更改,包括 31 次插入7 次删除
  1. 1 1
      include/xlswriter.h
  2. 28 4
      kernel/excel.c
  3. 2 2
      kernel/write.c

+ 1 - 1
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);

+ 28 - 4
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));
+    }
 }
 /* }}} */
 

+ 2 - 2
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);
 }
 
 /*