Skip to content

Commit dee5471

Browse files
authored
Merge pull request #70 from viest/dev
FEAT: Incremental add with default sheet name
2 parents 010cd68 + ee8bdb6 commit dee5471

File tree

4 files changed

+65
-17
lines changed

4 files changed

+65
-17
lines changed

kernel/excel.c

Lines changed: 30 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ PHP_VTIFUL_API zend_object *vtiful_xls_objects_new(zend_class_entry *ce)
3232
{
3333
xls_object *intern = vtiful_object_alloc(sizeof(xls_object), ce);
3434

35+
SHEET_LINE_INIT(intern)
36+
3537
zend_object_std_init(&intern->zo, ce);
3638
object_properties_init(&intern->zo, ce);
3739

@@ -59,8 +61,9 @@ ZEND_BEGIN_ARG_INFO_EX(xls_construct_arginfo, 0, 0, 1)
5961
ZEND_ARG_INFO(0, config)
6062
ZEND_END_ARG_INFO()
6163

62-
ZEND_BEGIN_ARG_INFO_EX(xls_file_name_arginfo, 0, 0, 1)
64+
ZEND_BEGIN_ARG_INFO_EX(xls_file_name_arginfo, 0, 0, 2)
6365
ZEND_ARG_INFO(0, file_name)
66+
ZEND_ARG_INFO(0, sheet_name)
6467
ZEND_END_ARG_INFO()
6568

6669
ZEND_BEGIN_ARG_INFO_EX(xls_file_add_sheet, 0, 0, 1)
@@ -146,11 +149,14 @@ PHP_METHOD(vtiful_xls, __construct)
146149
*/
147150
PHP_METHOD(vtiful_xls, fileName)
148151
{
149-
zval file_path, *dir_path;
150-
zend_string *file_name;
152+
zval file_path, *dir_path = NULL;
153+
zend_string *zs_file_name = NULL, *zs_sheet_name = NULL;
154+
char *sheet_name = NULL;
151155

152-
ZEND_PARSE_PARAMETERS_START(1, 1)
153-
Z_PARAM_STR(file_name)
156+
ZEND_PARSE_PARAMETERS_START(1, 2)
157+
Z_PARAM_STR(zs_file_name)
158+
Z_PARAM_OPTIONAL
159+
Z_PARAM_STR(zs_sheet_name)
154160
ZEND_PARSE_PARAMETERS_END();
155161

156162
ZVAL_COPY(return_value, getThis());
@@ -160,10 +166,14 @@ PHP_METHOD(vtiful_xls, fileName)
160166
xls_object *obj = Z_XLS_P(getThis());
161167

162168
if(obj->ptr.workbook == NULL) {
163-
xls_file_path(file_name, dir_path, &file_path);
169+
xls_file_path(zs_file_name, dir_path, &file_path);
170+
171+
if(zs_sheet_name != NULL) {
172+
sheet_name = ZSTR_VAL(zs_sheet_name);
173+
}
164174

165175
obj->ptr.workbook = workbook_new(Z_STRVAL(file_path));
166-
obj->ptr.worksheet = workbook_add_worksheet(obj->ptr.workbook, NULL);
176+
obj->ptr.worksheet = workbook_add_worksheet(obj->ptr.workbook, sheet_name);
167177

168178
add_property_zval(return_value, V_XLS_FIL, &file_path);
169179

@@ -188,6 +198,8 @@ PHP_METHOD(vtiful_xls, addSheet)
188198

189199
xls_object *obj = Z_XLS_P(getThis());
190200

201+
SHEET_LINE_INIT(obj)
202+
191203
if(obj->ptr.workbook == NULL) {
192204
zend_throw_exception(vtiful_exception_ce, "Please create a file first, use the filename method", 130);
193205
return;
@@ -249,19 +261,19 @@ PHP_METHOD(vtiful_xls, header)
249261

250262
xls_object *obj = Z_XLS_P(getThis());
251263

252-
ZEND_HASH_FOREACH_NUM_KEY_VAL(Z_ARRVAL_P(header), header_l_key, header_value) {
264+
ZEND_HASH_FOREACH_NUM_KEY_VAL(Z_ARRVAL_P(header), header_l_key, header_value)
253265
type_writer(header_value, 0, header_l_key, &obj->ptr, NULL);
254266
zval_ptr_dtor(header_value);
255-
} ZEND_HASH_FOREACH_END();
267+
ZEND_HASH_FOREACH_END();
256268
}
257269
/* }}} */
258270

259271
/** {{{ \Vtiful\Kernel\xls::data(array $data)
260272
*/
261273
PHP_METHOD(vtiful_xls, data)
262274
{
263-
zval *data, *data_r_value, *data_l_value;
264-
zend_long data_r_key, data_l_key;
275+
zval *data = NULL, *data_r_value = NULL, *data_l_value = NULL;
276+
zend_long data_l_key;
265277

266278
ZEND_PARSE_PARAMETERS_START(1, 1)
267279
Z_PARAM_ARRAY(data)
@@ -271,14 +283,16 @@ PHP_METHOD(vtiful_xls, data)
271283

272284
xls_object *obj = Z_XLS_P(getThis());
273285

274-
ZEND_HASH_FOREACH_NUM_KEY_VAL(Z_ARRVAL_P(data), data_r_key, data_r_value) {
286+
ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(data), data_r_value)
275287
if(Z_TYPE_P(data_r_value) == IS_ARRAY) {
276-
ZEND_HASH_FOREACH_NUM_KEY_VAL(Z_ARRVAL_P(data_r_value), data_l_key, data_l_value) {
277-
type_writer(data_l_value, data_r_key+1, data_l_key, &obj->ptr, NULL);
288+
SHEET_LINE_ADD(obj)
289+
290+
ZEND_HASH_FOREACH_NUM_KEY_VAL(Z_ARRVAL_P(data_r_value), data_l_key, data_l_value)
291+
type_writer(data_l_value, SHEET_CURRENT_LINE(obj), data_l_key, &obj->ptr, NULL);
278292
zval_ptr_dtor(data_l_value);
279-
} ZEND_HASH_FOREACH_END();
293+
ZEND_HASH_FOREACH_END();
280294
}
281-
} ZEND_HASH_FOREACH_END();
295+
ZEND_HASH_FOREACH_END();
282296
}
283297
/* }}} */
284298

kernel/include.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ typedef struct {
3636

3737
typedef struct _vtiful_xls_object {
3838
xls_resource_t ptr;
39+
zend_long line;
3940
zend_object zo;
4041
} xls_object;
4142

@@ -54,6 +55,14 @@ static inline xls_object *php_vtiful_xls_fetch_object(zend_object *obj) {
5455
#define ROW(range) \
5556
lxw_name_to_row(range)
5657

58+
#define SHEET_LINE_INIT(obj_p) \
59+
obj_p->line = 0;
60+
61+
#define SHEET_LINE_ADD(obj_p) \
62+
++obj_p->line;
63+
64+
#define SHEET_CURRENT_LINE(obj_p) obj_p->line
65+
5766
xls_resource_t * zval_get_resource(zval *handle);
5867
lxw_format * zval_get_format(zval *handle);
5968

php_xls_writer.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
extern zend_module_entry xlswriter_module_entry;
1919
#define phpext_xlswriter_ptr &xlswriter_module_entry
2020

21-
#define PHP_XLSWRITER_VERSION "1.1.0"
21+
#define PHP_XLSWRITER_VERSION "1.2.0"
2222

2323
#ifdef PHP_WIN32
2424
# define PHP_VTIFUL_API __declspec(dllexport)

tests/018.phpt

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
--TEST--
2+
Check for vtiful presence
3+
--SKIPIF--
4+
<?php if (!extension_loaded("xlswriter")) print "skip"; ?>
5+
--FILE--
6+
<?php
7+
$config = ['path' => './tests'];
8+
$excel = new \Vtiful\Kernel\Excel($config);
9+
10+
$fileObject = $excel->fileName("tutorial01.xlsx");
11+
12+
$fileObject->header(['name', 'age'])
13+
->data([['viest', 21]])
14+
->data([['wjx', 21]]);
15+
16+
$filePath = $fileObject->output();
17+
18+
var_dump($filePath);
19+
?>
20+
--CLEAN--
21+
<?php
22+
@unlink(__DIR__ . '/tutorial01.xlsx');
23+
?>
24+
--EXPECT--
25+
string(23) "./tests/tutorial01.xlsx"

0 commit comments

Comments
 (0)