@sswroom/sswr 1.6.12 → 1.6.14

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