viest 5 лет назад
Родитель
Сommit
b0da0b8ac5
5 измененных файлов с 78 добавлено и 10 удалено
  1. 13 10
      include/xlswriter.h
  2. 25 0
      kernel/excel.c
  3. 8 0
      kernel/write.c
  4. 1 0
      package.xml
  5. 31 0
      tests/freeze_panes.phpt

+ 13 - 10
include/xlswriter.h

@@ -161,27 +161,30 @@ xls_resource_chart_t * zval_get_chart(zval *resource);
 
 STATIC lxw_error _store_defined_name(lxw_workbook *self, const char *name, const char *app_name, const char *formula, int16_t index, uint8_t hidden);
 
-STATIC void _prepare_defined_names(lxw_workbook *self);
+STATIC int  _compare_defined_names(lxw_defined_name *a, lxw_defined_name *b);
+
 STATIC void _prepare_drawings(lxw_workbook *self);
 STATIC void _add_chart_cache_data(lxw_workbook *self);
-STATIC int  _compare_defined_names(lxw_defined_name *a, lxw_defined_name *b);
+STATIC void _prepare_defined_names(lxw_workbook *self);
 STATIC void _populate_range(lxw_workbook *self, lxw_series_range *range);
 STATIC void _populate_range_dimensions(lxw_workbook *self, lxw_series_range *range);
 
-void format_copy(lxw_format *new_format, lxw_format *other_format);
-void type_writer(zval *value, zend_long row, zend_long columns, xls_resource_write_t *res, zend_string *format, lxw_format *format_handle);
-void chart_writer(zend_long row, zend_long columns, xls_resource_chart_t *chart_resource, xls_resource_write_t *res);
-void url_writer(zend_long row, zend_long columns, xls_resource_write_t *res, zend_string *url, lxw_format *format);
-void image_writer(zval *value, zend_long row, zend_long columns, double width, double height, xls_resource_write_t *res);
-void formula_writer(zval *value, zend_long row, zend_long columns, xls_resource_write_t *res);
 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_column(zend_string *range, double width, xls_resource_write_t *res, lxw_format *format);
+void formula_writer(zval *value, zend_long row, zend_long columns, 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 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);
+void image_writer(zval *value, zend_long row, zend_long columns, double width, double height, xls_resource_write_t *res);
+void type_writer(zval *value, zend_long row, zend_long columns, xls_resource_write_t *res, zend_string *format, lxw_format *format_handle);
+
 lxw_error workbook_file(xls_resource_write_t *self);
 
-void xls_file_path(zend_string *file_name, zval *dir_path, zval *file_path);
 zend_string* str_pick_up(zend_string *left, char *right);
 
 #endif

+ 25 - 0
kernel/excel.c

@@ -179,6 +179,11 @@ ZEND_END_ARG_INFO()
 ZEND_BEGIN_ARG_INFO_EX(xls_string_to_index, 0, 0, 1)
                 ZEND_ARG_INFO(0, index)
 ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(xls_freeze_panes_arginfo, 0, 0, 2)
+                ZEND_ARG_INFO(0, row)
+                ZEND_ARG_INFO(0, column)
+ZEND_END_ARG_INFO()
 /* }}} */
 
 /** {{{ \Vtiful\Kernel\xls::__construct(array $config)
@@ -718,6 +723,25 @@ PHP_METHOD(vtiful_xls, setRow)
 }
 /* }}} */
 
+/** {{{ \Vtiful\Kernel\xls::freezePanes(int $row, int $column)
+ */
+PHP_METHOD(vtiful_xls, freezePanes)
+{
+    zend_long row = 0, column = 0;
+
+    ZEND_PARSE_PARAMETERS_START(2, 2)
+            Z_PARAM_LONG(row)
+            Z_PARAM_LONG(column)
+    ZEND_PARSE_PARAMETERS_END();
+
+    ZVAL_COPY(return_value, getThis());
+
+    xls_object *obj = Z_XLS_P(getThis());
+
+    freeze_panes(&obj->write_ptr, row, column);
+}
+/* }}} */
+
 /** {{{ \Vtiful\Kernel\xls::columnIndexFromString(string $index)
  */
 PHP_METHOD(vtiful_xls, columnIndexFromString)
@@ -934,6 +958,7 @@ zend_function_entry xls_methods[] = {
         PHP_ME(vtiful_xls, mergeCells,    xls_merge_cells_arginfo,    ZEND_ACC_PUBLIC)
         PHP_ME(vtiful_xls, setColumn,     xls_set_column_arginfo,     ZEND_ACC_PUBLIC)
         PHP_ME(vtiful_xls, setRow,        xls_set_row_arginfo,        ZEND_ACC_PUBLIC)
+        PHP_ME(vtiful_xls, freezePanes,   xls_freeze_panes_arginfo,   ZEND_ACC_PUBLIC)
 
         PHP_ME(vtiful_xls, columnIndexFromString,  xls_index_to_string, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC)
         PHP_ME(vtiful_xls, stringFromColumnIndex,  xls_string_to_index, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC)

+ 8 - 0
kernel/write.c

@@ -237,6 +237,14 @@ void worksheet_set_rows(lxw_row_t start, lxw_row_t end, double height, xls_resou
     }
 }
 
+/*
+ * Set freeze panes
+ */
+void freeze_panes(xls_resource_write_t *res, zend_long row, zend_long column)
+{
+    worksheet_freeze_panes(res->worksheet, row, column);
+}
+
 /*
  * Call finalization code and close file.
  */

+ 1 - 0
package.xml

@@ -170,6 +170,7 @@
    <file md5sum="4dfaa3f81e9c7138aca39da99a67f270" name="tests/format_font_strikeout.phpt" role="test" />
    <file md5sum="c32a045fc8d621cbbaf8f00008ddb8b5" name="tests/format_number.phpt" role="test" />
    <file md5sum="f9c233fedf10a2bbb2ac5534cf8f20ef" name="tests/format_wrap.phpt" role="test" />
+   <file name="tests/freeze_panes.phpt" role="test" />
    <file md5sum="b4c6f2949c46ab89099e5f971f152a1f" name="tests/image_no_styles.phpt" role="test" />
    <file md5sum="fb81df82009c851b96a6124972ccc3d1" name="tests/image_width_height_styles.phpt" role="test" />
    <file md5sum="73521b6a1cb84ba3c7730470b836368f" name="tests/insert_date_custom_format.phpt" role="test" />

+ 31 - 0
tests/freeze_panes.phpt

@@ -0,0 +1,31 @@
+--TEST--
+Check for vtiful presence
+--SKIPIF--
+<?php if (!extension_loaded("xlswriter")) print "skip"; ?>
+--FILE--
+<?php
+$config = [
+    'path' => './tests',
+];
+
+$fileObject = new \Vtiful\Kernel\Excel($config);
+
+$fileObject = $fileObject->fileName('tutorial.xlsx');
+$fileHandle = $fileObject->getHandle();
+
+$filePath = $fileObject->freezePanes(1, 0)
+    ->header(['name', 'age']);
+
+for ($index = 0; $index < 100; $index++) {
+    $fileObject->insertText($index + 1, 0, 'wjx');
+    $fileObject->insertText($index + 1, 1, 21);
+}
+
+var_dump($fileObject->output());
+?>
+--CLEAN--
+<?php
+@unlink(__DIR__ . '/tutorial.xlsx');
+?>
+--EXPECT--
+string(21) "./tests/tutorial.xlsx"