write_xlsx 0.60.0 → 0.61.0
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.
- data/README.rdoc +11 -1
- data/examples/hide_row_col.rb +33 -0
- data/html/en/doc_en.html +7765 -0
- data/html/index.html +16 -0
- data/html/style.css +433 -0
- data/lib/write_xlsx/chart.rb +20 -0
- data/lib/write_xlsx/package/button.rb +132 -0
- data/lib/write_xlsx/package/comments.rb +97 -1
- data/lib/write_xlsx/package/shared_strings.rb +2 -2
- data/lib/write_xlsx/package/vml.rb +9 -419
- data/lib/write_xlsx/utility.rb +138 -0
- data/lib/write_xlsx/version.rb +1 -1
- data/lib/write_xlsx/workbook.rb +2 -2
- data/lib/write_xlsx/worksheet.rb +178 -115
- data/test/drawing/test_write_row.rb +1 -1
- data/test/perl_output/hide_row_col.xlsx +0 -0
- data/test/perl_output/merge4.xlsx +0 -0
- data/test/perl_output/merge6.xlsx +0 -0
- data/test/regression/{test_vml04.rb → disabled_test_vml04.rb} +0 -0
- data/test/regression/test_chart_size01.rb +41 -0
- data/test/regression/test_chart_size02.rb +41 -0
- data/test/regression/test_chart_size03.rb +39 -0
- data/test/regression/test_default_row01.rb +26 -0
- data/test/regression/test_default_row02.rb +28 -0
- data/test/regression/test_default_row03.rb +28 -0
- data/test/regression/test_default_row04.rb +31 -0
- data/test/regression/xlsx_files/chart_size01.xlsx +0 -0
- data/test/regression/xlsx_files/default_row01.xlsx +0 -0
- data/test/regression/xlsx_files/default_row02.xlsx +0 -0
- data/test/regression/xlsx_files/default_row03.xlsx +0 -0
- data/test/regression/xlsx_files/default_row04.xlsx +0 -0
- data/test/test_example_match.rb +22 -0
- data/test/worksheet/test_write_methods.rb +0 -7
- metadata +35 -22
- data/test/package/vml/test_write_anchor.rb +0 -14
- data/test/package/vml/test_write_column.rb +0 -14
- data/test/package/vml/test_write_fill.rb +0 -22
- data/test/package/vml/test_write_move_with_cells.rb +0 -14
- data/test/package/vml/test_write_row.rb +0 -14
- data/test/package/vml/test_write_shadow.rb +0 -14
- data/test/package/vml/test_write_size_with_cells.rb +0 -14
- data/test/package/vml/test_write_textbox.rb +0 -14
- data/test/worksheet/test_write_hyperlinks.rb +0 -27
data/html/index.html
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
|
2
|
+
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
3
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
|
4
|
+
<head>
|
5
|
+
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
|
6
|
+
<title>writeexcel rubygem reference</title>
|
7
|
+
|
8
|
+
</head>
|
9
|
+
<body class="indexpage">
|
10
|
+
<h1>writeexcel rubygem reference</h1>
|
11
|
+
<ul>
|
12
|
+
<li><a href="en/doc_en.html">English Version</a></li>
|
13
|
+
<li><a href="ja/doc_ja.html">日本語版</a></li>
|
14
|
+
</ul>
|
15
|
+
</body>
|
16
|
+
</html>
|
data/html/style.css
ADDED
@@ -0,0 +1,433 @@
|
|
1
|
+
BODY, .logo { background: white; }
|
2
|
+
|
3
|
+
BODY {
|
4
|
+
color: black;
|
5
|
+
font-family: arial,sans-serif;
|
6
|
+
margin: 0;
|
7
|
+
padding: 1ex;
|
8
|
+
}
|
9
|
+
|
10
|
+
TABLE {
|
11
|
+
border-collapse: collapse;
|
12
|
+
border-spacing: 0;
|
13
|
+
border-width: 0;
|
14
|
+
color: inherit;
|
15
|
+
}
|
16
|
+
|
17
|
+
IMG { border: 0; }
|
18
|
+
FORM { margin: 0; }
|
19
|
+
input { margin: 2px; }
|
20
|
+
|
21
|
+
.logo {
|
22
|
+
float: left;
|
23
|
+
width: 264px;
|
24
|
+
height: 77px;
|
25
|
+
}
|
26
|
+
|
27
|
+
.front .logo {
|
28
|
+
float: none;
|
29
|
+
display:block;
|
30
|
+
}
|
31
|
+
|
32
|
+
.front .searchbox {
|
33
|
+
margin: 2ex auto;
|
34
|
+
text-align: center;
|
35
|
+
}
|
36
|
+
|
37
|
+
.front .menubar {
|
38
|
+
text-align: center;
|
39
|
+
}
|
40
|
+
|
41
|
+
.menubar {
|
42
|
+
background: #006699;
|
43
|
+
margin: 1ex 0;
|
44
|
+
padding: 1px;
|
45
|
+
}
|
46
|
+
|
47
|
+
.menubar A {
|
48
|
+
padding: 0.8ex;
|
49
|
+
font: bold 10pt Arial,Helvetica,sans-serif;
|
50
|
+
}
|
51
|
+
|
52
|
+
.menubar A:link, .menubar A:visited {
|
53
|
+
color: white;
|
54
|
+
text-decoration: none;
|
55
|
+
}
|
56
|
+
|
57
|
+
.menubar A:hover {
|
58
|
+
color: #ff6600;
|
59
|
+
text-decoration: underline;
|
60
|
+
}
|
61
|
+
|
62
|
+
A:link, A:visited {
|
63
|
+
background: transparent;
|
64
|
+
color: #006699;
|
65
|
+
}
|
66
|
+
|
67
|
+
A[href="#POD_ERRORS"] {
|
68
|
+
background: transparent;
|
69
|
+
color: #FF0000;
|
70
|
+
}
|
71
|
+
|
72
|
+
TD {
|
73
|
+
margin: 0;
|
74
|
+
padding: 0;
|
75
|
+
}
|
76
|
+
|
77
|
+
DIV {
|
78
|
+
border-width: 0;
|
79
|
+
}
|
80
|
+
|
81
|
+
DT {
|
82
|
+
margin-top: 1em;
|
83
|
+
}
|
84
|
+
|
85
|
+
.credits TD {
|
86
|
+
padding: 0.5ex 2ex;
|
87
|
+
}
|
88
|
+
|
89
|
+
.huge {
|
90
|
+
font-size: 32pt;
|
91
|
+
}
|
92
|
+
|
93
|
+
.s {
|
94
|
+
background: #dddddd;
|
95
|
+
color: inherit;
|
96
|
+
}
|
97
|
+
|
98
|
+
.s TD, .r TD {
|
99
|
+
padding: 0.2ex 1ex;
|
100
|
+
vertical-align: baseline;
|
101
|
+
}
|
102
|
+
|
103
|
+
TH {
|
104
|
+
background: #bbbbbb;
|
105
|
+
color: inherit;
|
106
|
+
padding: 0.4ex 1ex;
|
107
|
+
text-align: left;
|
108
|
+
}
|
109
|
+
|
110
|
+
TH A:link, TH A:visited {
|
111
|
+
background: transparent;
|
112
|
+
color: black;
|
113
|
+
}
|
114
|
+
|
115
|
+
.box {
|
116
|
+
border: 1px solid #006699;
|
117
|
+
margin: 1ex 0;
|
118
|
+
padding: 0;
|
119
|
+
}
|
120
|
+
|
121
|
+
.distfiles TD {
|
122
|
+
padding: 0 2ex 0 0;
|
123
|
+
vertical-align: baseline;
|
124
|
+
}
|
125
|
+
|
126
|
+
.manifest TD {
|
127
|
+
padding: 0 1ex;
|
128
|
+
vertical-align: top;
|
129
|
+
}
|
130
|
+
|
131
|
+
.l1 {
|
132
|
+
font-weight: bold;
|
133
|
+
}
|
134
|
+
|
135
|
+
.l2 {
|
136
|
+
font-weight: normal;
|
137
|
+
}
|
138
|
+
|
139
|
+
.t1, .t2, .t3, .t4, .t5 {
|
140
|
+
background: #006699;
|
141
|
+
color: white;
|
142
|
+
}
|
143
|
+
.t4 {
|
144
|
+
padding: 0.2ex 0.4ex;
|
145
|
+
}
|
146
|
+
.t1, .t2, .t3 {
|
147
|
+
padding: 0.5ex 1ex;
|
148
|
+
}
|
149
|
+
|
150
|
+
/* IE does not support .box>.t1 Grrr */
|
151
|
+
.box .t1, .box .t2, .box .t3, .box .t5 {
|
152
|
+
margin: 0;
|
153
|
+
}
|
154
|
+
|
155
|
+
.t1 {
|
156
|
+
font-size: 1.4em;
|
157
|
+
font-weight: bold;
|
158
|
+
text-align: center;
|
159
|
+
}
|
160
|
+
|
161
|
+
.t2 {
|
162
|
+
font-size: 1.0em;
|
163
|
+
font-weight: bold;
|
164
|
+
text-align: left;
|
165
|
+
}
|
166
|
+
|
167
|
+
.t3 {
|
168
|
+
font-size: 1.0em;
|
169
|
+
font-weight: normal;
|
170
|
+
text-align: left;
|
171
|
+
}
|
172
|
+
|
173
|
+
.t5 {
|
174
|
+
font-size: 0.8em;
|
175
|
+
font-weight: normal;
|
176
|
+
text-align: center;
|
177
|
+
}
|
178
|
+
|
179
|
+
/* width: 100%; border: 0.1px solid #FFFFFF; */ /* NN4 hack */
|
180
|
+
|
181
|
+
.datecell {
|
182
|
+
text-align: center;
|
183
|
+
width: 17em;
|
184
|
+
}
|
185
|
+
|
186
|
+
.cell {
|
187
|
+
padding: 0.2ex 1ex;
|
188
|
+
text-align: left;
|
189
|
+
}
|
190
|
+
|
191
|
+
.label {
|
192
|
+
background: #aaaaaa;
|
193
|
+
color: black;
|
194
|
+
font-weight: bold;
|
195
|
+
padding: 0.2ex 1ex;
|
196
|
+
text-align: right;
|
197
|
+
white-space: nowrap;
|
198
|
+
vertical-align: baseline;
|
199
|
+
}
|
200
|
+
|
201
|
+
.categories {
|
202
|
+
border-bottom: 3px double #006699;
|
203
|
+
margin-bottom: 1ex;
|
204
|
+
padding-bottom: 3ex;
|
205
|
+
padding-top: 2ex;
|
206
|
+
}
|
207
|
+
|
208
|
+
.categories TABLE {
|
209
|
+
margin: auto;
|
210
|
+
}
|
211
|
+
|
212
|
+
.categories TD {
|
213
|
+
padding: 0.5ex 1ex;
|
214
|
+
vertical-align: baseline;
|
215
|
+
}
|
216
|
+
|
217
|
+
.path A {
|
218
|
+
background: transparent;
|
219
|
+
color: #006699;
|
220
|
+
font-weight: bold;
|
221
|
+
}
|
222
|
+
|
223
|
+
.pages {
|
224
|
+
background: #dddddd;
|
225
|
+
color: #006699;
|
226
|
+
padding: 0.2ex 0.4ex;
|
227
|
+
}
|
228
|
+
|
229
|
+
.path {
|
230
|
+
background: #dddddd;
|
231
|
+
border-bottom: 1px solid #006699;
|
232
|
+
color: #006699;
|
233
|
+
/* font-size: 1.4em;*/
|
234
|
+
margin: 1ex 0;
|
235
|
+
padding: 0.5ex 1ex;
|
236
|
+
}
|
237
|
+
|
238
|
+
.menubar TD {
|
239
|
+
background: #006699;
|
240
|
+
color: white;
|
241
|
+
}
|
242
|
+
|
243
|
+
.menubar {
|
244
|
+
background: #006699;
|
245
|
+
color: white;
|
246
|
+
margin: 1ex 0;
|
247
|
+
padding: 1px;
|
248
|
+
}
|
249
|
+
|
250
|
+
.menubar .links {
|
251
|
+
background: transparent;
|
252
|
+
color: white;
|
253
|
+
padding: 0.2ex;
|
254
|
+
text-align: left;
|
255
|
+
}
|
256
|
+
|
257
|
+
.menubar .searchbar {
|
258
|
+
background: black;
|
259
|
+
color: black;
|
260
|
+
margin: 0px;
|
261
|
+
padding: 2px;
|
262
|
+
text-align: right;
|
263
|
+
}
|
264
|
+
|
265
|
+
A.m:link, A.m:visited {
|
266
|
+
background: #006699;
|
267
|
+
color: white;
|
268
|
+
font: bold 10pt Arial,Helvetica,sans-serif;
|
269
|
+
text-decoration: none;
|
270
|
+
}
|
271
|
+
|
272
|
+
A.o:link, A.o:visited {
|
273
|
+
background: #006699;
|
274
|
+
color: #ccffcc;
|
275
|
+
font: bold 10pt Arial,Helvetica,sans-serif;
|
276
|
+
text-decoration: none;
|
277
|
+
}
|
278
|
+
|
279
|
+
A.o:hover {
|
280
|
+
background: transparent;
|
281
|
+
color: #ff6600;
|
282
|
+
text-decoration: underline;
|
283
|
+
}
|
284
|
+
|
285
|
+
A.m:hover {
|
286
|
+
background: transparent;
|
287
|
+
color: #ff6600;
|
288
|
+
text-decoration: underline;
|
289
|
+
}
|
290
|
+
|
291
|
+
table.dlsip {
|
292
|
+
background: #dddddd;
|
293
|
+
border: 0.4ex solid #dddddd;
|
294
|
+
}
|
295
|
+
|
296
|
+
.pod, .manifest { margin-right: 20ex; }
|
297
|
+
|
298
|
+
.pod PRE {
|
299
|
+
background: #eeeeee;
|
300
|
+
border: 1px solid #888888;
|
301
|
+
color: black;
|
302
|
+
padding: 1em;
|
303
|
+
white-space: pre;
|
304
|
+
}
|
305
|
+
|
306
|
+
.pod H1 {
|
307
|
+
background: transparent;
|
308
|
+
color: #006699;
|
309
|
+
font-size: large;
|
310
|
+
}
|
311
|
+
|
312
|
+
.pod H1 A { text-decoration: none; }
|
313
|
+
.pod H2 A { text-decoration: none; }
|
314
|
+
.pod H3 A { text-decoration: none; }
|
315
|
+
.pod H4 A { text-decoration: none; }
|
316
|
+
|
317
|
+
.pod H2 {
|
318
|
+
background: transparent;
|
319
|
+
color: #006699;
|
320
|
+
font-size: medium;
|
321
|
+
}
|
322
|
+
|
323
|
+
.pod H3 {
|
324
|
+
background: transparent;
|
325
|
+
color: #006699;
|
326
|
+
font-size: medium;
|
327
|
+
font-style: italic;
|
328
|
+
}
|
329
|
+
|
330
|
+
.pod H4 {
|
331
|
+
background: transparent;
|
332
|
+
color: #006699;
|
333
|
+
font-size: medium;
|
334
|
+
font-weight: normal;
|
335
|
+
}
|
336
|
+
|
337
|
+
.pod IMG {
|
338
|
+
vertical-align: top;
|
339
|
+
}
|
340
|
+
|
341
|
+
.pod .toc A {
|
342
|
+
text-decoration: none;
|
343
|
+
}
|
344
|
+
|
345
|
+
.pod .toc LI {
|
346
|
+
line-height: 1.2em;
|
347
|
+
list-style-type: none;
|
348
|
+
}
|
349
|
+
|
350
|
+
.faq DT {
|
351
|
+
font-size: 1.4em;
|
352
|
+
font-weight: bold;
|
353
|
+
}
|
354
|
+
|
355
|
+
.chmenu {
|
356
|
+
background: black;
|
357
|
+
color: red;
|
358
|
+
font: bold 1.1em Arial,Helvetica,sans-serif;
|
359
|
+
margin: 1ex auto;
|
360
|
+
padding: 0.5ex;
|
361
|
+
}
|
362
|
+
|
363
|
+
.chmenu TD {
|
364
|
+
padding: 0.2ex 1ex;
|
365
|
+
}
|
366
|
+
|
367
|
+
.chmenu A:link, .chmenu A:visited {
|
368
|
+
background: transparent;
|
369
|
+
color: white;
|
370
|
+
text-decoration: none;
|
371
|
+
}
|
372
|
+
|
373
|
+
.chmenu A:hover {
|
374
|
+
background: transparent;
|
375
|
+
color: #ff6600;
|
376
|
+
text-decoration: underline;
|
377
|
+
}
|
378
|
+
|
379
|
+
.column {
|
380
|
+
padding: 0.5ex 1ex;
|
381
|
+
vertical-align: top;
|
382
|
+
}
|
383
|
+
|
384
|
+
.datebar {
|
385
|
+
margin: auto;
|
386
|
+
width: 14em;
|
387
|
+
}
|
388
|
+
|
389
|
+
.date {
|
390
|
+
background: transparent;
|
391
|
+
color: #008000;
|
392
|
+
}
|
393
|
+
|
394
|
+
.footer {
|
395
|
+
margin-top: 1ex;
|
396
|
+
text-align: right;
|
397
|
+
color: #006699;
|
398
|
+
font-size: x-small;
|
399
|
+
border-top: 1px solid #006699;
|
400
|
+
line-height: 120%;
|
401
|
+
}
|
402
|
+
|
403
|
+
.front .footer {
|
404
|
+
border-top: none;
|
405
|
+
}
|
406
|
+
|
407
|
+
#permalink {
|
408
|
+
float: right
|
409
|
+
}
|
410
|
+
|
411
|
+
#permalink A {
|
412
|
+
font-size: small;
|
413
|
+
}
|
414
|
+
|
415
|
+
.sr {
|
416
|
+
font-size: inherit;
|
417
|
+
margin: 0;
|
418
|
+
}
|
419
|
+
|
420
|
+
.cpanstats {
|
421
|
+
float: left;
|
422
|
+
text-align: left;
|
423
|
+
color: #bbb;
|
424
|
+
white-space: pre;
|
425
|
+
}
|
426
|
+
|
427
|
+
form.tool {
|
428
|
+
margin: 1ex;
|
429
|
+
}
|
430
|
+
|
431
|
+
.styleswitch {
|
432
|
+
text-align: right;
|
433
|
+
}
|
data/lib/write_xlsx/chart.rb
CHANGED
@@ -438,6 +438,8 @@ module Writexlsx
|
|
438
438
|
attr_accessor :id, :name # :nodoc:
|
439
439
|
attr_writer :index, :palette, :protection # :nodoc:
|
440
440
|
attr_reader :embedded, :formula_ids, :formula_data # :nodoc:
|
441
|
+
attr_reader :x_scale, :y_scale, :x_offset, :y_offset # :nodoc:
|
442
|
+
attr_reader :width, :height
|
441
443
|
|
442
444
|
#
|
443
445
|
# Factory method for returning chart objects based on their class type.
|
@@ -504,6 +506,12 @@ module Writexlsx
|
|
504
506
|
@show_blanks = 'gap'
|
505
507
|
@show_hidden_data = false
|
506
508
|
@show_crosses = true
|
509
|
+
@width = 480
|
510
|
+
@height = 288
|
511
|
+
@x_scale = 1
|
512
|
+
@y_scale = 1
|
513
|
+
@x_offset = 0
|
514
|
+
@y_offset = 0
|
507
515
|
|
508
516
|
set_default_properties
|
509
517
|
end
|
@@ -964,6 +972,18 @@ module Writexlsx
|
|
964
972
|
@show_hidden_data = true
|
965
973
|
end
|
966
974
|
|
975
|
+
#
|
976
|
+
# Set dimensions for scale for the chart.
|
977
|
+
#
|
978
|
+
def size(params = {})
|
979
|
+
@width = params[:width] if params[:width]
|
980
|
+
@height = params[:height] if params[:height]
|
981
|
+
@x_scale = params[:x_scale] if params[:x_scale]
|
982
|
+
@y_scale = params[:y_scale] if params[:y_scale]
|
983
|
+
@x_offset = params[:x_offset] if params[:x_offset]
|
984
|
+
@y_offset = params[:y_offset] if params[:y_offset]
|
985
|
+
end
|
986
|
+
|
967
987
|
#
|
968
988
|
# Setup the default configuration data for an embedded chart.
|
969
989
|
#
|
@@ -0,0 +1,132 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
require 'write_xlsx/utility'
|
3
|
+
|
4
|
+
module Writexlsx
|
5
|
+
module Package
|
6
|
+
|
7
|
+
class Button
|
8
|
+
include Writexlsx::Utility
|
9
|
+
|
10
|
+
attr_accessor :font, :macro, :vertices
|
11
|
+
|
12
|
+
def v_shape_attributes(id, z_index)
|
13
|
+
v_shape_attributes_base(id, z_index) <<
|
14
|
+
'o:button' << 't' <<
|
15
|
+
'fillcolor' << color <<
|
16
|
+
'strokecolor' << 'windowText [64]' <<
|
17
|
+
'o:insetmode' << 'auto'
|
18
|
+
end
|
19
|
+
|
20
|
+
def type
|
21
|
+
'#_x0000_t201'
|
22
|
+
end
|
23
|
+
|
24
|
+
def color
|
25
|
+
'buttonFace [67]'
|
26
|
+
end
|
27
|
+
|
28
|
+
def style_addition
|
29
|
+
['mso-wrap-style:tight']
|
30
|
+
end
|
31
|
+
|
32
|
+
def write_shape(writer, id, z_index)
|
33
|
+
@writer = writer
|
34
|
+
|
35
|
+
attributes = v_shape_attributes(id, z_index)
|
36
|
+
|
37
|
+
@writer.tag_elements('v:shape', attributes) do
|
38
|
+
# Write the v:fill element.
|
39
|
+
write_fill
|
40
|
+
# Write the o:lock element.
|
41
|
+
write_rotation_lock
|
42
|
+
# Write the v:textbox element.
|
43
|
+
write_textbox
|
44
|
+
# Write the x:ClientData element.
|
45
|
+
write_client_data
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
# attributes for <v:fill> element.
|
50
|
+
def fill_attributes
|
51
|
+
[
|
52
|
+
'color2', 'buttonFace [67]',
|
53
|
+
'o:detectmouseclick', 't'
|
54
|
+
]
|
55
|
+
end
|
56
|
+
|
57
|
+
#
|
58
|
+
# Write the <o:lock> element.
|
59
|
+
#
|
60
|
+
def write_rotation_lock
|
61
|
+
attributes = [
|
62
|
+
'v:ext', 'edit',
|
63
|
+
'rotation', 't'
|
64
|
+
]
|
65
|
+
@writer.empty_tag('o:lock', attributes)
|
66
|
+
end
|
67
|
+
|
68
|
+
#
|
69
|
+
# Write the <v:textbox> element.
|
70
|
+
#
|
71
|
+
def write_textbox
|
72
|
+
attributes = ['style', 'mso-direction-alt:auto', 'o:singleclick', 'f']
|
73
|
+
|
74
|
+
@writer.tag_elements('v:textbox', attributes) do
|
75
|
+
# Write the div element.
|
76
|
+
write_div('center', font)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
#
|
81
|
+
# Write the <x:ClientData> element.
|
82
|
+
#
|
83
|
+
def write_client_data
|
84
|
+
attributes = ['ObjectType', 'Button']
|
85
|
+
|
86
|
+
@writer.tag_elements('x:ClientData', attributes) do
|
87
|
+
# Write the x:Anchor element.
|
88
|
+
write_anchor
|
89
|
+
# Write the x:PrintObject element.
|
90
|
+
write_print_object
|
91
|
+
# Write the x:AutoFill element.
|
92
|
+
write_auto_fill
|
93
|
+
# Write the x:FmlaMacro element.
|
94
|
+
write_fmla_macro
|
95
|
+
# Write the x:TextHAlign element.
|
96
|
+
write_text_halign
|
97
|
+
# Write the x:TextVAlign element.
|
98
|
+
write_text_valign
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
#
|
103
|
+
# Write the <x:PrintObject> element.
|
104
|
+
#
|
105
|
+
def write_print_object
|
106
|
+
@writer.data_element('x:PrintObject', 'False')
|
107
|
+
end
|
108
|
+
|
109
|
+
#
|
110
|
+
# Write the <x:FmlaMacro> element.
|
111
|
+
#
|
112
|
+
def write_fmla_macro
|
113
|
+
@writer.data_element('x:FmlaMacro', macro)
|
114
|
+
end
|
115
|
+
|
116
|
+
#
|
117
|
+
# Write the <x:TextHAlign> element.
|
118
|
+
#
|
119
|
+
def write_text_halign
|
120
|
+
@writer.data_element('x:TextHAlign', 'Center')
|
121
|
+
end
|
122
|
+
|
123
|
+
#
|
124
|
+
# Write the <x:TextVAlign> element.
|
125
|
+
#
|
126
|
+
def write_text_valign
|
127
|
+
@writer.data_element('x:TextVAlign', 'Center')
|
128
|
+
end
|
129
|
+
end
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
@@ -7,7 +7,6 @@ module Writexlsx
|
|
7
7
|
module Package
|
8
8
|
|
9
9
|
class Comment
|
10
|
-
|
11
10
|
include Writexlsx::Utility
|
12
11
|
|
13
12
|
DEFAULT_COLOR = 81 # what color ?
|
@@ -117,6 +116,103 @@ module Writexlsx
|
|
117
116
|
10
|
118
117
|
end
|
119
118
|
end
|
119
|
+
|
120
|
+
def v_shape_attributes(id, z_index)
|
121
|
+
v_shape_attributes_base(id, z_index) <<
|
122
|
+
'fillcolor' << color <<
|
123
|
+
'o:insetmode' << 'auto'
|
124
|
+
end
|
125
|
+
|
126
|
+
def type
|
127
|
+
'#_x0000_t202'
|
128
|
+
end
|
129
|
+
|
130
|
+
def style_addition
|
131
|
+
['visibility:', visibility]
|
132
|
+
end
|
133
|
+
|
134
|
+
def write_shape(writer, id, z_index)
|
135
|
+
@writer = writer
|
136
|
+
|
137
|
+
attributes = v_shape_attributes(id, z_index)
|
138
|
+
|
139
|
+
@writer.tag_elements('v:shape', attributes) do
|
140
|
+
writer = @writer
|
141
|
+
|
142
|
+
# Write the v:fill element.
|
143
|
+
write_fill
|
144
|
+
# Write the v:shadow element.
|
145
|
+
write_shadow
|
146
|
+
# Write the v:path element.
|
147
|
+
write_comment_path(nil, 'none')
|
148
|
+
# Write the v:textbox element.
|
149
|
+
write_textbox
|
150
|
+
# Write the x:ClientData element.
|
151
|
+
write_client_data
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
155
|
+
def visibility
|
156
|
+
ptrue?(visible) ? 'visible' : 'hidden'
|
157
|
+
end
|
158
|
+
|
159
|
+
#
|
160
|
+
# Write the <v:fill> element.
|
161
|
+
#
|
162
|
+
def fill_attributes
|
163
|
+
['color2', '#ffffe1']
|
164
|
+
end
|
165
|
+
|
166
|
+
#
|
167
|
+
# Write the <v:shadow> element.
|
168
|
+
#
|
169
|
+
def write_shadow
|
170
|
+
attributes = [
|
171
|
+
'on', 't',
|
172
|
+
'color', 'black',
|
173
|
+
'obscured', 't'
|
174
|
+
]
|
175
|
+
|
176
|
+
@writer.empty_tag('v:shadow', attributes)
|
177
|
+
end
|
178
|
+
|
179
|
+
#
|
180
|
+
# Write the <v:textbox> element.
|
181
|
+
#
|
182
|
+
def write_textbox
|
183
|
+
attributes = ['style', 'mso-direction-alt:auto']
|
184
|
+
|
185
|
+
@writer.tag_elements('v:textbox', attributes) do
|
186
|
+
# Write the div element.
|
187
|
+
write_div('left')
|
188
|
+
end
|
189
|
+
end
|
190
|
+
|
191
|
+
#
|
192
|
+
# Write the <x:ClientData> element.
|
193
|
+
#
|
194
|
+
def write_client_data
|
195
|
+
attributes = ['ObjectType', 'Note']
|
196
|
+
|
197
|
+
@writer.tag_elements('x:ClientData', attributes) do
|
198
|
+
@writer.empty_tag('x:MoveWithCells')
|
199
|
+
@writer.empty_tag('x:SizeWithCells')
|
200
|
+
# Write the x:Anchor element.
|
201
|
+
write_anchor
|
202
|
+
# Write the x:AutoFill element.
|
203
|
+
write_auto_fill
|
204
|
+
# Write the x:Row element.
|
205
|
+
@writer.data_element('x:Row', row)
|
206
|
+
# Write the x:Column element.
|
207
|
+
@writer.data_element('x:Column', col)
|
208
|
+
# Write the x:Visible element.
|
209
|
+
@writer.empty_tag('x:Visible') if ptrue?(visible)
|
210
|
+
end
|
211
|
+
end
|
212
|
+
|
213
|
+
def writer=(w)
|
214
|
+
@writer = w
|
215
|
+
end
|
120
216
|
end
|
121
217
|
|
122
218
|
class Comments
|