Browse Source

FEAT(Sheet): new sheet

viest 7 years ago
parent
commit
548b258cfe
3 changed files with 63 additions and 1 deletions
  1. 34 0
      kernel/excel.c
  2. 1 1
      kernel/include.h
  3. 28 0
      tests/017.phpt

+ 34 - 0
kernel/excel.c

@@ -63,6 +63,10 @@ ZEND_BEGIN_ARG_INFO_EX(xls_file_name_arginfo, 0, 0, 1)
                 ZEND_ARG_INFO(0, file_name)
 ZEND_END_ARG_INFO()
 
+ZEND_BEGIN_ARG_INFO_EX(xls_file_add_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_ARG_INFO(0, header)
 ZEND_END_ARG_INFO()
@@ -168,6 +172,35 @@ PHP_METHOD(vtiful_xls, fileName)
 }
 /* }}} */
 
+/** {{{ \Vtiful\Kernel\xls::addSheet(string $sheetName)
+ */
+PHP_METHOD(vtiful_xls, addSheet)
+{
+    zend_string *zs_sheet_name = NULL;
+    char *sheet_name = NULL;
+
+    ZEND_PARSE_PARAMETERS_START(0, 1)
+            Z_PARAM_OPTIONAL
+            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(zs_sheet_name != NULL) {
+        sheet_name = ZSTR_VAL(zs_sheet_name);
+    }
+
+    obj->ptr.worksheet = workbook_add_worksheet(obj->ptr.workbook, sheet_name);
+}
+/* }}} */
+
 /** {{{ \Vtiful\Kernel\xls::constMemory(string $fileName)
  */
 PHP_METHOD(vtiful_xls, constMemory)
@@ -448,6 +481,7 @@ PHP_METHOD(vtiful_xls, setRow)
 zend_function_entry xls_methods[] = {
         PHP_ME(vtiful_xls, __construct,   xls_construct_arginfo,      ZEND_ACC_PUBLIC|ZEND_ACC_CTOR)
         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, constMemory,   xls_file_name_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)

+ 1 - 1
kernel/include.h

@@ -36,7 +36,7 @@ typedef struct {
 
 typedef struct _vtiful_xls_object {
     xls_resource_t ptr;
-    zend_object      zo;
+    zend_object    zo;
 } xls_object;
 
 static inline xls_object *php_vtiful_xls_fetch_object(zend_object *obj) {

+ 28 - 0
tests/017.phpt

@@ -0,0 +1,28 @@
+--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]]);
+
+$fileObject->addSheet('twoSheet')
+    ->header(['name', 'age'])
+    ->data([['vikin', 22]]);
+
+$filePath = $fileObject->output();
+
+var_dump($filePath);
+?>
+--CLEAN--
+<?php
+@unlink(__DIR__ . '/tutorial01.xlsx');
+?>
+--EXPECT--
+string(23) "./tests/tutorial01.xlsx"