Skip to content

Commit 63dedfc

Browse files
authored
Merge pull request #205 from viest/dev
Feat: default format
2 parents 1a8b34a + 685e9cc commit 63dedfc

File tree

5 files changed

+87
-15
lines changed

5 files changed

+87
-15
lines changed

include/xlswriter.h

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -78,10 +78,11 @@ typedef struct {
7878
} xls_resource_chart_t;
7979

8080
typedef struct _vtiful_xls_object {
81-
xls_resource_read_t read_ptr;
82-
xls_resource_write_t write_ptr;
83-
zend_long write_line;
84-
zend_object zo;
81+
xls_resource_read_t read_ptr;
82+
xls_resource_write_t write_ptr;
83+
zend_long write_line;
84+
xls_resource_format_t format_ptr;
85+
zend_object zo;
8586
} xls_object;
8687

8788
typedef struct _vtiful_format_object {
@@ -179,11 +180,11 @@ void freeze_panes(xls_resource_write_t *res, zend_long row, zend_long column);
179180
void merge_cells(zend_string *range, zend_string *value, xls_resource_write_t *res);
180181
void set_row(zend_string *range, double height, xls_resource_write_t *res, lxw_format *format);
181182
void set_column(zend_string *range, double width, xls_resource_write_t *res, lxw_format *format);
182-
void formula_writer(zend_string *value, zend_long row, zend_long columns, xls_resource_write_t *res);
183183
void url_writer(zend_long row, zend_long columns, xls_resource_write_t *res, zend_string *url, lxw_format *format);
184184
void chart_writer(zend_long row, zend_long columns, xls_resource_chart_t *chart_resource, xls_resource_write_t *res);
185185
void worksheet_set_rows(lxw_row_t start, lxw_row_t end, double height, xls_resource_write_t *res, lxw_format *format);
186186
void image_writer(zval *value, zend_long row, zend_long columns, double width, double height, xls_resource_write_t *res);
187+
void formula_writer(zend_string *value, zend_long row, zend_long columns, xls_resource_write_t *res, lxw_format *format);
187188
void type_writer(zval *value, zend_long row, zend_long columns, xls_resource_write_t *res, zend_string *format, lxw_format *format_handle);
188189

189190
lxw_error workbook_file(xls_resource_write_t *self);

kernel/excel.c

Lines changed: 37 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,9 @@ PHP_VTIFUL_API zend_object *vtiful_xls_objects_new(zend_class_entry *ce)
3535

3636
intern->zo.handlers = &vtiful_xls_handlers;
3737

38-
intern->read_ptr.file_t = NULL;
39-
intern->read_ptr.sheet_t = NULL;
38+
intern->read_ptr.file_t = NULL;
39+
intern->read_ptr.sheet_t = NULL;
40+
intern->format_ptr.format = NULL;
4041

4142
return &intern->zo;
4243
}
@@ -55,6 +56,10 @@ static void vtiful_xls_objects_free(zend_object *object)
5556
xlsxioread_close(intern->read_ptr.file_t);
5657
#endif
5758

59+
if (intern->format_ptr.format != NULL) {
60+
intern->format_ptr.format = NULL;
61+
}
62+
5863
zend_object_std_dtor(&intern->zo);
5964
}
6065
/* }}} */
@@ -155,6 +160,10 @@ ZEND_BEGIN_ARG_INFO_EX(xls_set_row_arginfo, 0, 0, 3)
155160
ZEND_ARG_INFO(0, height)
156161
ZEND_END_ARG_INFO()
157162

163+
ZEND_BEGIN_ARG_INFO_EX(xls_set_global_format, 0, 0, 1)
164+
ZEND_ARG_INFO(0, format_handle)
165+
ZEND_END_ARG_INFO()
166+
158167
ZEND_BEGIN_ARG_INFO_EX(xls_open_file_arginfo, 0, 0, 1)
159168
ZEND_ARG_INFO(0, zs_file_name)
160169
ZEND_END_ARG_INFO()
@@ -377,7 +386,7 @@ PHP_METHOD(vtiful_xls, header)
377386
WORKBOOK_NOT_INITIALIZED(obj);
378387

379388
ZEND_HASH_FOREACH_NUM_KEY_VAL(Z_ARRVAL_P(header), header_l_key, header_value)
380-
type_writer(header_value, 0, header_l_key, &obj->write_ptr, NULL, NULL);
389+
type_writer(header_value, 0, header_l_key, &obj->write_ptr, NULL, obj->format_ptr.format);
381390
zval_ptr_dtor(header_value);
382391
ZEND_HASH_FOREACH_END();
383392

@@ -404,7 +413,7 @@ PHP_METHOD(vtiful_xls, data)
404413
ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(data), data_r_value)
405414
if(Z_TYPE_P(data_r_value) == IS_ARRAY) {
406415
ZEND_HASH_FOREACH_BUCKET(Z_ARRVAL_P(data_r_value), Bucket *bucket)
407-
type_writer(&bucket->val, SHEET_CURRENT_LINE(obj), bucket->h, &obj->write_ptr, NULL, NULL);
416+
type_writer(&bucket->val, SHEET_CURRENT_LINE(obj), bucket->h, &obj->write_ptr, NULL, obj->format_ptr.format);
408417
zval_ptr_dtor(&bucket->val);
409418
ZEND_HASH_FOREACH_END();
410419

@@ -438,6 +447,8 @@ PHP_METHOD(vtiful_xls, getHandle)
438447
{
439448
xls_object *obj = Z_XLS_P(getThis());
440449

450+
WORKBOOK_NOT_INITIALIZED(obj);
451+
441452
RETURN_RES(zend_register_resource(&obj->write_ptr, le_xls_writer));
442453
}
443454
/* }}} */
@@ -470,7 +481,7 @@ PHP_METHOD(vtiful_xls, insertText)
470481
if (format_handle) {
471482
type_writer(data, row, column, &obj->write_ptr, format, zval_get_format(format_handle));
472483
} else {
473-
type_writer(data, row, column, &obj->write_ptr, format, NULL);
484+
type_writer(data, row, column, &obj->write_ptr, format, obj->format_ptr.format);
474485
}
475486
}
476487
/* }}} */
@@ -515,7 +526,7 @@ PHP_METHOD(vtiful_xls, insertDate)
515526
if (format_handle) {
516527
type_writer(&_zv_double_time, row, column, &obj->write_ptr, format, zval_get_format(format_handle));
517528
} else {
518-
type_writer(&_zv_double_time, row, column, &obj->write_ptr, format, NULL);
529+
type_writer(&_zv_double_time, row, column, &obj->write_ptr, format, obj->format_ptr.format);
519530
}
520531

521532
zend_string_release(format);
@@ -575,7 +586,7 @@ PHP_METHOD(vtiful_xls, insertUrl)
575586
}
576587

577588
if (argc == 3) {
578-
url_writer(row, column, &obj->write_ptr, url, NULL);
589+
url_writer(row, column, &obj->write_ptr, url, obj->format_ptr.format);
579590
}
580591
}
581592
/* }}} */
@@ -626,7 +637,7 @@ PHP_METHOD(vtiful_xls, insertFormula)
626637

627638
WORKBOOK_NOT_INITIALIZED(obj);
628639

629-
formula_writer(formula, row, column, &obj->write_ptr);
640+
formula_writer(formula, row, column, &obj->write_ptr, obj->format_ptr.format);
630641
}
631642
/* }}} */
632643

@@ -737,6 +748,23 @@ PHP_METHOD(vtiful_xls, setRow)
737748
}
738749
/* }}} */
739750

751+
/** {{{ \Vtiful\Kernel\Excel::defaultFormat(resource $format)
752+
*/
753+
PHP_METHOD(vtiful_xls, defaultFormat)
754+
{
755+
zval *format_handle = NULL;
756+
757+
ZEND_PARSE_PARAMETERS_START(1, 1)
758+
Z_PARAM_RESOURCE(format_handle)
759+
ZEND_PARSE_PARAMETERS_END();
760+
761+
ZVAL_COPY(return_value, getThis());
762+
763+
xls_object *obj = Z_XLS_P(getThis());
764+
obj->format_ptr.format = zval_get_format(format_handle);
765+
}
766+
/* }}} */
767+
740768
/** {{{ \Vtiful\Kernel\Excel::freezePanes(int $row, int $column)
741769
*/
742770
PHP_METHOD(vtiful_xls, freezePanes)
@@ -1056,6 +1084,7 @@ zend_function_entry xls_methods[] = {
10561084
PHP_ME(vtiful_xls, mergeCells, xls_merge_cells_arginfo, ZEND_ACC_PUBLIC)
10571085
PHP_ME(vtiful_xls, setColumn, xls_set_column_arginfo, ZEND_ACC_PUBLIC)
10581086
PHP_ME(vtiful_xls, setRow, xls_set_row_arginfo, ZEND_ACC_PUBLIC)
1087+
PHP_ME(vtiful_xls, defaultFormat, xls_set_global_format, ZEND_ACC_PUBLIC)
10591088
PHP_ME(vtiful_xls, freezePanes, xls_freeze_panes_arginfo, ZEND_ACC_PUBLIC)
10601089

10611090
PHP_ME(vtiful_xls, zoom, xls_sheet_zoom_arginfo, ZEND_ACC_PUBLIC)

kernel/write.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -176,9 +176,9 @@ void image_writer(zval *value, zend_long row, zend_long columns, double width, d
176176
/*
177177
* Write the image to the file
178178
*/
179-
void formula_writer(zend_string *value, zend_long row, zend_long columns, xls_resource_write_t *res)
179+
void formula_writer(zend_string *value, zend_long row, zend_long columns, xls_resource_write_t *res, lxw_format *format)
180180
{
181-
worksheet_write_formula(res->worksheet, (lxw_row_t)row, (lxw_col_t)columns, ZSTR_VAL(value), NULL);
181+
worksheet_write_formula(res->worksheet, (lxw_row_t)row, (lxw_col_t)columns, ZSTR_VAL(value), format);
182182
}
183183

184184
void chart_writer(zend_long row, zend_long columns, xls_resource_chart_t *chart_resource, xls_resource_write_t *res)

package.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,7 @@
186186
<file md5sum="39f7c511d9019c6815bcf7fd0f7e8224" name="tests/chart_style.phpt" role="test" />
187187
<file md5sum="bfdf9e054f8efd971a65d00eca465f2f" name="tests/chart_title.phpt" role="test" />
188188
<file md5sum="9badb50b14bd81536bafcfefcb5677d6" name="tests/column_index_from_string.phpt" role="test" />
189+
<file name="tests/default_format.phpt" role="test" />
189190
<file md5sum="df2a6af4ced4ea7660a1691d18e75e8c" name="tests/format_align.phpt" role="test" />
190191
<file md5sum="6f9186fb9d8eb2ad4d96d149c97ef5f8" name="tests/format_background.phpt" role="test" />
191192
<file md5sum="c67d20fdc2f1d4b4b429ac905cb4cbf9" name="tests/format_border.phpt" role="test" />

tests/default_format.phpt

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
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+
$excel->fileName('tutorial.xlsx');
11+
12+
$format = new \Vtiful\Kernel\Format($excel->getHandle());
13+
$colorOneStyle = $format
14+
->fontColor(\Vtiful\Kernel\Format::COLOR_ORANGE)
15+
->border(\Vtiful\Kernel\Format::BORDER_DASH_DOT)
16+
->toResource();
17+
18+
$format = new \Vtiful\Kernel\Format($excel->getHandle());
19+
$colorTwoStyle = $format
20+
->fontColor(\Vtiful\Kernel\Format::COLOR_GREEN)
21+
->toResource();
22+
23+
$filePath = $excel
24+
// Apply the first style as the default
25+
->defaultFormat($colorOneStyle)
26+
->header(['hello', 'xlswriter'])
27+
// Apply the second style as the default style
28+
->defaultFormat($colorTwoStyle)
29+
->data([
30+
['hello', 'xlswriter'],
31+
])
32+
->output();
33+
34+
var_dump($filePath);
35+
?>
36+
--CLEAN--
37+
<?php
38+
@unlink(__DIR__ . '/tutorial.xlsx');
39+
?>
40+
--EXPECT--
41+
string(21) "./tests/tutorial.xlsx"

0 commit comments

Comments
 (0)