瀏覽代碼

checkout sheet

viest 6 年之前
父節點
當前提交
b2c95e3820
共有 4 個文件被更改,包括 77 次插入0 次删除
  1. 3 0
      include/xlswriter.h
  2. 39 0
      kernel/excel.c
  3. 0 0
      tests/sheet_add.phpt
  4. 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) \
     ++obj_p->line;
 
+#define SHEET_LINE_SET(obj_p, line) \
+    obj_p->line = line;
+
 #define SHEET_CURRENT_LINE(obj_p) obj_p->line
 
 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_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_ARG_INFO(0, header)
 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])
  */
 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, fileName,      xls_file_name_arginfo,      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, header,        xls_header_arginfo,         ZEND_ACC_PUBLIC)
         PHP_ME(vtiful_xls, data,          xls_data_arginfo,           ZEND_ACC_PUBLIC)

+ 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"