ソースを参照

Feat(Read): sheet list

viest 5 年 前
コミット
739412ef94
5 ファイル変更71 行追加2 行削除
  1. 3 2
      include/read.h
  2. 15 0
      kernel/excel.c
  3. 22 0
      kernel/read.c
  4. 1 0
      package.xml
  5. 30 0
      tests/open_xlsx_sheet_list.phpt

+ 3 - 2
include/read.h

@@ -16,11 +16,12 @@
 #define READ_SKIP_ROW 0
 #define READ_ROW 0x01
 
-int sheet_read_row(xlsxioreadersheet sheet_t);
 int is_number(const char *value);
 void data_to_null(zval *zv_result_t);
-void data_to_custom_type(const char *string_value, zend_ulong type, zval *zv_result_t);
+int sheet_read_row(xlsxioreadersheet sheet_t);
+void sheet_list(xlsxioreader file_t, zval *zv_result_t);
 xlsxioreader file_open(const char *directory, const char *file_name);
+void data_to_custom_type(const char *string_value, zend_ulong type, zval *zv_result_t);
 void load_sheet_all_data(xlsxioreadersheet sheet_t, zval *zv_type_t, zval *zv_result_t);
 xlsxioreadersheet sheet_open(xlsxioreader file_t, const zend_string *zs_sheet_name_t, const zend_long zl_flag);
 unsigned int load_sheet_current_row_data(xlsxioreadersheet sheet_t, zval *zv_result_t, zval *zv_type, unsigned int flag);

+ 15 - 0
kernel/excel.c

@@ -892,6 +892,20 @@ PHP_METHOD(vtiful_xls, openSheet)
 }
 /* }}} */
 
+/** {{{ \Vtiful\Kernel\Excel::sheetList()
+ */
+PHP_METHOD(vtiful_xls, sheetList)
+{
+    xls_object* obj = Z_XLS_P(getThis());
+
+    if (obj->read_ptr.file_t == NULL) {
+        RETURN_NULL();
+    }
+
+    sheet_list(obj->read_ptr.file_t, return_value);
+}
+/* }}} */
+
 /** {{{ \Vtiful\Kernel\Excel::setType(array $rowType)
  */
 PHP_METHOD(vtiful_xls, setType)
@@ -1021,6 +1035,7 @@ zend_function_entry xls_methods[] = {
 #ifdef ENABLE_READER
         PHP_ME(vtiful_xls, openFile,         xls_open_file_arginfo,          ZEND_ACC_PUBLIC)
         PHP_ME(vtiful_xls, openSheet,        xls_open_sheet_arginfo,         ZEND_ACC_PUBLIC)
+        PHP_ME(vtiful_xls, sheetList,        NULL,                           ZEND_ACC_PUBLIC)
         PHP_ME(vtiful_xls, setType,          xls_set_type_arginfo,           ZEND_ACC_PUBLIC)
         PHP_ME(vtiful_xls, getSheetData,     NULL,                           ZEND_ACC_PUBLIC)
         PHP_ME(vtiful_xls, nextRow,          NULL,                           ZEND_ACC_PUBLIC)

+ 22 - 0
kernel/read.c

@@ -41,6 +41,28 @@ xlsxioreadersheet sheet_open(xlsxioreader file_t, const zend_string *zs_sheet_na
 }
 /* }}} */
 
+/* {{{ */
+void sheet_list(xlsxioreader file_t, zval *zv_result_t)
+{
+    const char *sheet_name = NULL;
+    xlsxioreadersheetlist sheet_list = NULL;
+
+    if (Z_TYPE_P(zv_result_t) != IS_ARRAY) {
+        array_init(zv_result_t);
+    }
+
+    if ((sheet_list = xlsxioread_sheetlist_open(file_t)) == NULL) {
+        return;
+    }
+
+    while ((sheet_name = xlsxioread_sheetlist_next(sheet_list)) != NULL) {
+        add_next_index_stringl(zv_result_t, sheet_name, strlen(sheet_name));
+    }
+
+    xlsxioread_sheetlist_close(sheet_list);
+}
+/* }}} */
+
 /* {{{ */
 int is_number(const char *value)
 {

+ 1 - 0
package.xml

@@ -196,6 +196,7 @@
    <file md5sum="d8b2431b0ad8bcb63bafbbac6f4373e7" name="tests/open_xlsx_next_row_with_set_type.phpt" role="test" />
    <file md5sum="1f75d70aa9fb4590f4982fbe4070da36" name="tests/open_xlsx_sheet.phpt" role="test" />
    <file md5sum="90b5a90b6687d034a5cc64ae35a41fb7" name="tests/open_xlsx_sheet_flag.phpt" role="test" />
+   <file name="tests/open_xlsx_sheet_list.phpt" role="test" />
    <file md5sum="12ff3ae17d729bbfd48c87a087544924" name="tests/sheet_add.phpt" role="test" />
    <file md5sum="98f47ea5e8aab04af809a1707a1f1476" name="tests/sheet_checkout.phpt" role="test" />
    <file md5sum="5811dd930d7b0f916c662139ff1053d4" name="tests/string_from_column_index.phpt" role="test" />

+ 30 - 0
tests/open_xlsx_sheet_list.phpt

@@ -0,0 +1,30 @@
+--TEST--
+Check for vtiful presence
+--SKIPIF--
+<?php
+require __DIR__ . '/include/skipif.inc';
+skip_disable_reader();
+?>
+--FILE--
+<?php
+$config   = ['path' => './tests'];
+$excel    = new \Vtiful\Kernel\Excel($config);
+$filePath = $excel->fileName('tutorial.xlsx', 'TestSheet1')
+    ->header(['Item', 'Cost'])
+    ->output();
+
+$sheetList = $excel->openFile('tutorial.xlsx')->sheetList();
+
+var_dump(is_array($sheetList));
+var_dump($sheetList);
+?>
+--CLEAN--
+<?php
+@unlink(__DIR__ . '/tutorial.xlsx');
+?>
+--EXPECT--
+bool(true)
+array(1) {
+  [0]=>
+  string(10) "TestSheet1"
+}