瀏覽代碼

Merge pull request #122 from viest/dev

wrap, background format and checkout sheet
viest 6 年之前
父節點
當前提交
a8bd1530c3
共有 7 個文件被更改,包括 240 次插入14 次删除
  1. 3 0
      include/xlswriter.h
  2. 39 0
      kernel/excel.c
  3. 92 14
      kernel/format.c
  4. 37 0
      tests/format_background.phpt
  5. 34 0
      tests/format_wrap.phpt
  6. 0 0
      tests/sheet_add.phpt
  7. 35 0
      tests/sheet_checkout.phpt

+ 3 - 0
include/xlswriter.h

@@ -98,6 +98,9 @@ static inline chart_object *php_vtiful_chart_fetch_object(zend_object *obj) {
 #define SHEET_LINE_ADD(obj_p) \
 #define SHEET_LINE_ADD(obj_p) \
     ++obj_p->line;
     ++obj_p->line;
 
 
+#define SHEET_LINE_SET(obj_p, line) \
+    obj_p->line = line;
+
 #define SHEET_CURRENT_LINE(obj_p) obj_p->line
 #define SHEET_CURRENT_LINE(obj_p) obj_p->line
 
 
 lxw_format           * zval_get_format(zval *handle);
 lxw_format           * zval_get_format(zval *handle);

+ 39 - 0
kernel/excel.c

@@ -71,6 +71,10 @@ ZEND_BEGIN_ARG_INFO_EX(xls_file_add_sheet, 0, 0, 1)
                 ZEND_ARG_INFO(0, sheet_name)
                 ZEND_ARG_INFO(0, sheet_name)
 ZEND_END_ARG_INFO()
 ZEND_END_ARG_INFO()
 
 
+ZEND_BEGIN_ARG_INFO_EX(xls_file_checkout_sheet, 0, 0, 1)
+                ZEND_ARG_INFO(0, sheet_name)
+ZEND_END_ARG_INFO()
+
 ZEND_BEGIN_ARG_INFO_EX(xls_header_arginfo, 0, 0, 1)
 ZEND_BEGIN_ARG_INFO_EX(xls_header_arginfo, 0, 0, 1)
                 ZEND_ARG_INFO(0, header)
                 ZEND_ARG_INFO(0, header)
 ZEND_END_ARG_INFO()
 ZEND_END_ARG_INFO()
@@ -229,6 +233,40 @@ PHP_METHOD(vtiful_xls, addSheet)
 }
 }
 /* }}} */
 /* }}} */
 
 
+/** {{{ \Vtiful\Kernel\xls::checkoutSheet(string $sheetName)
+ */
+PHP_METHOD(vtiful_xls, checkoutSheet)
+{
+    int line = 0;
+    lxw_worksheet *sheet_t = NULL;
+    zend_string *zs_sheet_name = NULL;
+
+    ZEND_PARSE_PARAMETERS_START(1, 1)
+            Z_PARAM_STR(zs_sheet_name)
+    ZEND_PARSE_PARAMETERS_END();
+
+    ZVAL_COPY(return_value, getThis());
+
+    xls_object *obj = Z_XLS_P(getThis());
+
+    if(obj->ptr.workbook == NULL) {
+        zend_throw_exception(vtiful_exception_ce, "Please create a file first, use the filename method", 130);
+        return;
+    }
+
+    if ((sheet_t = workbook_get_worksheet_by_name(obj->ptr.workbook, ZSTR_VAL(zs_sheet_name))) == NULL) {
+        zend_throw_exception(vtiful_exception_ce, "Sheet not fund", 140);
+        return;
+    }
+
+    line = sheet_t->table->cached_row_num;
+
+    SHEET_LINE_SET(obj, line);
+
+    obj->ptr.worksheet = sheet_t;
+}
+/* }}} */
+
 /** {{{ \Vtiful\Kernel\xls::constMemory(string $fileName [, string $sheetName])
 /** {{{ \Vtiful\Kernel\xls::constMemory(string $fileName [, string $sheetName])
  */
  */
 PHP_METHOD(vtiful_xls, constMemory)
 PHP_METHOD(vtiful_xls, constMemory)
@@ -575,6 +613,7 @@ zend_function_entry xls_methods[] = {
         PHP_ME(vtiful_xls, __construct,   xls_construct_arginfo,      ZEND_ACC_PUBLIC)
         PHP_ME(vtiful_xls, __construct,   xls_construct_arginfo,      ZEND_ACC_PUBLIC)
         PHP_ME(vtiful_xls, fileName,      xls_file_name_arginfo,      ZEND_ACC_PUBLIC)
         PHP_ME(vtiful_xls, fileName,      xls_file_name_arginfo,      ZEND_ACC_PUBLIC)
         PHP_ME(vtiful_xls, addSheet,      xls_file_add_sheet,         ZEND_ACC_PUBLIC)
         PHP_ME(vtiful_xls, addSheet,      xls_file_add_sheet,         ZEND_ACC_PUBLIC)
+        PHP_ME(vtiful_xls, checkoutSheet, xls_file_checkout_sheet,    ZEND_ACC_PUBLIC)
         PHP_ME(vtiful_xls, constMemory,   xls_const_memory_arginfo,   ZEND_ACC_PUBLIC)
         PHP_ME(vtiful_xls, constMemory,   xls_const_memory_arginfo,   ZEND_ACC_PUBLIC)
         PHP_ME(vtiful_xls, header,        xls_header_arginfo,         ZEND_ACC_PUBLIC)
         PHP_ME(vtiful_xls, header,        xls_header_arginfo,         ZEND_ACC_PUBLIC)
         PHP_ME(vtiful_xls, data,          xls_data_arginfo,           ZEND_ACC_PUBLIC)
         PHP_ME(vtiful_xls, data,          xls_data_arginfo,           ZEND_ACC_PUBLIC)

+ 92 - 14
kernel/format.c

@@ -74,6 +74,11 @@ ZEND_END_ARG_INFO()
 ZEND_BEGIN_ARG_INFO_EX(format_number_arginfo, 0, 0, 1)
 ZEND_BEGIN_ARG_INFO_EX(format_number_arginfo, 0, 0, 1)
                 ZEND_ARG_INFO(0, format)
                 ZEND_ARG_INFO(0, format)
 ZEND_END_ARG_INFO()
 ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(format_background_arginfo, 0, 0, 2)
+                ZEND_ARG_INFO(0, pattern)
+                ZEND_ARG_INFO(0, color)
+ZEND_END_ARG_INFO()
 /* }}} */
 /* }}} */
 
 
 /** {{{ \Vtiful\Kernel\Format::__construct()
 /** {{{ \Vtiful\Kernel\Format::__construct()
@@ -106,7 +111,10 @@ PHP_METHOD(vtiful_format, bold)
     ZVAL_COPY(return_value, getThis());
     ZVAL_COPY(return_value, getThis());
 
 
     format_object *obj = Z_FORMAT_P(getThis());
     format_object *obj = Z_FORMAT_P(getThis());
-    format_set_bold(obj->ptr.format);
+
+    if (obj->ptr.format) {
+        format_set_bold(obj->ptr.format);
+    }
 }
 }
 /* }}} */
 /* }}} */
 
 
@@ -117,7 +125,10 @@ PHP_METHOD(vtiful_format, italic)
     ZVAL_COPY(return_value, getThis());
     ZVAL_COPY(return_value, getThis());
 
 
     format_object *obj = Z_FORMAT_P(getThis());
     format_object *obj = Z_FORMAT_P(getThis());
-    format_set_italic(obj->ptr.format);
+
+    if (obj->ptr.format) {
+        format_set_italic(obj->ptr.format);
+    }
 }
 }
 /* }}} */
 /* }}} */
 
 
@@ -134,7 +145,10 @@ PHP_METHOD(vtiful_format, underline)
     ZVAL_COPY(return_value, getThis());
     ZVAL_COPY(return_value, getThis());
 
 
     format_object *obj = Z_FORMAT_P(getThis());
     format_object *obj = Z_FORMAT_P(getThis());
-    format_set_underline(obj->ptr.format, style);
+
+    if (obj->ptr.format) {
+        format_set_underline(obj->ptr.format, style);
+    }
 }
 }
 /* }}} */
 /* }}} */
 
 
@@ -160,7 +174,9 @@ PHP_METHOD(vtiful_format, align)
             zend_throw_exception(vtiful_exception_ce, "Format exception, please view the manual", 150);
             zend_throw_exception(vtiful_exception_ce, "Format exception, please view the manual", 150);
         }
         }
 
 
-        format_set_align(obj->ptr.format, Z_LVAL_P(arg));
+        if (obj->ptr.format) {
+            format_set_align(obj->ptr.format, Z_LVAL_P(arg));
+        }
     }
     }
 }
 }
 /* }}} */
 /* }}} */
@@ -179,7 +195,9 @@ PHP_METHOD(vtiful_format, color)
 
 
     format_object *obj = Z_FORMAT_P(getThis());
     format_object *obj = Z_FORMAT_P(getThis());
 
 
-    format_set_font_color(obj->ptr.format, color);
+    if (obj->ptr.format) {
+        format_set_font_color(obj->ptr.format, color);
+    }
 }
 }
 /* }}} */
 /* }}} */
 
 
@@ -197,7 +215,45 @@ PHP_METHOD(vtiful_format, number)
 
 
     format_object *obj = Z_FORMAT_P(getThis());
     format_object *obj = Z_FORMAT_P(getThis());
 
 
-    format_set_num_format(obj->ptr.format, ZSTR_VAL(format));
+    if (obj->ptr.format) {
+        format_set_num_format(obj->ptr.format, ZSTR_VAL(format));
+    }
+}
+/* }}} */
+
+/** {{{ \Vtiful\Kernel\Format::background(int $pattern, int $color)
+ */
+PHP_METHOD(vtiful_format, background)
+{
+    zend_long pattern, color;
+
+    ZEND_PARSE_PARAMETERS_START(2, 2)
+            Z_PARAM_LONG(pattern)
+            Z_PARAM_LONG(color)
+    ZEND_PARSE_PARAMETERS_END();
+
+    ZVAL_COPY(return_value, getThis());
+
+    format_object *obj = Z_FORMAT_P(getThis());
+
+    if (obj->ptr.format) {
+        format_set_pattern(obj->ptr.format, pattern);
+        format_set_bg_color(obj->ptr.format, color);
+    }
+}
+/* }}} */
+
+/** {{{ \Vtiful\Kernel\Format::wrap()
+ */
+PHP_METHOD(vtiful_format, wrap)
+{
+    ZVAL_COPY(return_value, getThis());
+
+    format_object *obj = Z_FORMAT_P(getThis());
+
+    if (obj->ptr.format) {
+        format_set_text_wrap(obj->ptr.format);
+    }
 }
 }
 /* }}} */
 /* }}} */
 
 
@@ -215,14 +271,16 @@ PHP_METHOD(vtiful_format, toResource)
 /** {{{ format_methods
 /** {{{ format_methods
 */
 */
 zend_function_entry format_methods[] = {
 zend_function_entry format_methods[] = {
-        PHP_ME(vtiful_format, __construct, format_construct_arginfo, ZEND_ACC_PUBLIC)
-        PHP_ME(vtiful_format, bold,        NULL,                     ZEND_ACC_PUBLIC)
-        PHP_ME(vtiful_format, italic,      NULL,                     ZEND_ACC_PUBLIC)
-        PHP_ME(vtiful_format, underline,   format_underline_arginfo, ZEND_ACC_PUBLIC)
-        PHP_ME(vtiful_format, align,       format_align_arginfo,     ZEND_ACC_PUBLIC)
-        PHP_ME(vtiful_format, color,       format_color_arginfo,     ZEND_ACC_PUBLIC)
-        PHP_ME(vtiful_format, number,      format_number_arginfo,    ZEND_ACC_PUBLIC)
-        PHP_ME(vtiful_format, toResource,  NULL,                     ZEND_ACC_PUBLIC)
+        PHP_ME(vtiful_format, __construct, format_construct_arginfo,  ZEND_ACC_PUBLIC)
+        PHP_ME(vtiful_format, wrap,        NULL,                      ZEND_ACC_PUBLIC)
+        PHP_ME(vtiful_format, bold,        NULL,                      ZEND_ACC_PUBLIC)
+        PHP_ME(vtiful_format, italic,      NULL,                      ZEND_ACC_PUBLIC)
+        PHP_ME(vtiful_format, align,       format_align_arginfo,      ZEND_ACC_PUBLIC)
+        PHP_ME(vtiful_format, color,       format_color_arginfo,      ZEND_ACC_PUBLIC)
+        PHP_ME(vtiful_format, number,      format_number_arginfo,     ZEND_ACC_PUBLIC)
+        PHP_ME(vtiful_format, underline,   format_underline_arginfo,  ZEND_ACC_PUBLIC)
+        PHP_ME(vtiful_format, toResource,  NULL,                      ZEND_ACC_PUBLIC)
+        PHP_ME(vtiful_format, background,  format_background_arginfo, ZEND_ACC_PUBLIC)
         PHP_FE_END
         PHP_FE_END
 };
 };
 /* }}} */
 /* }}} */
@@ -275,6 +333,26 @@ VTIFUL_STARTUP_FUNCTION(format) {
     REGISTER_CLASS_CONST_LONG(vtiful_format_ce, "COLOR_WHITE",   LXW_COLOR_WHITE)
     REGISTER_CLASS_CONST_LONG(vtiful_format_ce, "COLOR_WHITE",   LXW_COLOR_WHITE)
     REGISTER_CLASS_CONST_LONG(vtiful_format_ce, "COLOR_YELLOW",  LXW_COLOR_YELLOW)
     REGISTER_CLASS_CONST_LONG(vtiful_format_ce, "COLOR_YELLOW",  LXW_COLOR_YELLOW)
 
 
+    REGISTER_CLASS_CONST_LONG(vtiful_format_ce, "PATTERN_NONE",             LXW_PATTERN_NONE)
+    REGISTER_CLASS_CONST_LONG(vtiful_format_ce, "PATTERN_SOLID",            LXW_PATTERN_SOLID)
+    REGISTER_CLASS_CONST_LONG(vtiful_format_ce, "PATTERN_MEDIUM_GRAY",      LXW_PATTERN_MEDIUM_GRAY)
+    REGISTER_CLASS_CONST_LONG(vtiful_format_ce, "PATTERN_DARK_GRAY",        LXW_PATTERN_DARK_GRAY)
+    REGISTER_CLASS_CONST_LONG(vtiful_format_ce, "PATTERN_LIGHT_GRAY",       LXW_PATTERN_LIGHT_GRAY)
+    REGISTER_CLASS_CONST_LONG(vtiful_format_ce, "PATTERN_DARK_HORIZONTAL",  LXW_PATTERN_DARK_HORIZONTAL)
+    REGISTER_CLASS_CONST_LONG(vtiful_format_ce, "PATTERN_DARK_VERTICAL",    LXW_PATTERN_DARK_VERTICAL)
+    REGISTER_CLASS_CONST_LONG(vtiful_format_ce, "PATTERN_DARK_DOWN",        LXW_PATTERN_DARK_DOWN)
+    REGISTER_CLASS_CONST_LONG(vtiful_format_ce, "PATTERN_DARK_UP",          LXW_PATTERN_DARK_UP)
+    REGISTER_CLASS_CONST_LONG(vtiful_format_ce, "PATTERN_DARK_GRID",        LXW_PATTERN_DARK_GRID)
+    REGISTER_CLASS_CONST_LONG(vtiful_format_ce, "PATTERN_DARK_TRELLIS",     LXW_PATTERN_DARK_TRELLIS)
+    REGISTER_CLASS_CONST_LONG(vtiful_format_ce, "PATTERN_LIGHT_HORIZONTAL", LXW_PATTERN_LIGHT_HORIZONTAL)
+    REGISTER_CLASS_CONST_LONG(vtiful_format_ce, "PATTERN_LIGHT_VERTICAL",   LXW_PATTERN_LIGHT_VERTICAL)
+    REGISTER_CLASS_CONST_LONG(vtiful_format_ce, "PATTERN_LIGHT_DOWN",       LXW_PATTERN_LIGHT_DOWN)
+    REGISTER_CLASS_CONST_LONG(vtiful_format_ce, "PATTERN_LIGHT_UP",         LXW_PATTERN_LIGHT_UP)
+    REGISTER_CLASS_CONST_LONG(vtiful_format_ce, "PATTERN_LIGHT_GRID",       LXW_PATTERN_LIGHT_GRID)
+    REGISTER_CLASS_CONST_LONG(vtiful_format_ce, "PATTERN_LIGHT_TRELLIS",    LXW_PATTERN_LIGHT_TRELLIS)
+    REGISTER_CLASS_CONST_LONG(vtiful_format_ce, "PATTERN_GRAY_125",         LXW_PATTERN_GRAY_125)
+    REGISTER_CLASS_CONST_LONG(vtiful_format_ce, "PATTERN_GRAY_0625",        LXW_PATTERN_GRAY_0625)
+
     return SUCCESS;
     return SUCCESS;
 }
 }
 /* }}} */
 /* }}} */

+ 37 - 0
tests/format_background.phpt

@@ -0,0 +1,37 @@
+--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();
+
+$format = new \Vtiful\Kernel\Format($fileHandle);
+$style  = $format->background(
+	\Vtiful\Kernel\Format::PATTERN_LIGHT_UP,
+	\Vtiful\Kernel\Format::COLOR_RED
+)->toResource();
+
+$filePath = $fileObject->header(['name', 'age'])
+    ->data([
+        ['viest', 21],
+        ['wjx',   21]
+    ])
+    ->setRow('A1', 50, $style)
+    ->output();
+
+var_dump($filePath);
+?>
+--CLEAN--
+<?php
+@unlink(__DIR__ . '/tutorial.xlsx');
+?>
+--EXPECT--
+string(21) "./tests/tutorial.xlsx"

+ 34 - 0
tests/format_wrap.phpt

@@ -0,0 +1,34 @@
+--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();
+
+$format    = new \Vtiful\Kernel\Format($fileHandle);
+$wrapStyle = $format->wrap()->toResource();
+
+$filePath = $fileObject->header(['name', 'age'])
+    ->data([
+        ["vvvvvvvvvvvvvvvvvvvvvvvvvv\nvvvvvvvvvvvvvvvvvvvvvvvvvvv", 21],
+        ['wjx',   21]
+    ])
+    ->setRow('A2', 50, $wrapStyle)
+    ->output();
+
+var_dump($filePath);
+?>
+--CLEAN--
+<?php
+@unlink(__DIR__ . '/tutorial.xlsx');
+?>
+--EXPECT--
+string(21) "./tests/tutorial.xlsx"

+ 0 - 0
tests/017.phpt → tests/sheet_add.phpt


+ 35 - 0
tests/sheet_checkout.phpt

@@ -0,0 +1,35 @@
+--TEST--
+Check for vtiful presence
+--SKIPIF--
+<?php if (!extension_loaded("xlswriter")) print "skip"; ?>
+--FILE--
+<?php
+$config = ['path' => './tests'];
+$excel = new \Vtiful\Kernel\Excel($config);
+
+$fileObject = $excel->fileName("tutorial01.xlsx");
+
+$fileObject->header(['name', 'age'])
+    ->data([
+    ['viest', 21],
+    ['viest', 22],
+    ['viest', 23],
+    ]);
+
+$fileObject->addSheet('twoSheet')
+    ->header(['name', 'age'])
+    ->data([['vikin', 22]]);
+
+$fileObject->checkoutSheet('Sheet1')
+    ->data([['sheet1']]);
+
+$filePath = $fileObject->output();
+
+var_dump($filePath);
+?>
+--CLEAN--
+<?php
+@unlink(__DIR__ . '/tutorial01.xlsx');
+?>
+--EXPECT--
+string(23) "./tests/tutorial01.xlsx"