@sswroom/sswr 1.6.13 → 1.6.15

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.
@@ -0,0 +1,1976 @@
1
+ import * as data from "../data.js";
2
+ import * as math from "../math.js";
3
+ import * as spreadsheet from "../spreadsheet.js";
4
+ import * as text from "../text.js";
5
+ import * as unit from "../unit.js";
6
+ import * as zip from "../zip.js";
7
+
8
+ export class XLSXExporter
9
+ {
10
+ constructor()
11
+ {
12
+ }
13
+
14
+ getName()
15
+ {
16
+ return "XLSXExporter";
17
+ }
18
+
19
+ /**
20
+ * @param {data.ParsedObject} pobj
21
+ */
22
+ isObjectSupported(pobj)
23
+ {
24
+ return pobj instanceof spreadsheet.Workbook;
25
+ }
26
+
27
+ getOutputExt()
28
+ {
29
+ return "xlsx";
30
+ }
31
+
32
+ getOutputMIME()
33
+ {
34
+ return "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
35
+ }
36
+
37
+ /**
38
+ * @param {string} fileName
39
+ * @param {data.ParsedObject} pobj
40
+ * @param {any} param
41
+ */
42
+ exportFile(fileName, pobj, param)
43
+ {
44
+ if (!(pobj instanceof spreadsheet.Workbook))
45
+ return null;
46
+ let workbook = pobj;
47
+ let sheet;
48
+ let tmpStyle;
49
+ /** @type {string[]} */
50
+ let sb = [];
51
+ /** @type {string[]} */
52
+ let sbContTypes = [];
53
+ let ts;
54
+ let dt2;
55
+ let t;
56
+ let s;
57
+ let s2;
58
+ let zipFile = new zip.ZIPBuilder(zip.ZIPOS.MSDOS);;
59
+ let i;
60
+ let j;
61
+ let k;
62
+ let l;
63
+ let m;
64
+ let n;
65
+ let drawingCnt = 0;
66
+ let chartCnt = 0;
67
+ let sharedStrings = [];
68
+ let stringMap = {};
69
+ ts = data.Timestamp.now();
70
+
71
+ let dirXl = false;
72
+ let dirXlWs = false;
73
+ let dirXlWsRel = false;
74
+ let dirXlDraw = false;
75
+ let dirXlDrawRel = false;
76
+ let dirXlChart = false;
77
+ let dirRel = false;
78
+ let dirXlRel = false;
79
+
80
+ sbContTypes.push("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
81
+ sbContTypes.push("<Types xmlns=\"http://schemas.openxmlformats.org/package/2006/content-types\">");
82
+ sbContTypes.push("<Default Extension=\"xml\" ContentType=\"application/xml\"/>");
83
+ sbContTypes.push("<Default Extension=\"rels\" ContentType=\"application/vnd.openxmlformats-package.relationships+xml\"/>");
84
+ sbContTypes.push("<Default Extension=\"png\" ContentType=\"image/png\"/>");
85
+ sbContTypes.push("<Default Extension=\"jpeg\" ContentType=\"image/jpeg\"/>");
86
+
87
+ i = 0;
88
+ j = workbook.getCount();
89
+ while (i < j)
90
+ {
91
+ sheet = workbook.getItem(i);
92
+
93
+ /** @type {{row: number,col: number,cell: spreadsheet.CellData}[]} */
94
+ let links = [];
95
+ let link;
96
+
97
+ sb = [];
98
+ sb.push("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n");
99
+ sb.push("<worksheet xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\">");
100
+ sb.push("<sheetPr filterMode=\"false\">");
101
+ sb.push("<pageSetUpPr fitToPage=\"false\"/>");
102
+ sb.push("</sheetPr>");
103
+ sb.push("<dimension ref=\"A1\"/>");
104
+ sb.push("<sheetViews>");
105
+ sb.push("<sheetView showFormulas=\"false\" showGridLines=\"true\" showRowColHeaders=\"true\" showZeros=\"true\" rightToLeft=\"false\" tabSelected=\"true\" showOutlineSymbols=\"true\" defaultGridColor=\"true\" view=\"normal\" topLeftCell=\"A1\" colorId=\"64\" zoomScale=\"");
106
+ sb.push(""+sheet.getZoom());
107
+ sb.push("\" zoomScaleNormal=\"");
108
+ sb.push(""+sheet.getZoom());
109
+ sb.push("\" zoomScalePageLayoutView=\"");
110
+ sb.push(""+sheet.getZoom());
111
+ sb.push("\" workbookViewId=\"0\">");
112
+ sb.push("<selection pane=\"topLeft\" activeCell=\"A1\" activeCellId=\"0\" sqref=\"A1\"/>");
113
+ sb.push("</sheetView>");
114
+ sb.push("</sheetViews>");
115
+ sb.push("<sheetFormatPr defaultColWidth=\"");
116
+ sb.push(""+(sheet.getDefColWidthPt() / 5.25));
117
+ sb.push("\" defaultRowHeight=\"");
118
+ sb.push(""+(sheet.getDefRowHeightPt()));
119
+ sb.push("\" zeroHeight=\"false\" outlineLevelRow=\"0\" outlineLevelCol=\"0\"></sheetFormatPr>");
120
+ sb.push("<cols>");
121
+
122
+ let lastColWidth = -1;
123
+ let lastColIndex = -1;
124
+
125
+ k = 0;
126
+ l = sheet.getColWidthCount();
127
+ while (k < l)
128
+ {
129
+ if (sheet.getColWidthPt(k) != lastColWidth)
130
+ {
131
+ if (lastColIndex != -1)
132
+ {
133
+ sb.push("<col min=\"");
134
+ sb.push(""+(lastColIndex + 10));
135
+ sb.push("\" max=\"");
136
+ sb.push(""+k);
137
+ sb.push("\" width=\"");
138
+ if (lastColWidth >= 0)
139
+ {
140
+ sb.push(""+(lastColWidth / 5.25));
141
+ sb.push("\" customWidth=\"1\"");
142
+ }
143
+ else
144
+ {
145
+ sb.push(""+(sheet.getDefColWidthPt() / 5.25));
146
+ sb.push("\" customWidth=\"false\"");
147
+ }
148
+ sb.push("/>");
149
+ }
150
+ lastColWidth = sheet.getColWidthPt(k);
151
+ lastColIndex = k;
152
+ }
153
+ k++;
154
+ }
155
+ if (lastColWidth >= 0)
156
+ {
157
+ sb.push("<col min=\"");
158
+ sb.push(""+(lastColIndex + 1));
159
+ sb.push("\" max=\"");
160
+ sb.push(""+l);
161
+ sb.push("\" width=\"");
162
+ if (lastColWidth >= 0)
163
+ {
164
+ sb.push(""+(lastColWidth / 5.25));
165
+ sb.push("\" customWidth=\"1\"");
166
+ }
167
+ else
168
+ {
169
+ sb.push(""+(sheet.getDefColWidthPt() / 5.25));
170
+ sb.push("\" customWidth=\"false\"");
171
+ }
172
+ sb.push("/>");
173
+ }
174
+ if (l < sheet.getMaxCol())
175
+ {
176
+ sb.push("<col min=\"");
177
+ sb.push(""+(l + 1));
178
+ sb.push("\" max=\"");
179
+ sb.push(""+(sheet.getMaxCol()));
180
+ sb.push("\" width=\"");
181
+ sb.push(""+(sheet.getDefColWidthPt() / 5.25));
182
+ sb.push("\" customWidth=\"false\" collapsed=\"false\" hidden=\"false\" outlineLevel=\"0\" style=\"0\"/>");
183
+ }
184
+
185
+ sb.push("</cols>");
186
+
187
+ /** @type {math.RectArea[]} */
188
+ let mergeList = [];
189
+ k = 0;
190
+ l = sheet.getCount();
191
+ if (l > 0)
192
+ {
193
+ sb.push("<sheetData>");
194
+ while (k < l)
195
+ {
196
+ let row;
197
+ if ((row = sheet.getItem(k)) != null)
198
+ {
199
+ sb.push("<row r=\"");
200
+ sb.push(""+(k + 1));
201
+ sb.push("\" customFormat=\"false\" ht=\"12.8\" hidden=\"false\" customHeight=\"false\" outlineLevel=\"0\" collapsed=\"false\">");
202
+
203
+ m = 0;
204
+ n = row.cells.length;
205
+ while (m < n)
206
+ {
207
+ let cellValue;
208
+ let cell;
209
+ if ((cell = row.cells[m]) != null && (cellValue = cell.cellValue) != null && cell.cdt != spreadsheet.CellDataType.MergedLeft && cell.cdt != spreadsheet.CellDataType.MergedUp)
210
+ {
211
+ sb.push("<c r=\"");
212
+ sb.push(spreadsheet.Workbook.colCode(m)+(k + 1));
213
+ sb.push('"');
214
+ if ((tmpStyle = cell.style) != null)
215
+ {
216
+ sb.push(" s=\"");
217
+ sb.push(""+tmpStyle.getIndex());
218
+ sb.push('"');
219
+ }
220
+ switch (cell.cdt)
221
+ {
222
+ case spreadsheet.CellDataType.String:
223
+ sb.push(" t=\"s\"");
224
+ break;
225
+ case spreadsheet.CellDataType.Number:
226
+ case spreadsheet.CellDataType.DateTime:
227
+ sb.push(" t=\"n\"");
228
+ break;
229
+ // case spreadsheet.CellDataType.MergedLeft:
230
+ // case spreadsheet.CellDataType.MergedUp:
231
+ // break;
232
+ }
233
+ sb.push("><v>");
234
+ switch (cell.cdt)
235
+ {
236
+ case spreadsheet.CellDataType.String:
237
+ {
238
+ let sIndex = stringMap[cellValue];
239
+ if (sIndex == null)
240
+ {
241
+ sIndex = sharedStrings.length;
242
+ sharedStrings.push(cellValue);
243
+ stringMap[cellValue] = sIndex;
244
+ }
245
+ sb.push(""+sIndex);
246
+ }
247
+ break;
248
+ case spreadsheet.CellDataType.Number:
249
+ sb.push(cellValue);
250
+ break;
251
+ case spreadsheet.CellDataType.DateTime:
252
+ {
253
+ let dt = data.Timestamp.fromStr(cellValue);
254
+ if (dt)
255
+ {
256
+ sb.push(""+spreadsheet.XLSUtil.date2Number(dt));
257
+ }
258
+ }
259
+ break;
260
+ // case spreadsheet.CellDataType.MergedLeft:
261
+ // case spreadsheet.CellDataType.MergedUp:
262
+ // break;
263
+ }
264
+
265
+ if (cell.cellURL != null)
266
+ {
267
+ link = {row: k, col: m, cell: cell};
268
+ links.push(link);
269
+ }
270
+ if (cell.mergeHori > 1 || cell.mergeVert > 1)
271
+ {
272
+ mergeList.push(new math.RectArea(m, k, cell.mergeHori, cell.mergeVert));
273
+ }
274
+
275
+ sb.push("</v></c>");
276
+ }
277
+ else if ((cell = row.cells[m]) != null && (tmpStyle = cell.style) != null)
278
+ {
279
+ sb.push("<c r=\"")
280
+ sb.push(spreadsheet.Workbook.colCode(m) + (k + 1));
281
+ sb.push('"');
282
+ sb.push(" s=\"");
283
+ sb.push(""+tmpStyle.getIndex());
284
+ sb.push('"');
285
+ sb.push("></c>");
286
+ }
287
+ m++;
288
+ }
289
+ sb.push("</row>");
290
+ }
291
+
292
+ k++;
293
+ }
294
+ sb.push("</sheetData>");
295
+
296
+ if (mergeList.length > 0)
297
+ {
298
+ sb.push("<mergeCells count=\"");
299
+ sb.push(""+mergeList.length);
300
+ sb.push("\">");
301
+ k = 0;
302
+ l = mergeList.length;
303
+ while (k < l)
304
+ {
305
+ sb.push("<mergeCell ref=\"");
306
+ let rect = mergeList[k];
307
+ sb.push(spreadsheet.XLSUtil.getCellID(rect.min.x, rect.min.y) + ':' + spreadsheet.XLSUtil.getCellID(rect.max.x - 1, rect.max.y - 1));
308
+ sb.push("\"/>");
309
+ k++;
310
+ }
311
+ sb.push("</mergeCells>");
312
+ }
313
+
314
+ if (links.length > 0)
315
+ {
316
+ let idBase = sheet.getDrawingCount() + 1;
317
+ sb.push("<hyperlinks>");
318
+ m = 0;
319
+ n = links.length;
320
+ while (m < n)
321
+ {
322
+ link = links[m];
323
+ sb.push("<hyperlink ref=\"");
324
+ sb.push(spreadsheet.Workbook.colCode(link.col));
325
+ sb.push(""+(link.row + 1));
326
+ sb.push("\" r:id=\"rId");
327
+ sb.push(""+(idBase + m));
328
+ sb.push("\" display=");
329
+ s = text.toAttrText(link.cell.cellValue||"");
330
+ sb.push(s);
331
+ sb.push("/>");
332
+ m++;
333
+ }
334
+ sb.push("</hyperlinks>");
335
+ }
336
+ }
337
+ else
338
+ {
339
+ sb.push("<sheetData/>");
340
+ }
341
+ //<sheetProtection sheet="true" password="cc1a" objects="true" scenarios="true"/><printOptions headings="false" gridLines="false" gridLinesSet="true" horizontalCentered="false" verticalCentered="false"/>
342
+ sb.push("<pageMargins left=\"");
343
+ sb.push(""+sheet.getMarginLeft());
344
+ sb.push("\" right=\"");
345
+ sb.push(""+sheet.getMarginRight());
346
+ sb.push("\" top=\"");
347
+ sb.push(""+sheet.getMarginTop());
348
+ sb.push("\" bottom=\"");
349
+ sb.push(""+sheet.getMarginBottom());
350
+ sb.push("\" header=\"");
351
+ sb.push(""+sheet.getMarginHeader());
352
+ sb.push("\" footer=\"");
353
+ sb.push(""+sheet.getMarginFooter());
354
+ sb.push("\"/>");
355
+ sb.push("<pageSetup paperSize=\"9\" scale=\"100\" firstPageNumber=\"1\" fitToWidth=\"1\" fitToHeight=\"1\" pageOrder=\"downThenOver\" orientation=\"portrait\" blackAndWhite=\"false\" draft=\"false\" cellComments=\"none\" useFirstPageNumber=\"true\" horizontalDpi=\"300\" verticalDpi=\"300\" copies=\"1\"/>");
356
+ sb.push("<headerFooter differentFirst=\"false\" differentOddEven=\"false\">");
357
+ sb.push("<oddHeader>&amp;C&amp;&quot;Times New Roman,Regular&quot;&amp;12&amp;A</oddHeader>");
358
+ sb.push("<oddFooter>&amp;C&amp;&quot;Times New Roman,Regular&quot;&amp;12Page &amp;P</oddFooter>");
359
+ sb.push("</headerFooter>");
360
+ k = 0;
361
+ l = sheet.getDrawingCount();
362
+ while (k < l)
363
+ {
364
+ sb.push("<drawing r:id=\"rId");
365
+ sb.push(""+(k + 1));
366
+ sb.push("\"/>");
367
+ k++;
368
+ }
369
+ sb.push("</worksheet>");
370
+ if (!dirXl)
371
+ {
372
+ zipFile.addDir("xl/", ts, ts, ts, 0);
373
+ dirXl = true;
374
+ }
375
+ if (!dirXlWs)
376
+ {
377
+ zipFile.addDir("xl/worksheets/", ts, ts, ts, 0);
378
+ dirXlWs = true;
379
+ }
380
+ s = "xl/worksheets/sheet" + (i + 1) + ".xml";
381
+ zipFile.addFile(s, new TextEncoder().encode(sb.join("")), ts, ts, ts, 0);
382
+ sbContTypes.push("<Override PartName=\"/");
383
+ sbContTypes.push(s);
384
+ sbContTypes.push("\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\"/>");
385
+
386
+ if (sheet.getDrawingCount() > 0 || links.length > 0)
387
+ {
388
+ sb = [];
389
+ sb.push("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>");
390
+ sb.push("<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">");
391
+ k = 0;
392
+ l = sheet.getDrawingCount();
393
+ while (k < l)
394
+ {
395
+ sb.push("<Relationship Id=\"rId");
396
+ sb.push(""+(k + 1));
397
+ sb.push("\" Target=\"../drawings/drawing");
398
+ sb.push(""+(k + 1 + drawingCnt));
399
+ sb.push(".xml\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing\"/>");
400
+ k++;
401
+ }
402
+ m = 0;
403
+ n = links.length;
404
+ while (m < n)
405
+ {
406
+ link = links[m];
407
+ sb.push("<Relationship Id=\"rId");
408
+ sb.push(""+(l + m + 1));
409
+ sb.push("\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink\" Target=");
410
+ s = text.toAttrText(link.cell.cellURL || "");
411
+ sb.push(s);
412
+ sb.push(" TargetMode=\"External\"/>");
413
+ m++;
414
+ }
415
+ sb.push("</Relationships>");
416
+
417
+ if (!dirXlWsRel)
418
+ {
419
+ dirXlWsRel = true;
420
+ zipFile.addDir("xl/worksheets/_rels/", ts, ts, ts, 0);
421
+ }
422
+ s = "xl/worksheets/_rels/sheet" + (i + 1) + ".xml.rels";
423
+ zipFile.addFile(s, new TextEncoder().encode(sb.join("")), ts, ts, ts, 0);
424
+ sbContTypes.push("<Override PartName=\"/");
425
+ sbContTypes.push(s);
426
+ sbContTypes.push("\" ContentType=\"application/vnd.openxmlformats-package.relationships+xml\"/>");
427
+
428
+ k = 0;
429
+ l = sheet.getDrawingCount();
430
+ while (k < l)
431
+ {
432
+ let chart;
433
+ let drawing = sheet.getDrawingNoCheck(k);
434
+ sb = [];
435
+ sb.push("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n");
436
+ sb.push("<xdr:wsDr xmlns:xdr=\"http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing\" xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" xmlns:c=\"http://schemas.openxmlformats.org/drawingml/2006/chart\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\">");
437
+ switch (drawing.anchorType)
438
+ {
439
+ case spreadsheet.AnchorType.Absolute:
440
+ sb.push("<xdr:absoluteAnchor>");
441
+ sb.push("<xdr:pos x=\"");
442
+ sb.push(""+ Math.round(unit.Distance.convert(unit.Distance.Unit.INCH, unit.Distance.Unit.EMU, drawing.posXInch)));
443
+ sb.push("\" y=\"");
444
+ sb.push(""+ Math.round(unit.Distance.convert(unit.Distance.Unit.INCH, unit.Distance.Unit.EMU, drawing.posYInch)));
445
+ sb.push("\"/>");
446
+ sb.push("<xdr:ext cx=\"");
447
+ sb.push(""+ Math.round(unit.Distance.convert(unit.Distance.Unit.INCH, unit.Distance.Unit.EMU, drawing.widthInch)));
448
+ sb.push("\" cy=\"");
449
+ sb.push(""+ Math.round(unit.Distance.convert(unit.Distance.Unit.INCH, unit.Distance.Unit.EMU, drawing.heightInch)));
450
+ sb.push("\"/>");
451
+ break;
452
+ case spreadsheet.AnchorType.OneCell:
453
+ sb.push("<xdr:oneCellAnchor>");
454
+ sb.push("<xdr:from>");
455
+ sb.push("<xdr:col>");
456
+ sb.push(""+(drawing.col1 + 1));
457
+ sb.push("</xdr:col>");
458
+ sb.push("<xdr:colOff>");
459
+ sb.push(""+ Math.round(unit.Distance.convert(unit.Distance.Unit.INCH, unit.Distance.Unit.EMU, drawing.posXInch)));
460
+ sb.push("</xdr:colOff>");
461
+ sb.push("<xdr:row>");
462
+ sb.push(""+(drawing.row1 + 1));
463
+ sb.push("</xdr:row>");
464
+ sb.push("<xdr:rowOff>");
465
+ sb.push(""+ Math.round(unit.Distance.convert(unit.Distance.Unit.INCH, unit.Distance.Unit.EMU, drawing.posYInch)));
466
+ sb.push("</xdr:rowOff>");
467
+ sb.push("</xdr:from>");
468
+ sb.push("<xdr:ext cx=\"");
469
+ sb.push(""+ Math.round(unit.Distance.convert(unit.Distance.Unit.INCH, unit.Distance.Unit.EMU, drawing.widthInch)));
470
+ sb.push("\" cy=\"");
471
+ sb.push(""+ Math.round(unit.Distance.convert(unit.Distance.Unit.INCH, unit.Distance.Unit.EMU, drawing.heightInch)));
472
+ sb.push("\"/>");
473
+ break;
474
+ case spreadsheet.AnchorType.TwoCell:
475
+ sb.push("<xdr:twoCellAnchor editAs=\"twoCell\">");
476
+ sb.push("<xdr:from>");
477
+ sb.push("<xdr:col>");
478
+ sb.push(""+(drawing.col1 + 1));
479
+ sb.push("</xdr:col>");
480
+ sb.push("<xdr:colOff>");
481
+ sb.push(""+ Math.round(unit.Distance.convert(unit.Distance.Unit.INCH, unit.Distance.Unit.EMU, drawing.posXInch)));
482
+ sb.push("</xdr:colOff>");
483
+ sb.push("<xdr:row>");
484
+ sb.push(""+(drawing.row1 + 1));
485
+ sb.push("</xdr:row>");
486
+ sb.push("<xdr:rowOff>");
487
+ sb.push(""+ Math.round(unit.Distance.convert(unit.Distance.Unit.INCH, unit.Distance.Unit.EMU, drawing.posYInch)));
488
+ sb.push("</xdr:rowOff>");
489
+ sb.push("</xdr:from>");
490
+ sb.push("<xdr:to>");
491
+ sb.push("<xdr:col>");
492
+ sb.push(""+(drawing.col2 + 1));
493
+ sb.push("</xdr:col>");
494
+ sb.push("<xdr:colOff>");
495
+ sb.push(""+ Math.round(unit.Distance.convert(unit.Distance.Unit.INCH, unit.Distance.Unit.EMU, drawing.widthInch)));
496
+ sb.push("</xdr:colOff>");
497
+ sb.push("<xdr:row>");
498
+ sb.push(""+(drawing.row2 + 1));
499
+ sb.push("</xdr:row>");
500
+ sb.push("<xdr:rowOff>");
501
+ sb.push(""+ Math.round(unit.Distance.convert(unit.Distance.Unit.INCH, unit.Distance.Unit.EMU, drawing.heightInch)));
502
+ sb.push("</xdr:rowOff>");
503
+ sb.push("</xdr:to>");
504
+ break;
505
+ }
506
+ if ((chart = drawing.chart) != null)
507
+ {
508
+ sb.push("<xdr:graphicFrame>");
509
+ sb.push("<xdr:nvGraphicFramePr>");
510
+ sb.push("<xdr:cNvPr id=\"");
511
+ sb.push(""+chartCnt);
512
+ sb.push("\" name=\"Diagramm");
513
+ sb.push(""+chartCnt);
514
+ sb.push("\"/>");
515
+ sb.push("<xdr:cNvGraphicFramePr/>");
516
+ sb.push("</xdr:nvGraphicFramePr>");
517
+ sb.push("<xdr:xfrm>");
518
+ sb.push("<a:off x=\"");
519
+ sb.push(""+ Math.round(unit.Distance.convert(unit.Distance.Unit.INCH, unit.Distance.Unit.EMU, chart.getXInch())));
520
+ sb.push("\" y=\"");
521
+ sb.push(""+ Math.round(unit.Distance.convert(unit.Distance.Unit.INCH, unit.Distance.Unit.EMU, chart.getYInch())));
522
+ sb.push("\"/>");
523
+ sb.push("<a:ext cx=\"");
524
+ sb.push(""+ Math.round(unit.Distance.convert(unit.Distance.Unit.INCH, unit.Distance.Unit.EMU, chart.getWInch())));
525
+ sb.push("\" cy=\"");
526
+ sb.push(""+ Math.round(unit.Distance.convert(unit.Distance.Unit.INCH, unit.Distance.Unit.EMU, chart.getHInch())));
527
+ sb.push("\"/>");
528
+ sb.push("</xdr:xfrm>");
529
+ sb.push("<a:graphic>");
530
+ sb.push("<a:graphicData uri=\"http://schemas.openxmlformats.org/drawingml/2006/chart\">");
531
+ sb.push("<c:chart r:id=\"rId");
532
+ sb.push(""+(chartCnt + 1));
533
+ sb.push("\"/>");
534
+ sb.push("</a:graphicData>");
535
+ sb.push("</a:graphic>");
536
+ sb.push("</xdr:graphicFrame>");
537
+ }
538
+ else
539
+ {
540
+ ///////////////////////////////////////
541
+ }
542
+ sb.push("<xdr:clientData/>");
543
+ switch (drawing.anchorType)
544
+ {
545
+ case spreadsheet.AnchorType.Absolute:
546
+ sb.push("</xdr:absoluteAnchor>");
547
+ break;
548
+ case spreadsheet.AnchorType.OneCell:
549
+ sb.push("</xdr:oneCellAnchor>");
550
+ break;
551
+ case spreadsheet.AnchorType.TwoCell:
552
+ sb.push("</xdr:twoCellAnchor>");
553
+ break;
554
+ }
555
+ sb.push("</xdr:wsDr>");
556
+ drawingCnt++;
557
+ if (!dirXlDraw)
558
+ {
559
+ dirXlDraw = true;
560
+ zipFile.addDir("xl/drawings/", ts, ts, ts, 0);
561
+ }
562
+ s = "xl/drawings/drawing" + drawingCnt +".xml";
563
+ zipFile.addFile(s, new TextEncoder().encode(sb.join("")), ts, ts, ts, 0);
564
+ sbContTypes.push("<Override PartName=\"/");
565
+ sbContTypes.push(s);
566
+ sbContTypes.push("\" ContentType=\"application/vnd.openxmlformats-officedocument.drawing+xml\"/>");
567
+
568
+ if ((chart = drawing.chart) != null)
569
+ {
570
+ sb = [];
571
+ sb.push("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>");
572
+ sb.push("<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">");
573
+ sb.push("<Relationship Id=\"rId1\" Target=\"../charts/chart");
574
+ sb.push(""+(chartCnt + 1));
575
+ sb.push(".xml\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart\"/>");
576
+ sb.push("</Relationships>");
577
+
578
+ if (!dirXlDrawRel)
579
+ {
580
+ dirXlDrawRel = true;
581
+ zipFile.addDir("xl/drawings/_rels/", ts, ts, ts, 0);
582
+ }
583
+ s = "xl/drawings/_rels/drawing"+ drawingCnt+".xml.rels";
584
+ zipFile.addFile(s, new TextEncoder().encode(sb.join("")), ts, ts, ts, 0);
585
+ sbContTypes.push("<Override PartName=\"/");
586
+ sbContTypes.push(s);
587
+ sbContTypes.push("\" ContentType=\"application/vnd.openxmlformats-package.relationships+xml\"/>");
588
+
589
+ chartCnt++;
590
+ sb = [];
591
+ sb.push("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n");
592
+ sb.push("<c:chartSpace xmlns:c=\"http://schemas.openxmlformats.org/drawingml/2006/chart\" xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\">");
593
+ sb.push("<c:chart>");
594
+ if ((s = chart.getTitleText()) != null)
595
+ {
596
+ XLSXExporter.appendTitle(sb, s);
597
+ }
598
+ sb.push("<c:plotArea>");
599
+ sb.push("<c:layout/>");
600
+ if (chart.getChartType() != spreadsheet.ChartType.Unknown)
601
+ {
602
+ let nnaxis;
603
+ switch (chart.getChartType())
604
+ {
605
+ case spreadsheet.ChartType.LineChart:
606
+ sb.push("<c:lineChart>");
607
+ break;
608
+ case spreadsheet.ChartType.Unknown:
609
+ break;
610
+ }
611
+ m = 0;
612
+ n = chart.getSeriesCount();
613
+ while (m < n)
614
+ {
615
+ XLSXExporter.appendSeries(sb, chart.getSeriesNoCheck(m), m);
616
+ m++;
617
+ }
618
+ if ((nnaxis = chart.getCategoryAxis()) != null)
619
+ {
620
+ sb.push("<c:axId val=\"");
621
+ sb.push(""+chart.getAxisIndex(nnaxis));
622
+ sb.push("\"/>");
623
+ }
624
+ if ((nnaxis = chart.getValueAxis()) != null)
625
+ {
626
+ sb.push("<c:axId val=\"");
627
+ sb.push(""+ chart.getAxisIndex(nnaxis));
628
+ sb.push("\"/>");
629
+ }
630
+ switch (chart.getChartType())
631
+ {
632
+ case spreadsheet.ChartType.LineChart:
633
+ sb.push("</c:lineChart>");
634
+ break;
635
+ case spreadsheet.ChartType.Unknown:
636
+ break;
637
+ }
638
+ }
639
+ m = 0;
640
+ n = chart.getAxisCount();
641
+ while (m < n)
642
+ {
643
+ XLSXExporter.appendAxis(sb, chart.getAxis(m), m);
644
+ m++;
645
+ }
646
+ XLSXExporter.appendShapeProp(sb, chart.getShapeProp());
647
+ sb.push("</c:plotArea>");
648
+ if (chart.hasLegend())
649
+ {
650
+ sb.push("<c:legend>");
651
+ sb.push("<c:legendPos val=\"");
652
+ switch (chart.getLegendPos())
653
+ {
654
+ case spreadsheet.LegendPos.Bottom:
655
+ sb.push("b");
656
+ break;
657
+ }
658
+ sb.push("\"/>");
659
+ sb.push("<c:overlay val=\"");
660
+ if (chart.isLegendOverlay())
661
+ {
662
+ sb.push("true");
663
+ }
664
+ else
665
+ {
666
+ sb.push("false");
667
+ }
668
+ sb.push("\"/>");
669
+ sb.push("</c:legend>");
670
+ }
671
+ sb.push("<c:plotVisOnly val=\"true\"/>");
672
+ switch (chart.getDisplayBlankAs())
673
+ {
674
+ case spreadsheet.BlankAs.Default:
675
+ break;
676
+ case spreadsheet.BlankAs.Gap:
677
+ sb.push("<c:dispBlanksAs val=\"gap\"/>");
678
+ break;
679
+ case spreadsheet.BlankAs.Zero:
680
+ sb.push("<c:dispBlanksAs val=\"zero\"/>");
681
+ break;
682
+ }
683
+ sb.push("</c:chart>");
684
+ //////////////////////////////////////
685
+ sb.push("</c:chartSpace>");
686
+
687
+ if (!dirXlChart)
688
+ {
689
+ dirXlChart = true;
690
+ zipFile.addDir("xl/charts/", ts, ts, ts, 0);
691
+ }
692
+ s = "xl/charts/chart" + chartCnt + ".xml";
693
+ zipFile.addFile(s, new TextEncoder().encode(sb.join("")), ts, ts, ts, 0);
694
+ sbContTypes.push("<Override PartName=\"/");
695
+ sbContTypes.push(s);
696
+ sbContTypes.push("\" ContentType=\"application/vnd.openxmlformats-officedocument.drawingml.chart+xml\"/>");
697
+ }
698
+ k++;
699
+ }
700
+ }
701
+ i++;
702
+ }
703
+
704
+ sb = [];
705
+ sb.push("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n");
706
+ sb.push("<workbook xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\">");
707
+ sb.push("<fileVersion appName=\"AVIRead\"/>");
708
+ sb.push("<workbookPr backupFile=\"false\" showObjects=\"all\" date1904=\"false\"/>");
709
+ sb.push("<workbookProtection/>");
710
+ sb.push("<bookViews>");
711
+ sb.push("<workbookView showHorizontalScroll=\"true\" showVerticalScroll=\"true\" showSheetTabs=\"true\" xWindow=\"0\" yWindow=\"0\" windowWidth=\"16384\" windowHeight=\"8192\" tabRatio=\"500\" firstSheet=\"0\" activeTab=\"0\"/>");
712
+ sb.push("</bookViews>");
713
+ sb.push("<sheets>");
714
+ i = 0;
715
+ j = workbook.getCount();
716
+ while (i < j)
717
+ {
718
+ sheet = workbook.getItem(i);
719
+ sb.push("<sheet name=");
720
+ s = sheet.getName();
721
+ s2 = text.toAttrText(s);
722
+ sb.push(s2);
723
+ sb.push(" sheetId=\"");
724
+ sb.push(""+(i + 1));
725
+ sb.push("\" state=\"visible\" r:id=\"rId");
726
+ sb.push(""+(i + 2));
727
+ sb.push("\"/>");
728
+ i++;
729
+ }
730
+ sb.push("</sheets>");
731
+ sb.push("<calcPr iterateCount=\"100\" refMode=\"A1\" iterate=\"false\" iterateDelta=\"0.001\"/>");
732
+ sb.push("</workbook>");
733
+ if (!dirXl)
734
+ {
735
+ zipFile.addDir("xl/", ts, ts, ts, 0);
736
+ dirXl = true;
737
+ }
738
+ zipFile.addFile("xl/workbook.xml", new TextEncoder().encode(sb.join("")), ts, ts, ts, 0);
739
+ sbContTypes.push("<Override PartName=\"/xl/workbook.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\"/>");
740
+
741
+ sb = [];
742
+ sb.push("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
743
+ sb.push("<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">");
744
+ sb.push("<Relationship Id=\"rId1\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument\" Target=\"xl/workbook.xml\"/>");
745
+ sb.push("<Relationship Id=\"rId2\" Type=\"http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties\" Target=\"docProps/core.xml\"/>");
746
+ sb.push("<Relationship Id=\"rId3\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties\" Target=\"docProps/app.xml\"/>");
747
+ sb.push("\n</Relationships>");
748
+ if (!dirRel)
749
+ {
750
+ zipFile.addDir("_rels/", ts, ts, ts, 0);
751
+ dirRel = true;
752
+ }
753
+ zipFile.addFile("_rels/.rels", new TextEncoder().encode(sb.join("")), ts, ts, ts, 0);
754
+ sbContTypes.push("<Override PartName=\"/_rels/.rels\" ContentType=\"application/vnd.openxmlformats-package.relationships+xml\"/>");
755
+
756
+ sb = [];
757
+ sb.push("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\r\n");
758
+ sb.push("<styleSheet xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\">");
759
+ {
760
+ /** @type {{ [x: string]: number; }} */
761
+ let numFmtMap = {};
762
+ /** @type {string[]} */
763
+ let numFmts = [];
764
+ let borders = [];
765
+ let borderNone = new spreadsheet.BorderStyle(0, spreadsheet.BorderType.None);
766
+ let border = {left: borderNone, top: borderNone, right: borderNone, bottom: borderNone};
767
+ borders.push(border);
768
+
769
+ s = "general";
770
+ numFmtMap[s] = numFmts.length;;
771
+ numFmts.push(s);
772
+
773
+ i = 0;
774
+ j = workbook.getStyleCount();
775
+ while (i < j)
776
+ {
777
+ let style = workbook.getStyle(i);
778
+ if (style == null)
779
+ throw new Error("Style is null");
780
+ if ((s = style.getDataFormat()) == null)
781
+ {
782
+ s = "general";
783
+ }
784
+ if (numFmtMap[s] === undefined)
785
+ {
786
+ numFmtMap[s] = numFmts.length;
787
+ numFmts.push(s);
788
+ }
789
+ let borderFound = false;
790
+ k = borders.length;
791
+ while (k-- > 0)
792
+ {
793
+ border = borders[k];
794
+ if (border.left.equals(style.getBorderLeft()) &&
795
+ border.top.equals(style.getBorderTop()) &&
796
+ border.right.equals(style.getBorderRight()) &&
797
+ border.bottom.equals(style.getBorderBottom()))
798
+ {
799
+ borderFound = true;
800
+ break;
801
+ }
802
+ }
803
+ if (!borderFound)
804
+ {
805
+ border = {left: style.getBorderLeft(), top: style.getBorderTop(), right: style.getBorderRight(), bottom: style.getBorderBottom()};
806
+ borders.push(border);
807
+ }
808
+ i++;
809
+ }
810
+ if (numFmts.length > 0)
811
+ {
812
+ sb.push("<numFmts count=\"");
813
+ sb.push(""+numFmts.length);
814
+ sb.push("\">");
815
+ i = 0;
816
+ k = numFmts.length;
817
+ while (i < k)
818
+ {
819
+ sb.push("<numFmt numFmtId=\"");
820
+ sb.push(""+(i + 164));
821
+ sb.push("\" formatCode=");
822
+ s = text.toAttrText(XLSXExporter.toFormatCode(numFmts[i]));
823
+ sb.push(s);
824
+ sb.push("/>");
825
+ i++;
826
+ }
827
+ sb.push("</numFmts>");
828
+ }
829
+ if (workbook.getFontCount() > 0)
830
+ {
831
+ sb.push("<fonts count=\"");
832
+ sb.push(""+workbook.getFontCount());
833
+ sb.push("\">");
834
+ i = 0;
835
+ k = workbook.getFontCount();
836
+ while (i < k)
837
+ {
838
+ let font = workbook.getFontNoCheck(i);
839
+ sb.push("<font>");
840
+ if (font.getSize() != 0)
841
+ {
842
+ sb.push("<sz val=\"");
843
+ sb.push(""+font.getSize());
844
+ sb.push("\"/>");
845
+ }
846
+ if ((s = font.getName()) != null)
847
+ {
848
+ sb.push("<name val=");
849
+ s = text.toAttrText(s);
850
+ sb.push(s);
851
+ sb.push("/>");
852
+ }
853
+ switch (font.getFamily())
854
+ {
855
+ case spreadsheet.FontFamily.NA:
856
+ sb.push("<family val=\"0\"/>");
857
+ break;
858
+ case spreadsheet.FontFamily.Roman:
859
+ sb.push("<family val=\"1\"/>");
860
+ break;
861
+ case spreadsheet.FontFamily.Swiss:
862
+ sb.push("<family val=\"2\"/>");
863
+ break;
864
+ case spreadsheet.FontFamily.Modern:
865
+ sb.push("<family val=\"3\"/>");
866
+ break;
867
+ case spreadsheet.FontFamily.Script:
868
+ sb.push("<family val=\"4\"/>");
869
+ break;
870
+ case spreadsheet.FontFamily.Decorative:
871
+ sb.push("<family val=\"5\"/>");
872
+ break;
873
+ }
874
+ sb.push("</font>");
875
+ i++;
876
+ }
877
+ sb.push("</fonts>");
878
+ }
879
+
880
+ sb.push("<fills count=\"2\">");
881
+ sb.push("<fill>");
882
+ sb.push("<patternFill patternType=\"none\"/>");
883
+ sb.push("</fill>");
884
+ sb.push("<fill>");
885
+ sb.push("<patternFill patternType=\"gray125\"/>");
886
+ sb.push("</fill>");
887
+ sb.push("</fills>");
888
+
889
+ i = 0;
890
+ k = borders.length;
891
+ sb.push("<borders count=\"");
892
+ sb.push(""+k);
893
+ sb.push("\">");
894
+ while (i < k)
895
+ {
896
+ border = borders[i];
897
+ sb.push("<border diagonalUp=\"false\" diagonalDown=\"false\">");
898
+ XLSXExporter.appendBorder(sb, border.left, "left");
899
+ XLSXExporter.appendBorder(sb, border.right, "right");
900
+ XLSXExporter.appendBorder(sb, border.top, "top");
901
+ XLSXExporter.appendBorder(sb, border.bottom, "bottom");
902
+ sb.push("<diagonal/>");
903
+ sb.push("</border>");
904
+ i++;
905
+ }
906
+ sb.push("</borders>");
907
+
908
+ sb.push("<cellStyleXfs count=\"20\">");
909
+ sb.push("<xf numFmtId=\"164\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"true\" applyBorder=\"true\" applyAlignment=\"true\" applyProtection=\"true\">");
910
+ sb.push("<alignment horizontal=\"general\" vertical=\"bottom\" textRotation=\"0\" wrapText=\"false\" indent=\"0\" shrinkToFit=\"false\"/>");
911
+ sb.push("<protection locked=\"true\" hidden=\"false\"/>");
912
+ sb.push("</xf>");
913
+ sb.push("<xf numFmtId=\"1\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"true\" applyBorder=\"false\" applyAlignment=\"false\" applyProtection=\"false\">");
914
+ sb.push("</xf>");
915
+ sb.push("<xf numFmtId=\"1\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"true\" applyBorder=\"false\" applyAlignment=\"false\" applyProtection=\"false\">");
916
+ sb.push("</xf>");
917
+ sb.push("<xf numFmtId=\"2\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"true\" applyBorder=\"false\" applyAlignment=\"false\" applyProtection=\"false\">");
918
+ sb.push("</xf>");
919
+ sb.push("<xf numFmtId=\"2\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"true\" applyBorder=\"false\" applyAlignment=\"false\" applyProtection=\"false\">");
920
+ sb.push("</xf>");
921
+ sb.push("<xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"true\" applyBorder=\"false\" applyAlignment=\"false\" applyProtection=\"false\">");
922
+ sb.push("</xf>");
923
+ sb.push("<xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"true\" applyBorder=\"false\" applyAlignment=\"false\" applyProtection=\"false\">");
924
+ sb.push("</xf>");
925
+ sb.push("<xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"true\" applyBorder=\"false\" applyAlignment=\"false\" applyProtection=\"false\">");
926
+ sb.push("</xf>");
927
+ sb.push("<xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"true\" applyBorder=\"false\" applyAlignment=\"false\" applyProtection=\"false\">");
928
+ sb.push("</xf>");
929
+ sb.push("<xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"true\" applyBorder=\"false\" applyAlignment=\"false\" applyProtection=\"false\">");
930
+ sb.push("</xf>");
931
+ sb.push("<xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"true\" applyBorder=\"false\" applyAlignment=\"false\" applyProtection=\"false\">");
932
+ sb.push("</xf>");
933
+ sb.push("<xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"true\" applyBorder=\"false\" applyAlignment=\"false\" applyProtection=\"false\">");
934
+ sb.push("</xf>");
935
+ sb.push("<xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"true\" applyBorder=\"false\" applyAlignment=\"false\" applyProtection=\"false\">");
936
+ sb.push("</xf>");
937
+ sb.push("<xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"true\" applyBorder=\"false\" applyAlignment=\"false\" applyProtection=\"false\">");
938
+ sb.push("</xf>");
939
+ sb.push("<xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"true\" applyBorder=\"false\" applyAlignment=\"false\" applyProtection=\"false\">");
940
+ sb.push("</xf>");
941
+ sb.push("<xf numFmtId=\"43\" fontId=\"1\" fillId=\"0\" borderId=\"0\" applyFont=\"true\" applyBorder=\"false\" applyAlignment=\"false\" applyProtection=\"false\">");
942
+ sb.push("</xf>");
943
+ sb.push("<xf numFmtId=\"41\" fontId=\"1\" fillId=\"0\" borderId=\"0\" applyFont=\"true\" applyBorder=\"false\" applyAlignment=\"false\" applyProtection=\"false\">");
944
+ sb.push("</xf>");
945
+ sb.push("<xf numFmtId=\"44\" fontId=\"1\" fillId=\"0\" borderId=\"0\" applyFont=\"true\" applyBorder=\"false\" applyAlignment=\"false\" applyProtection=\"false\">");
946
+ sb.push("</xf>");
947
+ sb.push("<xf numFmtId=\"42\" fontId=\"1\" fillId=\"0\" borderId=\"0\" applyFont=\"true\" applyBorder=\"false\" applyAlignment=\"false\" applyProtection=\"false\">");
948
+ sb.push("</xf>");
949
+ sb.push("<xf numFmtId=\"9\" fontId=\"1\" fillId=\"0\" borderId=\"0\" applyFont=\"true\" applyBorder=\"false\" applyAlignment=\"false\" applyProtection=\"false\">");
950
+ sb.push("</xf>");
951
+ sb.push("</cellStyleXfs>");
952
+
953
+ if (workbook.getStyleCount() > 0)
954
+ {
955
+ sb.push("<cellXfs count=\"");
956
+ sb.push(""+workbook.getStyleCount());
957
+ sb.push("\">");
958
+ i = 0;
959
+ k = workbook.getStyleCount();
960
+ while (i < k)
961
+ {
962
+ let style;
963
+ if ((style = workbook.getStyle(i)) != null)
964
+ {
965
+ XLSXExporter.appendXF(sb, style, borders, workbook, numFmtMap);
966
+ }
967
+ i++;
968
+ }
969
+ sb.push("</cellXfs>");
970
+ }
971
+
972
+ sb.push("<cellStyles count=\"6\">");
973
+ sb.push("<cellStyle name=\"Normal\" xfId=\"0\" builtinId=\"0\"/>");
974
+ sb.push("<cellStyle name=\"Comma\" xfId=\"15\" builtinId=\"3\"/>");
975
+ sb.push("<cellStyle name=\"Comma [0]\" xfId=\"16\" builtinId=\"6\"/>");
976
+ sb.push("<cellStyle name=\"Currency\" xfId=\"17\" builtinId=\"4\"/>");
977
+ sb.push("<cellStyle name=\"Currency [0]\" xfId=\"18\" builtinId=\"7\"/>");
978
+ sb.push("<cellStyle name=\"Percent\" xfId=\"19\" builtinId=\"5\"/>");
979
+ sb.push("</cellStyles>");
980
+ }
981
+ sb.push("</styleSheet>");
982
+ zipFile.addFile("xl/styles.xml", new TextEncoder().encode(sb.join("")), ts, ts, ts, 0);
983
+ sbContTypes.push("<Override PartName=\"/xl/styles.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\"/>");
984
+
985
+ if (sharedStrings.length > 0)
986
+ {
987
+ sb = [];
988
+ sb.push("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\r\n");
989
+ sb.push("<sst xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" count=\"");
990
+ sb.push(""+sharedStrings.length);
991
+ sb.push("\" uniqueCount=\"");
992
+ sb.push(""+sharedStrings.length);
993
+ sb.push("\">");
994
+ i = 0;
995
+ k = sharedStrings.length;
996
+ while (i < k)
997
+ {
998
+ sb.push("<si><t xml:space=\"preserve\">");
999
+ s = text.toXMLText(sharedStrings[i]);
1000
+ sb.push(s);
1001
+ sb.push("</t></si>");
1002
+ i++;
1003
+ }
1004
+ sb.push("</sst>");
1005
+ zipFile.addFile("xl/sharedStrings.xml", new TextEncoder().encode(sb.join("")), ts, ts, ts,0);
1006
+ sbContTypes.push("<Override PartName=\"/xl/sharedStrings.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml\"/>");
1007
+ }
1008
+
1009
+ sb = [];
1010
+ sb.push("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
1011
+ sb.push("<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">");
1012
+ sb.push("<Relationship Id=\"rId1\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles\" Target=\"styles.xml\"/>");
1013
+ i = 0;
1014
+ k = workbook.getCount();
1015
+ while (i < k)
1016
+ {
1017
+ sb.push("<Relationship Id=\"rId");
1018
+ sb.push(""+(i + 2));
1019
+ sb.push("\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet\" Target=\"worksheets/sheet");
1020
+ sb.push(""+(i + 1));
1021
+ sb.push(".xml\"/>");
1022
+ i++;
1023
+ }
1024
+ if (sharedStrings.length > 0)
1025
+ {
1026
+ sb.push("<Relationship Id=\"rId");
1027
+ sb.push(""+(workbook.getCount() + 2));
1028
+ sb.push("\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings\" Target=\"sharedStrings.xml\"/>");
1029
+ }
1030
+ sb.push("\n</Relationships>");
1031
+ if (!dirXlRel)
1032
+ {
1033
+ dirXlRel = true;
1034
+ zipFile.addDir("xl/_rels/", ts, ts, ts, 0);
1035
+ }
1036
+ zipFile.addFile("xl/_rels/workbook.xml.rels", new TextEncoder().encode(sb.join("")), ts, ts, ts, 0);
1037
+ sbContTypes.push("<Override PartName=\"/xl/_rels/workbook.xml.rels\" ContentType=\"application/vnd.openxmlformats-package.relationships+xml\"/>");
1038
+
1039
+ sb = [];
1040
+ sb.push("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n");
1041
+ sb.push("<cp:coreProperties xmlns:cp=\"http://schemas.openxmlformats.org/package/2006/metadata/core-properties\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:dcterms=\"http://purl.org/dc/terms/\" xmlns:dcmitype=\"http://purl.org/dc/dcmitype/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">");
1042
+ sb.push("<dcterms:created xsi:type=\"dcterms:W3CDTF\">");
1043
+ t = workbook.getCreateTime();
1044
+ if (t)
1045
+ {
1046
+ sb.push(t.toString("yyyy-MM-dd"));
1047
+ sb.push('T');
1048
+ sb.push(t.toString("HH:mm:ss"));
1049
+ sb.push('Z');
1050
+ }
1051
+ sb.push("</dcterms:created>");
1052
+ sb.push("<dc:creator>");
1053
+ if ((s = workbook.getAuthor()) != null)
1054
+ {
1055
+ s = text.toXMLText(s);
1056
+ sb.push(s);
1057
+ }
1058
+ sb.push("</dc:creator>");
1059
+ sb.push("<dc:description>");
1060
+ if (false)
1061
+ {
1062
+ s = text.toXMLText(s);
1063
+ sb.push(s);
1064
+ }
1065
+ sb.push("</dc:description>");
1066
+ sb.push("<dc:language>");
1067
+ /* UInt32 lcid = text.EncodingFactory.GetSystemLCID();
1068
+ NN<Text.Locale.LocaleEntry> loc;
1069
+ if (Text.Locale.GetLocaleEntry(lcid).SetTo(loc))
1070
+ {
1071
+ s = Text.XML.ToNewXMLText(loc.shortName);
1072
+ sb.Append(s);
1073
+ s.Release();
1074
+ }*/
1075
+ sb.push("</dc:language>");
1076
+ sb.push("<cp:lastModifiedBy>");
1077
+ if ((s = workbook.getLastAuthor()) != null)
1078
+ {
1079
+ s = text.toXMLText(s);
1080
+ sb.push(s);
1081
+ }
1082
+ sb.push("</cp:lastModifiedBy>");
1083
+ sb.push("<dcterms:modified xsi:type=\"dcterms:W3CDTF\">");
1084
+ t = workbook.getModifyTime();
1085
+ if (t)
1086
+ {
1087
+ sb.push(t.toString("yyyy-MM-dd"));
1088
+ sb.push('T');
1089
+ sb.push(t.toString("HH:mm:ss"));
1090
+ sb.push('Z');
1091
+ }
1092
+ sb.push("</dcterms:modified>");
1093
+ sb.push("<cp:revision>");
1094
+ sb.push(""+1);
1095
+ sb.push("</cp:revision>");
1096
+ sb.push("<dc:subject>");
1097
+ if (false)
1098
+ {
1099
+ s = text.toXMLText(s);
1100
+ sb.push(s);
1101
+ }
1102
+ sb.push("</dc:subject>");
1103
+ sb.push("<dc:title>");
1104
+ if (false)
1105
+ {
1106
+ s = text.toXMLText(s);
1107
+ sb.push(s);
1108
+ }
1109
+ sb.push("</dc:title>");
1110
+ sb.push("</cp:coreProperties>");
1111
+ zipFile.addDir("docProps/", ts, ts, ts, 0);
1112
+ zipFile.addFile("docProps/core.xml", new TextEncoder().encode(sb.join("")), ts, ts, ts, 0);
1113
+ sbContTypes.push("<Override PartName=\"/docProps/core.xml\" ContentType=\"application/vnd.openxmlformats-package.core-properties+xml\"/>");
1114
+
1115
+ sb = [];
1116
+ sb.push("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n");
1117
+ sb.push("<Properties xmlns=\"http://schemas.openxmlformats.org/officeDocument/2006/extended-properties\" xmlns:vt=\"http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes\">");
1118
+ sb.push("<Template></Template>");
1119
+ sb.push("<TotalTime>1</TotalTime>");
1120
+ sb.push("<Application>");
1121
+ sb.push("AVIRead/1.0");
1122
+ sb.push("</Application>");
1123
+ sb.push("</Properties>");
1124
+ zipFile.addFile("docProps/app.xml", new TextEncoder().encode(sb.join("")), ts, ts, ts, 0);
1125
+ sbContTypes.push("<Override PartName=\"/docProps/app.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.extended-properties+xml\"/>");
1126
+
1127
+ sbContTypes.push("\n</Types>");
1128
+ zipFile.addFile("[Content_Types].xml", new TextEncoder().encode(sbContTypes.join("")), ts, ts, ts, 0);
1129
+ return zipFile.finalize();
1130
+ }
1131
+
1132
+ /**
1133
+ * @param {string[]} sb
1134
+ * @param {spreadsheet.OfficeFill|null} fill
1135
+ */
1136
+ static appendFill(sb, fill)
1137
+ {
1138
+ let color;
1139
+ if (fill == null)
1140
+ return;
1141
+ switch (fill.getFillType())
1142
+ {
1143
+ case spreadsheet.FillType.SolidFill:
1144
+ if ((color = fill.getColor()) == null)
1145
+ {
1146
+ sb.push("<a:solidFill/>");
1147
+ }
1148
+ else
1149
+ {
1150
+ sb.push("<a:solidFill>");
1151
+ if (color.getColorType() == spreadsheet.ColorType.Preset)
1152
+ {
1153
+ sb.push("<a:prstClr val=\"");
1154
+ sb.push(XLSXExporter.presetColorCode(color.getPresetColor()));
1155
+ sb.push("\"/>");
1156
+ }
1157
+ sb.push("</a:solidFill>");
1158
+ }
1159
+ break;
1160
+ }
1161
+ }
1162
+
1163
+ /**
1164
+ * @param {string[]} sb
1165
+ * @param {spreadsheet.OfficeLineStyle|null} lineStyle
1166
+ */
1167
+ static appendLineStyle(sb, lineStyle)
1168
+ {
1169
+ if (lineStyle == null)
1170
+ return;
1171
+ sb.push("<a:ln>");
1172
+ XLSXExporter.appendFill(sb, lineStyle.getFillStyle());
1173
+ sb.push("</a:ln>");
1174
+ }
1175
+
1176
+ /**
1177
+ * @param {string[]} sb
1178
+ * @param {string} title
1179
+ */
1180
+ static appendTitle(sb, title)
1181
+ {
1182
+ sb.push("<c:title>");
1183
+ sb.push("<c:tx>");
1184
+ sb.push("<c:rich>");
1185
+ sb.push("<a:bodyPr anchor=\"t\" rtlCol=\"false\"/>");
1186
+ sb.push("<a:lstStyle/>");
1187
+ sb.push("<a:p>");
1188
+ sb.push("<a:pPr algn=\"l\">");
1189
+ sb.push("<a:defRPr/>");
1190
+ sb.push("</a:pPr>");
1191
+ sb.push("<a:r>");
1192
+ sb.push("<a:rPr lang=\"en-HK\"/>");
1193
+ sb.push("<a:t>");
1194
+ let s = text.toXMLText(title);
1195
+ sb.push(s)
1196
+ sb.push("</a:t>");
1197
+ sb.push("</a:r>");
1198
+ sb.push("<a:endParaRPr lang=\"en-US\" sz=\"1100\"/>");
1199
+ sb.push("</a:p>");
1200
+ sb.push("</c:rich>");
1201
+ sb.push("</c:tx>");
1202
+ sb.push("<c:layout/>");
1203
+ sb.push("</c:title>");
1204
+ }
1205
+
1206
+ /**
1207
+ * @param {string[]} sb
1208
+ * @param {spreadsheet.OfficeShapeProp | null} shapeProp
1209
+ */
1210
+ static appendShapeProp(sb, shapeProp)
1211
+ {
1212
+ if (shapeProp == null)
1213
+ return;
1214
+ sb.push("<c:spPr>");
1215
+ XLSXExporter.appendFill(sb, shapeProp.getFill());
1216
+ XLSXExporter.appendLineStyle(sb, shapeProp.getLineStyle());
1217
+ sb.push("</c:spPr>");
1218
+ }
1219
+
1220
+ /**
1221
+ * @param {string[]} sb
1222
+ * @param {spreadsheet.OfficeChartAxis | null} axis
1223
+ * @param {number} index
1224
+ */
1225
+ static appendAxis(sb, axis, index)
1226
+ {
1227
+ if (axis == null)
1228
+ return;
1229
+ let s;
1230
+ switch (axis.getAxisType())
1231
+ {
1232
+ case spreadsheet.AxisType.Category:
1233
+ sb.push("<c:catAx>");
1234
+ break;
1235
+ case spreadsheet.AxisType.Date:
1236
+ sb.push("<c:dateAx>");
1237
+ break;
1238
+ case spreadsheet.AxisType.Numeric:
1239
+ sb.push("<c:valAx>");
1240
+ break;
1241
+ case spreadsheet.AxisType.Series:
1242
+ sb.push("<c:serAx>");
1243
+ break;
1244
+ }
1245
+ sb.push("<c:axId val=\"");
1246
+ sb.push(""+index);
1247
+ sb.push("\"/>");
1248
+ sb.push("<c:scaling>");
1249
+ sb.push("<c:orientation val=\"minMax\"/>");
1250
+ sb.push("</c:scaling>");
1251
+ sb.push("<c:delete val=\"false\"/>");
1252
+ switch (axis.getAxisPos())
1253
+ {
1254
+ case spreadsheet.AxisPosition.Left:
1255
+ sb.push("<c:axPos val=\"l\"/>");
1256
+ break;
1257
+ case spreadsheet.AxisPosition.Top:
1258
+ sb.push("<c:axPos val=\"t\"/>");
1259
+ break;
1260
+ case spreadsheet.AxisPosition.Right:
1261
+ sb.push("<c:axPos val=\"r\"/>");
1262
+ break;
1263
+ case spreadsheet.AxisPosition.Bottom:
1264
+ sb.push("<c:axPos val=\"b\"/>");
1265
+ break;
1266
+ }
1267
+ if (axis.getMajorGridProp())
1268
+ {
1269
+ sb.push("<c:majorGridlines>");
1270
+ XLSXExporter.appendShapeProp(sb, axis.getMajorGridProp());
1271
+ sb.push("</c:majorGridlines>");
1272
+ }
1273
+ if ((s = axis.getTitle()) != null)
1274
+ {
1275
+ XLSXExporter.appendTitle(sb, s);
1276
+ }
1277
+ sb.push("<c:majorTickMark val=\"cross\"/>");
1278
+ sb.push("<c:minorTickMark val=\"none\"/>");
1279
+ switch (axis.getTickLblPos())
1280
+ {
1281
+ case spreadsheet.TickLabelPosition.High:
1282
+ sb.push("<c:tickLblPos val=\"high\"/>");
1283
+ break;
1284
+ case spreadsheet.TickLabelPosition.Low:
1285
+ sb.push("<c:tickLblPos val=\"low\"/>");
1286
+ break;
1287
+ case spreadsheet.TickLabelPosition.NextTo:
1288
+ sb.push("<c:tickLblPos val=\"nextTo\"/>");
1289
+ break;
1290
+ case spreadsheet.TickLabelPosition.None:
1291
+ sb.push("<c:tickLblPos val=\"none\"/>");
1292
+ break;
1293
+ }
1294
+ XLSXExporter.appendShapeProp(sb, axis.getShapeProp());
1295
+ // sb.push("<c:crossAx val=\"1\"/>");
1296
+ sb.push("<c:crosses val=\"autoZero\"/>");
1297
+ sb.push("<c:crossBetween val=\"midCat\"/>");
1298
+ switch (axis.getAxisType())
1299
+ {
1300
+ case spreadsheet.AxisType.Category:
1301
+ sb.push("</c:catAx>");
1302
+ break;
1303
+ case spreadsheet.AxisType.Date:
1304
+ sb.push("</c:dateAx>");
1305
+ break;
1306
+ case spreadsheet.AxisType.Numeric:
1307
+ sb.push("</c:valAx>");
1308
+ break;
1309
+ case spreadsheet.AxisType.Series:
1310
+ sb.push("</c:serAx>");
1311
+ break;
1312
+ }
1313
+ }
1314
+
1315
+ /**
1316
+ * @param {string[]} sb
1317
+ * @param {spreadsheet.OfficeChartSeries} series
1318
+ * @param {number} index
1319
+ */
1320
+ static appendSeries(sb, series, index)
1321
+ {
1322
+ let s;
1323
+ sb.push("<c:ser>");
1324
+ sb.push("<c:idx val=\"");
1325
+ sb.push(""+index);
1326
+ sb.push("\"/>");
1327
+ sb.push("<c:order val=\"");
1328
+ sb.push(""+index);
1329
+ sb.push("\"/>");
1330
+ if ((s = series.getTitle()) != null)
1331
+ {
1332
+ sb.push("<c:tx>");
1333
+ sb.push("<c:v>");
1334
+ s = text.toXMLText(s);
1335
+ sb.push(s);
1336
+ sb.push("</c:v>");
1337
+ sb.push("</c:tx>");
1338
+ }
1339
+ XLSXExporter.appendShapeProp(sb, series.getShapeProp());
1340
+ sb.push("<c:marker>");
1341
+ switch (series.getMarkerStyle())
1342
+ {
1343
+ case spreadsheet.MarkerStyle.Circle:
1344
+ sb.push("<c:symbol val=\"circle\"/>");
1345
+ break;
1346
+ case spreadsheet.MarkerStyle.Dash:
1347
+ sb.push("<c:symbol val=\"dash\"/>");
1348
+ break;
1349
+ case spreadsheet.MarkerStyle.Diamond:
1350
+ sb.push("<c:symbol val=\"diamond\"/>");
1351
+ break;
1352
+ case spreadsheet.MarkerStyle.Dot:
1353
+ sb.push("<c:symbol val=\"dot\"/>");
1354
+ break;
1355
+ case spreadsheet.MarkerStyle.None:
1356
+ sb.push("<c:symbol val=\"none\"/>");
1357
+ break;
1358
+ case spreadsheet.MarkerStyle.Picture:
1359
+ sb.push("<c:symbol val=\"picture\"/>");
1360
+ break;
1361
+ case spreadsheet.MarkerStyle.Plus:
1362
+ sb.push("<c:symbol val=\"plus\"/>");
1363
+ break;
1364
+ case spreadsheet.MarkerStyle.Square:
1365
+ sb.push("<c:symbol val=\"square\"/>");
1366
+ break;
1367
+ case spreadsheet.MarkerStyle.Star:
1368
+ sb.push("<c:symbol val=\"star\"/>");
1369
+ break;
1370
+ case spreadsheet.MarkerStyle.Triangle:
1371
+ sb.push("<c:symbol val=\"triangle\"/>");
1372
+ break;
1373
+ case spreadsheet.MarkerStyle.X:
1374
+ sb.push("<c:symbol val=\"x\"/>");
1375
+ break;
1376
+ }
1377
+ if (series.getMarkerSize() != 0)
1378
+ {
1379
+ sb.push("<c:size val=\"");
1380
+ sb.push(""+series.getMarkerSize());
1381
+ sb.push("\"/>");
1382
+ }
1383
+ sb.push("</c:marker>");
1384
+
1385
+ let catData = series.getCategoryData();
1386
+ sb.push("<c:cat>");
1387
+ sb.push("<c:strRef>");
1388
+ sb.push("<c:f>");
1389
+ s = text.toXMLText(catData.toCodeRange());
1390
+ sb.push(s);
1391
+ sb.push("</c:f>");
1392
+ sb.push("<c:strCache/>");
1393
+ sb.push("</c:strRef>");
1394
+ sb.push("</c:cat>");
1395
+
1396
+ let valData = series.getValueData();
1397
+ sb.push("<c:val>");
1398
+ sb.push("<c:numRef>");
1399
+ sb.push("<c:f>");
1400
+ s = text.toXMLText(valData.toCodeRange());
1401
+ sb.push(s);
1402
+ sb.push("</c:f>");
1403
+ let firstRow = valData.getFirstRow();
1404
+ let lastRow = valData.getLastRow();
1405
+ let firstCol = valData.getFirstCol();
1406
+ let lastCol = valData.getLastCol();
1407
+ if (firstRow == lastRow)
1408
+ {
1409
+ let sheet = valData.getSheet();
1410
+ sb.push("<c:numCache>");
1411
+ sb.push("<c:ptCount val=\"");
1412
+ sb.push(""+(lastCol - firstCol + 1));
1413
+ sb.push("\"/>");
1414
+ let row;
1415
+ let cell;
1416
+ let cellValue;
1417
+ let i;
1418
+ if ((row = sheet.getItem(firstRow)) != null)
1419
+ {
1420
+ i = firstCol;
1421
+ while (i <= lastCol)
1422
+ {
1423
+ if ((cell = row.cells[i]) != null && (cellValue = cell.cellValue) != null && (cell.cdt == spreadsheet.CellDataType.DateTime || cell.cdt == spreadsheet.CellDataType.Number))
1424
+ {
1425
+ sb.push("<c:pt idx=\"");
1426
+ sb.push(""+(i - firstCol));
1427
+ sb.push("\"><c:v>");
1428
+ sb.push(cellValue);
1429
+ sb.push("</c:v></c:pt>");
1430
+ }
1431
+ i++;
1432
+ }
1433
+ }
1434
+ sb.push("</c:numCache>");
1435
+ }
1436
+ else if (firstCol == lastCol)
1437
+ {
1438
+ let sheet = valData.getSheet();
1439
+ sb.push("<c:numCache>");
1440
+ sb.push("<c:ptCount val=\"");
1441
+ sb.push(""+(lastRow - firstRow + 1));
1442
+ sb.push("\"/>");
1443
+ let row;
1444
+ let cell;
1445
+ let cellValue;
1446
+ let i;
1447
+ i = firstRow;
1448
+ while (i <= lastRow)
1449
+ {
1450
+ if ((row = sheet.getItem(i)) != null)
1451
+ {
1452
+ if ((cell = row.cells[firstCol]) != null && (cellValue = cell.cellValue) != null && (cell.cdt == spreadsheet.CellDataType.DateTime || cell.cdt == spreadsheet.CellDataType.Number))
1453
+ {
1454
+ sb.push("<c:pt idx=\"");
1455
+ sb.push(""+(i - firstRow));
1456
+ sb.push("\"><c:v>");
1457
+ sb.push(cellValue);
1458
+ sb.push("</c:v></c:pt>");
1459
+ }
1460
+ i++;
1461
+ }
1462
+ i++;
1463
+ }
1464
+ sb.push("</c:numCache>");
1465
+ }
1466
+ else
1467
+ {
1468
+ sb.push("<c:numCache/>");
1469
+ }
1470
+ sb.push("</c:numRef>");
1471
+ sb.push("</c:val>");
1472
+
1473
+ sb.push("<c:smooth val=\"");
1474
+ if (series.isSmooth())
1475
+ sb.push("true");
1476
+ else
1477
+ sb.push("false");
1478
+ sb.push("\"/>");
1479
+ sb.push("</c:ser>");
1480
+ }
1481
+
1482
+ /**
1483
+ * @param {string[]} sb
1484
+ * @param {spreadsheet.BorderStyle} border
1485
+ * @param {string} name
1486
+ */
1487
+ static appendBorder(sb, border, name)
1488
+ {
1489
+ sb.push('<');
1490
+ sb.push(name);
1491
+ if (border.borderType == spreadsheet.BorderType.None)
1492
+ {
1493
+ sb.push("/>");
1494
+ }
1495
+ else
1496
+ {
1497
+ switch (border.borderType)
1498
+ {
1499
+ case spreadsheet.BorderType.Thin:
1500
+ sb.push(" style=\"thin\">");
1501
+ break;
1502
+ case spreadsheet.BorderType.Medium:
1503
+ sb.push(" style=\"medium\">");
1504
+ break;
1505
+ case spreadsheet.BorderType.Dashed:
1506
+ sb.push(" style=\"dashed\">");
1507
+ break;
1508
+ case spreadsheet.BorderType.Dotted:
1509
+ sb.push(" style=\"dotted\">");
1510
+ break;
1511
+ case spreadsheet.BorderType.Thick:
1512
+ sb.push(" style=\"thick\">");
1513
+ break;
1514
+ case spreadsheet.BorderType.DOUBLE:
1515
+ sb.push(" style=\"double\">");
1516
+ break;
1517
+ case spreadsheet.BorderType.Hair:
1518
+ sb.push(" style=\"hair\">");
1519
+ break;
1520
+ case spreadsheet.BorderType.MediumDashed:
1521
+ sb.push(" style=\"mediumDashed\">");
1522
+ break;
1523
+ case spreadsheet.BorderType.DashDot:
1524
+ sb.push(" style=\"dashDot\">");
1525
+ break;
1526
+ case spreadsheet.BorderType.MediumDashDot:
1527
+ sb.push(" style=\"mediumDashDot\">");
1528
+ break;
1529
+ case spreadsheet.BorderType.DashDotDot:
1530
+ sb.push(" style=\"dashDotDot\">");
1531
+ break;
1532
+ case spreadsheet.BorderType.MediumDashDotDot:
1533
+ sb.push(" style=\"mediumDashDotDot\">");
1534
+ break;
1535
+ case spreadsheet.BorderType.SlantedDashDot:
1536
+ sb.push(" style=\"slantDashDot\">");
1537
+ break;
1538
+ // case spreadsheet.BorderType.None:
1539
+ // break;
1540
+ }
1541
+ sb.push("<color rgb=\"");
1542
+ sb.push(text.toHex32(border.borderColor));
1543
+ sb.push("\"/>");
1544
+ sb.push("</");
1545
+ sb.push(name);
1546
+ sb.push('>');
1547
+ }
1548
+ }
1549
+
1550
+ /**
1551
+ * @param {string[]} sb
1552
+ * @param {spreadsheet.CellStyle} style
1553
+ * @param {{ left: spreadsheet.BorderStyle; top: spreadsheet.BorderStyle; right: spreadsheet.BorderStyle; bottom: spreadsheet.BorderStyle; }[]} borders
1554
+ * @param {spreadsheet.Workbook} workbook
1555
+ * @param {{ [x: string]: number; }} numFmtMap
1556
+ */
1557
+ static appendXF(sb, style, borders, workbook, numFmtMap)
1558
+ {
1559
+ let k;
1560
+ let s;
1561
+ let border;
1562
+ let font = style.getFont();
1563
+ if ((s = style.getDataFormat()) == null)
1564
+ {
1565
+ s = "general";
1566
+ }
1567
+ sb.push("<xf numFmtId=\"");
1568
+ sb.push(""+(Number(numFmtMap[s]) + 164));
1569
+ sb.push("\" fontId=\"");
1570
+ if (font == null)
1571
+ {
1572
+ sb.push('0');
1573
+ }
1574
+ else
1575
+ {
1576
+ sb.push(""+workbook.getFontIndex(font));
1577
+ }
1578
+ sb.push("\" fillId=\"0\" borderId=\"");
1579
+ k = borders.length;
1580
+ while (k-- > 0)
1581
+ {
1582
+ border = borders[k];
1583
+ if (border.left.equals(style.getBorderLeft()) &&
1584
+ border.top.equals(style.getBorderTop()) &&
1585
+ border.right.equals(style.getBorderRight()) &&
1586
+ border.bottom.equals(style.getBorderBottom()))
1587
+ {
1588
+ break;
1589
+ }
1590
+ }
1591
+ if (k == -1)
1592
+ {
1593
+ k = 0;
1594
+ }
1595
+ sb.push(""+k);
1596
+ sb.push("\" xfId=\"0\" applyFont=\"");
1597
+ if (font != null)
1598
+ {
1599
+ sb.push("true");
1600
+ }
1601
+ else
1602
+ {
1603
+ sb.push("false");
1604
+ }
1605
+ sb.push("\" applyBorder=\"false\" applyAlignment=\"true\" applyProtection=\"false\">");
1606
+ sb.push("<alignment horizontal=\"");
1607
+ switch (style.getHAlign())
1608
+ {
1609
+ case text.HAlignment.Left:
1610
+ sb.push("left");
1611
+ break;
1612
+ case text.HAlignment.Center:
1613
+ sb.push("center");
1614
+ break;
1615
+ case text.HAlignment.Right:
1616
+ sb.push("right");
1617
+ break;
1618
+ case text.HAlignment.Fill:
1619
+ sb.push("fill");
1620
+ break;
1621
+ case text.HAlignment.Justify:
1622
+ sb.push("justify");
1623
+ break;
1624
+ case text.HAlignment.Unknown:
1625
+ default:
1626
+ sb.push("general");
1627
+ break;
1628
+ }
1629
+ sb.push("\" vertical=\"");
1630
+ switch (style.getVAlign())
1631
+ {
1632
+ case text.VAlignment.Top:
1633
+ sb.push("top");
1634
+ break;
1635
+ case text.VAlignment.Center:
1636
+ sb.push("center");
1637
+ break;
1638
+ case text.VAlignment.Bottom:
1639
+ sb.push("bottom");
1640
+ break;
1641
+ case text.VAlignment.Justify:
1642
+ sb.push("justify");
1643
+ break;
1644
+ case text.VAlignment.Unknown:
1645
+ default:
1646
+ sb.push("general");
1647
+ break;
1648
+ }
1649
+ sb.push("\" textRotation=\"0\" wrapText=\"");
1650
+ if (style.getWordWrap())
1651
+ sb.push("true");
1652
+ else
1653
+ sb.push("false");
1654
+ sb.push("\" indent=\"0\" shrinkToFit=\"false\"/>");
1655
+ sb.push("<protection locked=\"true\" hidden=\"false\"/>");
1656
+ sb.push("</xf>");
1657
+ }
1658
+
1659
+ /**
1660
+ * @param {spreadsheet.PresetColor} color
1661
+ */
1662
+ static presetColorCode(color)
1663
+ {
1664
+ switch (color)
1665
+ {
1666
+ case spreadsheet.PresetColor.AliceBlue:
1667
+ return "aliceBlue";
1668
+ case spreadsheet.PresetColor.AntiqueWhite:
1669
+ return "antiqueWhite";
1670
+ case spreadsheet.PresetColor.Aqua:
1671
+ return "aqua";
1672
+ case spreadsheet.PresetColor.Aquamarine:
1673
+ return "aquamarine";
1674
+ case spreadsheet.PresetColor.Azure:
1675
+ return "azure";
1676
+ case spreadsheet.PresetColor.Beige:
1677
+ return "beige";
1678
+ case spreadsheet.PresetColor.Bisque:
1679
+ return "bisque";
1680
+ case spreadsheet.PresetColor.Black:
1681
+ return "black";
1682
+ case spreadsheet.PresetColor.BlanchedAlmond:
1683
+ return "blanchedAlmond";
1684
+ case spreadsheet.PresetColor.Blue:
1685
+ return "blue";
1686
+ case spreadsheet.PresetColor.BlueViolet:
1687
+ return "blueViolet";
1688
+ case spreadsheet.PresetColor.Brown:
1689
+ return "brown";
1690
+ case spreadsheet.PresetColor.BurlyWood:
1691
+ return "burlyWood";
1692
+ case spreadsheet.PresetColor.CadetBlue:
1693
+ return "cadetBlue";
1694
+ case spreadsheet.PresetColor.Chartreuse:
1695
+ return "chartreuse";
1696
+ case spreadsheet.PresetColor.Chocolate:
1697
+ return "chocolate";
1698
+ case spreadsheet.PresetColor.Coral:
1699
+ return "coral";
1700
+ case spreadsheet.PresetColor.CornflowerBlue:
1701
+ return "cornflowerBlue";
1702
+ case spreadsheet.PresetColor.Cornsilk:
1703
+ return "cornsilk";
1704
+ case spreadsheet.PresetColor.Crimson:
1705
+ return "crimson";
1706
+ case spreadsheet.PresetColor.Cyan:
1707
+ return "cyan";
1708
+ case spreadsheet.PresetColor.DeepPink:
1709
+ return "deepPink";
1710
+ case spreadsheet.PresetColor.DeepSkyBlue:
1711
+ return "deepSkyBlue";
1712
+ case spreadsheet.PresetColor.DimGray:
1713
+ return "dimGray";
1714
+ case spreadsheet.PresetColor.DarkBlue:
1715
+ return "dkBlue";
1716
+ case spreadsheet.PresetColor.DarkCyan:
1717
+ return "dkCyan";
1718
+ case spreadsheet.PresetColor.DarkGoldenrod:
1719
+ return "dkGoldenrod";
1720
+ case spreadsheet.PresetColor.DarkGray:
1721
+ return "dkGray";
1722
+ case spreadsheet.PresetColor.DarkGreen:
1723
+ return "dkGreen";
1724
+ case spreadsheet.PresetColor.DarkKhaki:
1725
+ return "dkKhaki";
1726
+ case spreadsheet.PresetColor.DarkMagenta:
1727
+ return "dkMagenta";
1728
+ case spreadsheet.PresetColor.DarkOliveGreen:
1729
+ return "dkOliveGreen";
1730
+ case spreadsheet.PresetColor.DarkOrange:
1731
+ return "dkOrange";
1732
+ case spreadsheet.PresetColor.DarkOrchid:
1733
+ return "dkOrchid";
1734
+ case spreadsheet.PresetColor.DarkRed:
1735
+ return "dkRed";
1736
+ case spreadsheet.PresetColor.DarkSalmon:
1737
+ return "dkSalmon";
1738
+ case spreadsheet.PresetColor.DarkSeaGreen:
1739
+ return "dkSeaGreen";
1740
+ case spreadsheet.PresetColor.DarkSlateBlue:
1741
+ return "dkSlateBlue";
1742
+ case spreadsheet.PresetColor.DarkSlateGray:
1743
+ return "dkSlateGray";
1744
+ case spreadsheet.PresetColor.DarkTurquoise:
1745
+ return "dkTurquoise";
1746
+ case spreadsheet.PresetColor.DarkViolet:
1747
+ return "dkViolet";
1748
+ case spreadsheet.PresetColor.DodgerBlue:
1749
+ return "dodgerBlue";
1750
+ case spreadsheet.PresetColor.Firebrick:
1751
+ return "firebrick";
1752
+ case spreadsheet.PresetColor.FloralWhite:
1753
+ return "floralWhite";
1754
+ case spreadsheet.PresetColor.ForestGreen:
1755
+ return "forestGreen";
1756
+ case spreadsheet.PresetColor.Fuchsia:
1757
+ return "fuchsia";
1758
+ case spreadsheet.PresetColor.Gainsboro:
1759
+ return "gainsboro";
1760
+ case spreadsheet.PresetColor.GhostWhite:
1761
+ return "ghostWhite";
1762
+ case spreadsheet.PresetColor.Gold:
1763
+ return "gold";
1764
+ case spreadsheet.PresetColor.Goldenrod:
1765
+ return "goldenrod";
1766
+ case spreadsheet.PresetColor.Gray:
1767
+ return "gray";
1768
+ case spreadsheet.PresetColor.Green:
1769
+ return "green";
1770
+ case spreadsheet.PresetColor.GreenYellow:
1771
+ return "greenYellow";
1772
+ case spreadsheet.PresetColor.Honeydew:
1773
+ return "honeydew";
1774
+ case spreadsheet.PresetColor.HotPink:
1775
+ return "hotPink";
1776
+ case spreadsheet.PresetColor.IndianRed:
1777
+ return "indianRed";
1778
+ case spreadsheet.PresetColor.Indigo:
1779
+ return "indigo";
1780
+ case spreadsheet.PresetColor.Ivory:
1781
+ return "ivory";
1782
+ case spreadsheet.PresetColor.Khaki:
1783
+ return "khaki";
1784
+ case spreadsheet.PresetColor.Lavender:
1785
+ return "lavender";
1786
+ case spreadsheet.PresetColor.LavenderBlush:
1787
+ return "lavenderBlush";
1788
+ case spreadsheet.PresetColor.LawnGreen:
1789
+ return "lawnGreen";
1790
+ case spreadsheet.PresetColor.LemonChiffon:
1791
+ return "lemonChiffon";
1792
+ case spreadsheet.PresetColor.Lime:
1793
+ return "lime";
1794
+ case spreadsheet.PresetColor.LimeGreen:
1795
+ return "limeGreen";
1796
+ case spreadsheet.PresetColor.Linen:
1797
+ return "linen";
1798
+ case spreadsheet.PresetColor.LightBlue:
1799
+ return "ltBlue";
1800
+ case spreadsheet.PresetColor.LightCoral:
1801
+ return "ltCoral";
1802
+ case spreadsheet.PresetColor.LightCyan:
1803
+ return "ltCyan";
1804
+ case spreadsheet.PresetColor.LightGoldenrodYellow:
1805
+ return "ltGoldenrodYellow";
1806
+ case spreadsheet.PresetColor.LightGray:
1807
+ return "ltGray";
1808
+ case spreadsheet.PresetColor.LightGreen:
1809
+ return "ltGreen";
1810
+ case spreadsheet.PresetColor.LightPink:
1811
+ return "ltPink";
1812
+ case spreadsheet.PresetColor.LightSalmon:
1813
+ return "ltSalmon";
1814
+ case spreadsheet.PresetColor.LightSeaGreen:
1815
+ return "ltSeaGreen";
1816
+ case spreadsheet.PresetColor.LightSkyBlue:
1817
+ return "ltSkyBlue";
1818
+ case spreadsheet.PresetColor.LightSlateGray:
1819
+ return "ltSlateGray";
1820
+ case spreadsheet.PresetColor.LightSteelBlue:
1821
+ return "ltSteelBlue";
1822
+ case spreadsheet.PresetColor.LightYellow:
1823
+ return "ltYellow";
1824
+ case spreadsheet.PresetColor.Magenta:
1825
+ return "magenta";
1826
+ case spreadsheet.PresetColor.Maroon:
1827
+ return "maroon";
1828
+ case spreadsheet.PresetColor.MediumAquamarine:
1829
+ return "medAquamarine";
1830
+ case spreadsheet.PresetColor.MediumBlue:
1831
+ return "medBlue";
1832
+ case spreadsheet.PresetColor.MediumOrchid:
1833
+ return "medOrchid";
1834
+ case spreadsheet.PresetColor.MediumPurple:
1835
+ return "medPurple";
1836
+ case spreadsheet.PresetColor.MediumSeaGreen:
1837
+ return "medSeaGreen";
1838
+ case spreadsheet.PresetColor.MediumSlateBlue:
1839
+ return "medSlateBlue";
1840
+ case spreadsheet.PresetColor.MediumSpringGreen:
1841
+ return "medSpringGreen";
1842
+ case spreadsheet.PresetColor.MediumTurquoise:
1843
+ return "medTurquoise";
1844
+ case spreadsheet.PresetColor.MediumVioletRed:
1845
+ return "medVioletRed";
1846
+ case spreadsheet.PresetColor.MidnightBlue:
1847
+ return "midnightBlue";
1848
+ case spreadsheet.PresetColor.MintCream:
1849
+ return "mintCream";
1850
+ case spreadsheet.PresetColor.MistyRose:
1851
+ return "mistyRose";
1852
+ case spreadsheet.PresetColor.Moccasin:
1853
+ return "moccasin";
1854
+ case spreadsheet.PresetColor.NavajoWhite:
1855
+ return "navajoWhite";
1856
+ case spreadsheet.PresetColor.Navy:
1857
+ return "navy";
1858
+ case spreadsheet.PresetColor.OldLace:
1859
+ return "oldLace";
1860
+ case spreadsheet.PresetColor.Olive:
1861
+ return "olive";
1862
+ case spreadsheet.PresetColor.OliveDrab:
1863
+ return "oliveDrab";
1864
+ case spreadsheet.PresetColor.Orange:
1865
+ return "orange";
1866
+ case spreadsheet.PresetColor.OrangeRed:
1867
+ return "orangeRed";
1868
+ case spreadsheet.PresetColor.Orchid:
1869
+ return "orchid";
1870
+ case spreadsheet.PresetColor.PaleGoldenrod:
1871
+ return "paleGoldenrod";
1872
+ case spreadsheet.PresetColor.PaleGreen:
1873
+ return "paleGreen";
1874
+ case spreadsheet.PresetColor.PaleTurquoise:
1875
+ return "paleTurquoise";
1876
+ case spreadsheet.PresetColor.PaleVioletRed:
1877
+ return "paleVioletRed";
1878
+ case spreadsheet.PresetColor.PapayaWhip:
1879
+ return "papayaWhip";
1880
+ case spreadsheet.PresetColor.PeachPuff:
1881
+ return "peachPuff";
1882
+ case spreadsheet.PresetColor.Peru:
1883
+ return "peru";
1884
+ case spreadsheet.PresetColor.Pink:
1885
+ return "pink";
1886
+ case spreadsheet.PresetColor.Plum:
1887
+ return "plum";
1888
+ case spreadsheet.PresetColor.PowderBlue:
1889
+ return "powderBlue";
1890
+ case spreadsheet.PresetColor.Purple:
1891
+ return "purple";
1892
+ case spreadsheet.PresetColor.Red:
1893
+ return "red";
1894
+ case spreadsheet.PresetColor.RosyBrown:
1895
+ return "rosyBrown";
1896
+ case spreadsheet.PresetColor.RoyalBlue:
1897
+ return "royalBlue";
1898
+ case spreadsheet.PresetColor.SaddleBrown:
1899
+ return "saddleBrown";
1900
+ case spreadsheet.PresetColor.Salmon:
1901
+ return "salmon";
1902
+ case spreadsheet.PresetColor.SandyBrown:
1903
+ return "sandyBrown";
1904
+ case spreadsheet.PresetColor.SeaGreen:
1905
+ return "seaGreen";
1906
+ case spreadsheet.PresetColor.SeaShell:
1907
+ return "seaShell";
1908
+ case spreadsheet.PresetColor.Sienna:
1909
+ return "sienna";
1910
+ case spreadsheet.PresetColor.Silver:
1911
+ return "silver";
1912
+ case spreadsheet.PresetColor.SkyBlue:
1913
+ return "skyBlue";
1914
+ case spreadsheet.PresetColor.SlateBlue:
1915
+ return "slateBlue";
1916
+ case spreadsheet.PresetColor.SlateGray:
1917
+ return "slateGray";
1918
+ case spreadsheet.PresetColor.Snow:
1919
+ return "snow";
1920
+ case spreadsheet.PresetColor.SpringGreen:
1921
+ return "springGreen";
1922
+ case spreadsheet.PresetColor.SteelBlue:
1923
+ return "steelBlue";
1924
+ case spreadsheet.PresetColor.Tan:
1925
+ return "tan";
1926
+ case spreadsheet.PresetColor.Teal:
1927
+ return "teal";
1928
+ case spreadsheet.PresetColor.Thistle:
1929
+ return "thistle";
1930
+ case spreadsheet.PresetColor.Tomato:
1931
+ return "tomato";
1932
+ case spreadsheet.PresetColor.Turquoise:
1933
+ return "turquoise";
1934
+ case spreadsheet.PresetColor.Violet:
1935
+ return "violet";
1936
+ case spreadsheet.PresetColor.Wheat:
1937
+ return "wheat";
1938
+ case spreadsheet.PresetColor.White:
1939
+ return "white";
1940
+ case spreadsheet.PresetColor.WhiteSmoke:
1941
+ return "whiteSmoke";
1942
+ case spreadsheet.PresetColor.Yellow:
1943
+ return "yellow";
1944
+ case spreadsheet.PresetColor.YellowGreen:
1945
+ return "yellowGreen";
1946
+ default:
1947
+ return "Unknown";
1948
+ }
1949
+ }
1950
+
1951
+ /**
1952
+ * @param {string} dataFormat
1953
+ */
1954
+ static toFormatCode(dataFormat)
1955
+ {
1956
+ let s = [];
1957
+ let i = 0;
1958
+ let j = dataFormat.length;
1959
+ let c;
1960
+ while (i < j)
1961
+ {
1962
+ c = dataFormat.charAt(i);
1963
+ if (c == '-')
1964
+ {
1965
+ s.push('\\');
1966
+ s.push(c)
1967
+ }
1968
+ else
1969
+ {
1970
+ s.push(c.toLowerCase());
1971
+ }
1972
+ i++;
1973
+ }
1974
+ return s.join("");
1975
+ }
1976
+ };