Jelajahi Sumber

Merge pull request #416 from viest/dev

Feat(Read): big numbers
viest 3 tahun lalu
induk
melakukan
f300a004a8
5 mengubah file dengan 55 tambahan dan 7 penghapusan
  1. 2 1
      .gitignore
  2. 4 4
      kernel/read.c
  3. 7 1
      kernel/write.c
  4. 1 1
      tests/data_string_key.phpt
  5. 41 0
      tests/open_xlsx_get_data_bignumbers.phpt

+ 2 - 1
.gitignore

@@ -2,6 +2,8 @@
 *.lo
 *.la
 .libs
+.idea
+.DS_Store
 .dockerignore
 Dockerfile
 debug
@@ -40,7 +42,6 @@ tests/*/*.exp
 tests/*/*.log
 tests/*/*.sh
 tmp-php.ini
-.idea
 cmake-build-debug
 CMakeLists.txt
 local_test.php

+ 4 - 4
kernel/read.c

@@ -180,22 +180,22 @@ void data_to_custom_type(const char *string_value, const size_t string_value_len
             is_numeric_string(string_value, string_value_length, &_long, &_double, 0);
 
             if (Z_TYPE_P(zv_result_t) == IS_ARRAY) {
-                if (_double > 0) {
+                if (_double > 0 && _double <= (double)ZEND_LONG_MAX) {
                     add_index_double(zv_result_t, zv_hashtable_index, _double);
                     return;
                 }
 
-                if (_long > 0) {
+                if (_long > 0 && _long <= ZEND_LONG_MAX) {
                     add_index_long(zv_result_t, zv_hashtable_index, _long);
                     return;
                 }
             } else {
-                if (_double > 0) {
+                if (_double > 0 && _double <= (double)ZEND_LONG_MAX) {
                     ZVAL_DOUBLE(zv_result_t, _double);
                     return;
                 }
 
-                if (_long > 0) {
+                if (_long > 0 && _long <= ZEND_LONG_MAX) {
                     ZVAL_LONG(zv_result_t, _long);
                     return;
                 }

+ 7 - 1
kernel/write.c

@@ -321,7 +321,13 @@ void merge_cells(zend_string *range, zval *value, xls_resource_write_t *res, lxw
  */
 void set_column(zend_string *range, double width, xls_resource_write_t *res, lxw_format *format)
 {
-    worksheet_set_column(res->worksheet, COLS(ZSTR_VAL(range)), width, format);
+   int error = worksheet_set_column(res->worksheet, COLS(ZSTR_VAL(range)), width, format);
+
+    // Cells that have been placed cannot be modified using optimization mode
+    WORKSHEET_INDEX_OUT_OF_CHANGE_IN_OPTIMIZE_EXCEPTION(res, error)
+
+    // Worksheet row or column index out of range
+    WORKSHEET_INDEX_OUT_OF_CHANGE_EXCEPTION(error)
 }
 
 /*

+ 1 - 1
tests/data_string_key.phpt

@@ -33,7 +33,7 @@ var_dump($excel->nextRow());
 ?>
 --CLEAN--
 <?php
-@unlink(__DIR__ . '/open_xlsx_next_row.xlsx');
+@unlink(__DIR__ . '/data_string_key.xlsx');
 ?>
 --EXPECT--
 array(2) {

+ 41 - 0
tests/open_xlsx_get_data_bignumbers.phpt

@@ -0,0 +1,41 @@
+--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('open_xlsx_get_data_bignumbers.xlsx')
+    ->header(['Item'])
+    ->data([
+        ['9999999999999999999999999999999999999999999999999999999999999'],
+    ])
+    ->output();
+
+$data = $excel->openFile('open_xlsx_get_data_bignumbers.xlsx')
+    ->openSheet()
+    ->getSheetData();
+
+var_dump($data);
+?>
+--CLEAN--
+<?php
+@unlink(__DIR__ . '/open_xlsx_get_data_bignumbers.xlsx');
+?>
+--EXPECT--
+array(2) {
+  [0]=>
+  array(1) {
+    [0]=>
+    string(4) "Item"
+  }
+  [1]=>
+  array(1) {
+    [0]=>
+    string(61) "9999999999999999999999999999999999999999999999999999999999999"
+  }
+}