xlsxwriter 0.0.2 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Rakefile +4 -16
- data/ext/xlsxwriter/chart.c +499 -4
- data/ext/xlsxwriter/chart.h +11 -9
- data/ext/xlsxwriter/format.c +89 -1
- data/ext/xlsxwriter/format.h +4 -0
- data/ext/xlsxwriter/workbook.c +145 -6
- data/ext/xlsxwriter/workbook.h +2 -22
- data/ext/xlsxwriter/workbook_properties.c +61 -14
- data/ext/xlsxwriter/workbook_properties.h +4 -3
- data/ext/xlsxwriter/worksheet.c +406 -55
- data/ext/xlsxwriter/worksheet.h +5 -58
- data/ext/xlsxwriter/xlsxwriter.c +26 -227
- data/lib/xlsxwriter/version.rb +2 -1
- data/lib/xlsxwriter/worksheet.rb +18 -6
- data/test/test-chart-axis.rb +102 -0
- data/test/test-chart-bar.rb +34 -0
- data/test/test-chart-column.rb +30 -0
- data/test/test-chart-doughnut.rb +31 -0
- data/test/test-chart-pie.rb +44 -0
- data/test/test-chart-scatter.rb +29 -0
- data/test/test-chart-size.rb +45 -0
- data/test/test-chart-title.rb +44 -0
- data/test/test-panes.rb +18 -18
- metadata +18 -2
data/ext/xlsxwriter/chart.h
CHANGED
@@ -8,20 +8,22 @@ struct chart {
|
|
8
8
|
lxw_chart *chart;
|
9
9
|
};
|
10
10
|
|
11
|
+
struct chart_axis {
|
12
|
+
lxw_chart_axis *axis;
|
13
|
+
};
|
14
|
+
|
11
15
|
struct chart_series {
|
12
16
|
lxw_chart_series *series;
|
13
17
|
};
|
14
18
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
VALUE chart_series_init(int argc, VALUE *argv, VALUE self);
|
19
|
+
lxw_chart_fill val_to_lxw_chart_fill(VALUE opts);
|
20
|
+
lxw_chart_font val_to_lxw_chart_font(VALUE opts);
|
21
|
+
lxw_chart_line val_to_lxw_chart_line(VALUE opts);
|
19
22
|
|
20
|
-
|
23
|
+
void init_xlsxwriter_chart();
|
21
24
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
VALUE chart_set_axis_id_2_(VALUE self, VALUE val);
|
25
|
+
extern VALUE cChart;
|
26
|
+
extern VALUE cChartSeries;
|
27
|
+
extern VALUE cChartAxis;
|
26
28
|
|
27
29
|
#endif // __CHART__
|
data/ext/xlsxwriter/format.c
CHANGED
@@ -1,4 +1,7 @@
|
|
1
1
|
#include "format.h"
|
2
|
+
#include "workbook.h"
|
3
|
+
|
4
|
+
VALUE mXlsxFormat;
|
2
5
|
|
3
6
|
#define STR2SYM(x) ID2SYM(rb_intern(x))
|
4
7
|
|
@@ -14,7 +17,8 @@
|
|
14
17
|
format_set_##fmt_name(format); \
|
15
18
|
}
|
16
19
|
|
17
|
-
void
|
20
|
+
void
|
21
|
+
format_apply_opts(lxw_format *format, VALUE opts) {
|
18
22
|
VALUE value;
|
19
23
|
|
20
24
|
MAP_FORMAT(font_name, StringValueCStr(value));
|
@@ -65,3 +69,87 @@ void format_apply_opts(lxw_format *format, VALUE opts) {
|
|
65
69
|
MAP_FORMAT(reading_order, NUM2INT(value));
|
66
70
|
MAP_FORMAT(theme, NUM2INT(value));
|
67
71
|
}
|
72
|
+
|
73
|
+
void
|
74
|
+
init_xlsxwriter_format() {
|
75
|
+
/* :nodoc: */
|
76
|
+
mXlsxFormat = rb_define_module_under(mXlsxWriter, "Format");
|
77
|
+
|
78
|
+
#define MAP_LXW_FMT_CONST(name) rb_define_const(mXlsxFormat, #name, INT2NUM(LXW_##name))
|
79
|
+
MAP_LXW_FMT_CONST(COLOR_BLACK);
|
80
|
+
MAP_LXW_FMT_CONST(COLOR_BLUE);
|
81
|
+
MAP_LXW_FMT_CONST(COLOR_BROWN);
|
82
|
+
MAP_LXW_FMT_CONST(COLOR_CYAN);
|
83
|
+
MAP_LXW_FMT_CONST(COLOR_GRAY);
|
84
|
+
MAP_LXW_FMT_CONST(COLOR_GREEN);
|
85
|
+
MAP_LXW_FMT_CONST(COLOR_LIME);
|
86
|
+
MAP_LXW_FMT_CONST(COLOR_MAGENTA);
|
87
|
+
MAP_LXW_FMT_CONST(COLOR_NAVY);
|
88
|
+
MAP_LXW_FMT_CONST(COLOR_ORANGE);
|
89
|
+
MAP_LXW_FMT_CONST(COLOR_PINK);
|
90
|
+
MAP_LXW_FMT_CONST(COLOR_PURPLE);
|
91
|
+
MAP_LXW_FMT_CONST(COLOR_RED);
|
92
|
+
MAP_LXW_FMT_CONST(COLOR_SILVER);
|
93
|
+
MAP_LXW_FMT_CONST(COLOR_WHITE);
|
94
|
+
MAP_LXW_FMT_CONST(COLOR_YELLOW);
|
95
|
+
|
96
|
+
MAP_LXW_FMT_CONST(UNDERLINE_SINGLE);
|
97
|
+
MAP_LXW_FMT_CONST(UNDERLINE_DOUBLE);
|
98
|
+
MAP_LXW_FMT_CONST(UNDERLINE_SINGLE_ACCOUNTING);
|
99
|
+
MAP_LXW_FMT_CONST(UNDERLINE_DOUBLE_ACCOUNTING);
|
100
|
+
|
101
|
+
MAP_LXW_FMT_CONST(FONT_SUPERSCRIPT);
|
102
|
+
MAP_LXW_FMT_CONST(FONT_SUBSCRIPT);
|
103
|
+
|
104
|
+
MAP_LXW_FMT_CONST(ALIGN_LEFT);
|
105
|
+
MAP_LXW_FMT_CONST(ALIGN_CENTER);
|
106
|
+
MAP_LXW_FMT_CONST(ALIGN_RIGHT);
|
107
|
+
MAP_LXW_FMT_CONST(ALIGN_FILL);
|
108
|
+
MAP_LXW_FMT_CONST(ALIGN_JUSTIFY);
|
109
|
+
MAP_LXW_FMT_CONST(ALIGN_CENTER_ACROSS);
|
110
|
+
MAP_LXW_FMT_CONST(ALIGN_DISTRIBUTED);
|
111
|
+
|
112
|
+
MAP_LXW_FMT_CONST(ALIGN_VERTICAL_TOP);
|
113
|
+
MAP_LXW_FMT_CONST(ALIGN_VERTICAL_BOTTOM);
|
114
|
+
MAP_LXW_FMT_CONST(ALIGN_VERTICAL_CENTER);
|
115
|
+
MAP_LXW_FMT_CONST(ALIGN_VERTICAL_JUSTIFY);
|
116
|
+
MAP_LXW_FMT_CONST(ALIGN_VERTICAL_DISTRIBUTED);
|
117
|
+
|
118
|
+
MAP_LXW_FMT_CONST(PATTERN_SOLID);
|
119
|
+
MAP_LXW_FMT_CONST(PATTERN_MEDIUM_GRAY);
|
120
|
+
MAP_LXW_FMT_CONST(PATTERN_DARK_GRAY);
|
121
|
+
MAP_LXW_FMT_CONST(PATTERN_LIGHT_GRAY);
|
122
|
+
MAP_LXW_FMT_CONST(PATTERN_DARK_HORIZONTAL);
|
123
|
+
MAP_LXW_FMT_CONST(PATTERN_DARK_VERTICAL);
|
124
|
+
MAP_LXW_FMT_CONST(PATTERN_DARK_DOWN);
|
125
|
+
MAP_LXW_FMT_CONST(PATTERN_DARK_UP);
|
126
|
+
MAP_LXW_FMT_CONST(PATTERN_DARK_GRID);
|
127
|
+
MAP_LXW_FMT_CONST(PATTERN_DARK_TRELLIS);
|
128
|
+
MAP_LXW_FMT_CONST(PATTERN_LIGHT_HORIZONTAL);
|
129
|
+
MAP_LXW_FMT_CONST(PATTERN_LIGHT_VERTICAL);
|
130
|
+
MAP_LXW_FMT_CONST(PATTERN_LIGHT_DOWN);
|
131
|
+
MAP_LXW_FMT_CONST(PATTERN_LIGHT_UP);
|
132
|
+
MAP_LXW_FMT_CONST(PATTERN_LIGHT_GRID);
|
133
|
+
MAP_LXW_FMT_CONST(PATTERN_LIGHT_TRELLIS);
|
134
|
+
MAP_LXW_FMT_CONST(PATTERN_GRAY_125);
|
135
|
+
MAP_LXW_FMT_CONST(PATTERN_GRAY_0625);
|
136
|
+
|
137
|
+
MAP_LXW_FMT_CONST(BORDER_THIN);
|
138
|
+
MAP_LXW_FMT_CONST(BORDER_MEDIUM);
|
139
|
+
MAP_LXW_FMT_CONST(BORDER_DASHED);
|
140
|
+
MAP_LXW_FMT_CONST(BORDER_DOTTED);
|
141
|
+
MAP_LXW_FMT_CONST(BORDER_THICK);
|
142
|
+
MAP_LXW_FMT_CONST(BORDER_DOUBLE);
|
143
|
+
MAP_LXW_FMT_CONST(BORDER_HAIR);
|
144
|
+
MAP_LXW_FMT_CONST(BORDER_MEDIUM_DASHED);
|
145
|
+
MAP_LXW_FMT_CONST(BORDER_DASH_DOT);
|
146
|
+
MAP_LXW_FMT_CONST(BORDER_MEDIUM_DASH_DOT);
|
147
|
+
MAP_LXW_FMT_CONST(BORDER_DASH_DOT_DOT);
|
148
|
+
MAP_LXW_FMT_CONST(BORDER_MEDIUM_DASH_DOT_DOT);
|
149
|
+
MAP_LXW_FMT_CONST(BORDER_SLANT_DASH_DOT);
|
150
|
+
|
151
|
+
MAP_LXW_FMT_CONST(DIAGONAL_BORDER_UP);
|
152
|
+
MAP_LXW_FMT_CONST(DIAGONAL_BORDER_DOWN);
|
153
|
+
MAP_LXW_FMT_CONST(DIAGONAL_BORDER_UP_DOWN);
|
154
|
+
#undef MAP_LXW_FMT_CONST
|
155
|
+
}
|
data/ext/xlsxwriter/format.h
CHANGED
data/ext/xlsxwriter/workbook.c
CHANGED
@@ -1,7 +1,16 @@
|
|
1
1
|
#include <string.h>
|
2
2
|
#include "xlsxwriter.h"
|
3
|
+
#include "chart.h"
|
3
4
|
#include "format.h"
|
4
5
|
#include "workbook.h"
|
6
|
+
#include "workbook_properties.h"
|
7
|
+
#include "worksheet.h"
|
8
|
+
|
9
|
+
VALUE cWorkbook;
|
10
|
+
|
11
|
+
void workbook_free(void *p);
|
12
|
+
VALUE workbook_release(VALUE self);
|
13
|
+
|
5
14
|
|
6
15
|
VALUE
|
7
16
|
workbook_alloc(VALUE klass)
|
@@ -19,6 +28,20 @@ workbook_alloc(VALUE klass)
|
|
19
28
|
return obj;
|
20
29
|
}
|
21
30
|
|
31
|
+
/* call-seq:
|
32
|
+
* XlsxWriter::Workbook.new(path, constant_memory: false, tmpdir: nil) -> workbook
|
33
|
+
* XlsxWriter::Workbook.new(path, constant_memory: false, tmpdir: nil) { |wb| block } -> nil
|
34
|
+
* XlsxWriter::Workbook.open(path, constant_memory: false, tmpdir: nil) { |wb| block } -> nil
|
35
|
+
*
|
36
|
+
* Creates a new Xlsx workbook in file +path+ and returns a new Workbook object.
|
37
|
+
*
|
38
|
+
* If +constant_memory+ is set to true workbook data is stored in temporary files
|
39
|
+
* in +tmpdir+, considerably reducing memory consumption for large documents.
|
40
|
+
*
|
41
|
+
* XlsxWriter::Workbook.open('/tmp/test.xlsx', constant_memory: true) do |wb|
|
42
|
+
* # ... populate the workbook with data ...
|
43
|
+
* end
|
44
|
+
*/
|
22
45
|
VALUE
|
23
46
|
workbook_new_(int argc, VALUE *argv, VALUE self) {
|
24
47
|
VALUE workbook = rb_call_super(argc, argv);
|
@@ -30,6 +53,7 @@ workbook_new_(int argc, VALUE *argv, VALUE self) {
|
|
30
53
|
return workbook;
|
31
54
|
}
|
32
55
|
|
56
|
+
/* :nodoc: */
|
33
57
|
VALUE
|
34
58
|
workbook_init(int argc, VALUE *argv, VALUE self) {
|
35
59
|
struct workbook *ptr;
|
@@ -67,6 +91,18 @@ workbook_init(int argc, VALUE *argv, VALUE self) {
|
|
67
91
|
return self;
|
68
92
|
}
|
69
93
|
|
94
|
+
/* call-seq:
|
95
|
+
* wb.close -> nil
|
96
|
+
*
|
97
|
+
* Dumps the workbook content to the file and closes the worksheet.
|
98
|
+
* To be used only for workbooks opened with <code>XlsxWriter::Workbook.new</code>
|
99
|
+
* without block.
|
100
|
+
*
|
101
|
+
* No methods should be called on the worksheet after it is colsed.
|
102
|
+
*
|
103
|
+
* wb = XlsxWriter::Workbook.new('/tmp/test.xlsx')
|
104
|
+
* wb.close
|
105
|
+
*/
|
70
106
|
VALUE
|
71
107
|
workbook_release(VALUE self) {
|
72
108
|
struct workbook *ptr;
|
@@ -119,20 +155,27 @@ workbook_free(void *p) {
|
|
119
155
|
}
|
120
156
|
}
|
121
157
|
|
158
|
+
/* call-seq:
|
159
|
+
* wb.add_worksheet([name]) -> ws
|
160
|
+
* wb.add_worksheet([name]) { |ws| block } -> obj
|
161
|
+
*
|
162
|
+
* Adds a worksheet named +name+ to the workbook.
|
163
|
+
*
|
164
|
+
* If a block is passed, the last statement is returned.
|
165
|
+
*
|
166
|
+
* wb.add_worksheet('Sheet1') do |ws|
|
167
|
+
* ws.add_row(['test'])
|
168
|
+
* end
|
169
|
+
*/
|
122
170
|
VALUE
|
123
171
|
workbook_add_worksheet_(int argc, VALUE *argv, VALUE self) {
|
124
172
|
VALUE worksheet = Qnil;
|
125
173
|
|
126
|
-
|
127
|
-
rb_raise(rb_eArgError, "wrong number of arguments");
|
128
|
-
return Qnil;
|
129
|
-
}
|
174
|
+
rb_check_arity(argc, 0, 1);
|
130
175
|
|
131
176
|
struct workbook *ptr;
|
132
177
|
Data_Get_Struct(self, struct workbook, ptr);
|
133
178
|
if (ptr->workbook) {
|
134
|
-
VALUE mXlsxWriter = rb_const_get(rb_cObject, rb_intern("XlsxWriter"));
|
135
|
-
VALUE cWorksheet = rb_const_get(mXlsxWriter, rb_intern("Worksheet"));
|
136
179
|
worksheet = rb_funcall(cWorksheet, rb_intern("new"), argc + 1, self, argv[0]);
|
137
180
|
}
|
138
181
|
|
@@ -144,6 +187,37 @@ workbook_add_worksheet_(int argc, VALUE *argv, VALUE self) {
|
|
144
187
|
return worksheet;
|
145
188
|
}
|
146
189
|
|
190
|
+
/* call-seq:
|
191
|
+
* wb.add_format(key, definition) -> wb
|
192
|
+
*
|
193
|
+
* Adds a format identified as +key+ with parameters set from +definition+ to the
|
194
|
+
* workbook.
|
195
|
+
*
|
196
|
+
* +definition+ should be an object and may contain the following options:
|
197
|
+
*
|
198
|
+
* :font_name:: Font family to be used to display the cell content (like Arial, Dejavu or Helvetica).
|
199
|
+
* :font_size:: Font size.
|
200
|
+
* :font_color:: Text color.
|
201
|
+
* :bold, :italic, underline :: Bold, italic, underlined text.
|
202
|
+
* :font_strikeout:: Striked out text.
|
203
|
+
* :font_script:: Superscript (XlsxWrtiter::Format::FONT_SUPERSCRIPT) or subscript (XlsxWriter::Format::FONT_SUBSCRIPT).
|
204
|
+
* :num_format:: Defines numerical format with mask, like <code>'d mmm yyyy'</code>
|
205
|
+
* or <code>'#,##0.00'</code>.
|
206
|
+
* :num_format_index:: Defines numerical format from special {pre-defined set}[https://libxlsxwriter.github.io/format_8h.html#a688aa42bcc703d17e125d9a34c721872].
|
207
|
+
* :unlocked:: Allows modifications of protected cells.
|
208
|
+
* :hidden::
|
209
|
+
* :align, :vertical_align::
|
210
|
+
* :text_wrap::
|
211
|
+
* :rotation::
|
212
|
+
* :indent::
|
213
|
+
* :shrink::
|
214
|
+
* :pattern::
|
215
|
+
* :bg_color::
|
216
|
+
* :fg_color::
|
217
|
+
* :border::
|
218
|
+
* :bottom, :top, :left, :right::
|
219
|
+
* :border_color, :bottom_color, :top_color, :left_color, :right_color::
|
220
|
+
*/
|
147
221
|
VALUE
|
148
222
|
workbook_add_format_(VALUE self, VALUE key, VALUE opts) {
|
149
223
|
struct workbook *ptr;
|
@@ -171,6 +245,23 @@ workbook_add_format_(VALUE self, VALUE key, VALUE opts) {
|
|
171
245
|
return self;
|
172
246
|
}
|
173
247
|
|
248
|
+
/* call-seq:
|
249
|
+
* wb.add_chart(type) { |chart| block } -> obj
|
250
|
+
* wb.add_chert(type) -> chart
|
251
|
+
*
|
252
|
+
* Adds a chart of type +type+ to the workbook.
|
253
|
+
*
|
254
|
+
* +type+ is expected to be one of <code>XlsxWriter::Workbook::Chart::{NONE, AREA,
|
255
|
+
* AREA_STACKED, AREA_STACKED_PERCENT, BAR, BAR_STACKED, BAR_STACKED_PERCENT,
|
256
|
+
* COLUMN, COLUMN_STACKED, COLUMN_STACKED_PERCENT, DOUGHNUT, LINE, PIE, SCATTER,
|
257
|
+
* SCATTER_STRAIGHT, SCATTER_STRAIGHT_WOTH_MARKERS, SCATTER_SMOOTH,
|
258
|
+
* SCATTER_SMOOTH_WITH_MARKERS, RADAR, RADAR_WITH_MARKERS, RADAR_FILLED}</code>.
|
259
|
+
*
|
260
|
+
* wb.add_chart(XlsxWriter::Workbook::Chart::PIE) do |chart|
|
261
|
+
* chart.add_series 'A1:A10', 'B1:B10'
|
262
|
+
* ws.insert_chart('D2', chart)
|
263
|
+
* end
|
264
|
+
*/
|
174
265
|
VALUE
|
175
266
|
workbook_add_chart_(VALUE self, VALUE type) {
|
176
267
|
VALUE chart = rb_funcall(cChart, rb_intern("new"), 2, self, type);
|
@@ -181,6 +272,7 @@ workbook_add_chart_(VALUE self, VALUE type) {
|
|
181
272
|
return chart;
|
182
273
|
}
|
183
274
|
|
275
|
+
/* :nodoc: */
|
184
276
|
VALUE
|
185
277
|
workbook_set_default_xf_indices_(VALUE self) {
|
186
278
|
struct workbook *ptr;
|
@@ -189,6 +281,12 @@ workbook_set_default_xf_indices_(VALUE self) {
|
|
189
281
|
return self;
|
190
282
|
}
|
191
283
|
|
284
|
+
/* call-seq: wb.properties -> wb_properties
|
285
|
+
*
|
286
|
+
* Returns worbook properties accessor object.
|
287
|
+
*
|
288
|
+
* wb.properties.title = 'My awesome sheet'
|
289
|
+
*/
|
192
290
|
VALUE
|
193
291
|
workbook_properties_(VALUE self) {
|
194
292
|
VALUE props = rb_obj_alloc(cWorkbookProperties);
|
@@ -196,6 +294,12 @@ workbook_properties_(VALUE self) {
|
|
196
294
|
return props;
|
197
295
|
}
|
198
296
|
|
297
|
+
/* call-seq: wb.define_name(name, formula) -> wb
|
298
|
+
*
|
299
|
+
* Create a defined +name+ in the workbook to use as a variable defined in +formula+.
|
300
|
+
*
|
301
|
+
* wb.define_name 'Sales', '=Sheet1!$G$1:$H$10'
|
302
|
+
*/
|
199
303
|
VALUE
|
200
304
|
workbook_define_name_(VALUE self, VALUE name, VALUE formula) {
|
201
305
|
struct workbook *ptr;
|
@@ -204,6 +308,11 @@ workbook_define_name_(VALUE self, VALUE name, VALUE formula) {
|
|
204
308
|
return self;
|
205
309
|
}
|
206
310
|
|
311
|
+
/* call-seq: wb.validate_worksheet_name(name) -> true
|
312
|
+
*
|
313
|
+
* Validates a worksheet +name+. Returns +true+ or raises an exception (not
|
314
|
+
* implemented yet).
|
315
|
+
*/
|
207
316
|
VALUE
|
208
317
|
workbook_validate_worksheet_name_(VALUE self, VALUE name) {
|
209
318
|
struct workbook *ptr;
|
@@ -255,3 +364,33 @@ void
|
|
255
364
|
handle_lxw_error(lxw_error err) {
|
256
365
|
return;
|
257
366
|
}
|
367
|
+
|
368
|
+
|
369
|
+
/* Document-class: XlsxWriter::Workbook
|
370
|
+
*
|
371
|
+
* +Workbook+ is the main class exposed by +XlsxWriter+. It represents the
|
372
|
+
* workbook (.xlsx) file.
|
373
|
+
*/
|
374
|
+
void
|
375
|
+
init_xlsxwriter_workbook() {
|
376
|
+
cWorkbook = rb_define_class_under(mXlsxWriter, "Workbook", rb_cObject);
|
377
|
+
|
378
|
+
rb_define_alloc_func(cWorkbook, workbook_alloc);
|
379
|
+
rb_define_singleton_method(cWorkbook, "new", workbook_new_, -1);
|
380
|
+
rb_define_alias(rb_singleton_class(cWorkbook), "open", "new");
|
381
|
+
rb_define_method(cWorkbook, "initialize", workbook_init, -1);
|
382
|
+
rb_define_method(cWorkbook, "close", workbook_release, 0);
|
383
|
+
rb_define_method(cWorkbook, "add_worksheet", workbook_add_worksheet_, -1);
|
384
|
+
rb_define_method(cWorkbook, "add_format", workbook_add_format_, 2);
|
385
|
+
rb_define_method(cWorkbook, "add_chart", workbook_add_chart_, 1);
|
386
|
+
rb_define_method(cWorkbook, "set_default_xf_indices", workbook_set_default_xf_indices_, 0);
|
387
|
+
rb_define_method(cWorkbook, "properties", workbook_properties_, 0);
|
388
|
+
rb_define_method(cWorkbook, "define_name", workbook_define_name_, 2);
|
389
|
+
rb_define_method(cWorkbook, "validate_worksheet_name", workbook_validate_worksheet_name_, 1);
|
390
|
+
|
391
|
+
/*
|
392
|
+
* This attribute contains effective font widths used for automatic column
|
393
|
+
* widths of workbook columns.
|
394
|
+
*/
|
395
|
+
rb_define_attr(cWorkbook, "font_sizes", 1, 0);
|
396
|
+
}
|
data/ext/xlsxwriter/workbook.h
CHANGED
@@ -10,33 +10,13 @@ struct workbook {
|
|
10
10
|
st_table *formats;
|
11
11
|
};
|
12
12
|
|
13
|
-
|
14
|
-
VALUE workbook_alloc(VALUE klass);
|
15
|
-
VALUE workbook_new_(int argc, VALUE *argv, VALUE self);
|
16
|
-
VALUE workbook_init(int argc, VALUE *argv, VALUE self);
|
17
|
-
VALUE workbook_release(VALUE self);
|
18
|
-
void workbook_free(void *);
|
19
|
-
|
20
|
-
VALUE workbook_add_worksheet_(int argc, VALUE *argv, VALUE self);
|
21
|
-
VALUE workbook_add_format_(VALUE self, VALUE key, VALUE opts);
|
22
|
-
VALUE workbook_add_chart_(VALUE self, VALUE type);
|
23
|
-
VALUE workbook_set_default_xf_indices_(VALUE self);
|
24
|
-
VALUE workbook_properties_(VALUE self);
|
25
|
-
VALUE workbook_define_name_(VALUE self, VALUE name, VALUE formula);
|
26
|
-
VALUE workbook_validate_worksheet_name_(VALUE self, VALUE name);
|
27
|
-
|
28
|
-
|
29
13
|
lxw_format *workbook_get_format(VALUE self, VALUE key);
|
30
14
|
lxw_datetime value_to_lxw_datetime(VALUE val);
|
31
15
|
void handle_lxw_error(lxw_error err);
|
32
16
|
|
17
|
+
void init_xlsxwriter_workbook();
|
18
|
+
|
33
19
|
extern VALUE mXlsxWriter;
|
34
20
|
extern VALUE cWorkbook;
|
35
|
-
extern VALUE cWorksheet;
|
36
|
-
extern VALUE mXlsxFormat;
|
37
|
-
extern VALUE cWorkbookProperties;
|
38
|
-
extern VALUE cChart;
|
39
|
-
extern VALUE cChartSeries;
|
40
|
-
extern VALUE cChartAxis;
|
41
21
|
|
42
22
|
#endif // __WORKBOOK__
|
@@ -4,6 +4,9 @@
|
|
4
4
|
#include "workbook.h"
|
5
5
|
#include "workbook_properties.h"
|
6
6
|
|
7
|
+
VALUE cWorkbookProperties;
|
8
|
+
|
9
|
+
/* :nodoc: */
|
7
10
|
VALUE
|
8
11
|
workbook_properties_init_(VALUE self, VALUE workbook) {
|
9
12
|
struct workbook *wb_ptr;
|
@@ -18,20 +21,11 @@ workbook_properties_init_(VALUE self, VALUE workbook) {
|
|
18
21
|
return self;
|
19
22
|
}
|
20
23
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
if (last_pos > 0 && key_str[last_pos] == '=') {
|
27
|
-
key_str[last_pos] = '\0';
|
28
|
-
}
|
29
|
-
key = rb_str_new_cstr(key_str);
|
30
|
-
workbook_properties_set_(self, key, value);
|
31
|
-
xfree(key_str);
|
32
|
-
return value;
|
33
|
-
}
|
34
|
-
|
24
|
+
/* call-seq: wb_properies[property]= value
|
25
|
+
*
|
26
|
+
* Sets a document +property+ (both custom and standard).
|
27
|
+
* Property type is automatically deduced from the +value+.
|
28
|
+
*/
|
35
29
|
VALUE
|
36
30
|
workbook_properties_set_(VALUE self, VALUE key, VALUE value) {
|
37
31
|
char *key_cstr = NULL;
|
@@ -101,3 +95,56 @@ workbook_properties_set_(VALUE self, VALUE key, VALUE value) {
|
|
101
95
|
}
|
102
96
|
return value;
|
103
97
|
}
|
98
|
+
|
99
|
+
VALUE
|
100
|
+
workbook_properties_set_dir_(VALUE self, VALUE value) {
|
101
|
+
VALUE key = rb_id2str(rb_frame_callee());
|
102
|
+
char *key_str = ruby_strdup(RSTRING_PTR(key));
|
103
|
+
size_t last_pos = RSTRING_LEN(key) - 1;
|
104
|
+
if (last_pos > 0 && key_str[last_pos] == '=') {
|
105
|
+
key_str[last_pos] = '\0';
|
106
|
+
}
|
107
|
+
key = rb_str_new_cstr(key_str);
|
108
|
+
workbook_properties_set_(self, key, value);
|
109
|
+
xfree(key_str);
|
110
|
+
return value;
|
111
|
+
}
|
112
|
+
|
113
|
+
/* Document-class: XlsxWriter::Workbook::Properties
|
114
|
+
*
|
115
|
+
* The class defines accessors for workbook properties.
|
116
|
+
*
|
117
|
+
* Setting standard workbook text properties:
|
118
|
+
*
|
119
|
+
* wb_properties.title = title
|
120
|
+
* wb_properties.subject = subjet
|
121
|
+
* wb_properties.author = author
|
122
|
+
* wb_properties.manager = manager
|
123
|
+
* wb_properties.company = company
|
124
|
+
* wb_properties.category = category
|
125
|
+
* wb_properties.keywords = keywords
|
126
|
+
* wb_properties.comments = comments
|
127
|
+
* wb_properties.status = status
|
128
|
+
*
|
129
|
+
* You can see the properties under Office Button -> Prepare -> Properties
|
130
|
+
* in Excel.
|
131
|
+
*/
|
132
|
+
void
|
133
|
+
init_xlsxwriter_workbook_properties() {
|
134
|
+
cWorkbookProperties = rb_define_class_under(cWorkbook, "Properties", rb_cObject);
|
135
|
+
|
136
|
+
rb_define_method(cWorkbookProperties, "initialize", workbook_properties_init_, 1);
|
137
|
+
rb_define_method(cWorkbookProperties, "[]=", workbook_properties_set_, 2);
|
138
|
+
#define DEF_PROP_HANDLER(prop) rb_define_method(cWorkbookProperties, #prop "=", workbook_properties_set_dir_, 1);
|
139
|
+
DEF_PROP_HANDLER(title);
|
140
|
+
DEF_PROP_HANDLER(subject);
|
141
|
+
DEF_PROP_HANDLER(author);
|
142
|
+
DEF_PROP_HANDLER(manager);
|
143
|
+
DEF_PROP_HANDLER(company);
|
144
|
+
DEF_PROP_HANDLER(category);
|
145
|
+
DEF_PROP_HANDLER(keywords);
|
146
|
+
DEF_PROP_HANDLER(comments);
|
147
|
+
DEF_PROP_HANDLER(status);
|
148
|
+
DEF_PROP_HANDLER(hyperlink_base);
|
149
|
+
#undef DEF_PROP_HANDLER
|
150
|
+
}
|