example_excel_write.js 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641
  1. var XLSX = require('xlsx');
  2. var OUTFILE = '/tmp/example-style.xlsx';
  3. function JSDateToExcelDate(inDate) {
  4. return 25569.0 + ((inDate.getTime() - (inDate.getTimezoneOffset() * 60 * 1000)) / (1000 * 60 * 60 * 24));
  5. }
  6. var defaultCellStyle = { font: { name: "Verdana", sz: 11, color: "FF00FF88"}, fill: {fgColor: {rgb: "FFFFAA00"}}};
  7. // test to see if everything on the left equals its counterpart on the right
  8. // but the right hand object may have other attributes which we might not care about
  9. function basicallyEquals(left, right) {
  10. if (Array.isArray(left) && Array.isArray(right)) {
  11. for (var i = 0; i < left.length; i++) {
  12. if (!basicallyEquals(left[i], right[i])) {
  13. return false;
  14. }
  15. }
  16. return true;
  17. }
  18. else if (typeof left == 'object' && typeof right == 'object') {
  19. for (var key in left) {
  20. if (key != 'bgColor') {
  21. if (!basicallyEquals(left[key], right[key])) {
  22. if (JSON.stringify(left[key]) == "{}" && right[key] == undefined) return true;
  23. if (JSON.stringify(right[key]) == "{}" && left[key] == undefined) return true;
  24. return false;
  25. }
  26. }
  27. }
  28. return true;
  29. }
  30. else {
  31. if (left != right) {
  32. return false;
  33. }
  34. return true;
  35. }
  36. }
  37. var workbook, wbout, wbin;
  38. workbook = {
  39. "SheetNames": [
  40. "Main"
  41. ],
  42. "Sheets": {
  43. "Main": {
  44. "!merges": [
  45. {
  46. "s": {
  47. "c": 0,
  48. "r": 0
  49. },
  50. "e": {
  51. "c": 2,
  52. "r": 0
  53. }
  54. }
  55. ],
  56. "A1": {
  57. "v": "This is a submerged cell",
  58. "s": {
  59. "border": {
  60. "left": {
  61. "style": "thick",
  62. "color": {
  63. "auto": 1
  64. }
  65. },
  66. "top": {
  67. "style": "thick",
  68. "color": {
  69. "auto": 1
  70. }
  71. },
  72. "bottom": {
  73. "style": "thick",
  74. "color": {
  75. "auto": 1
  76. }
  77. }
  78. }
  79. },
  80. "t": "s"
  81. },
  82. "B1": {
  83. "v": "Pirate ship",
  84. "s": {
  85. "border": {
  86. "top": {
  87. "style": "thick",
  88. "color": {
  89. "auto": 1
  90. }
  91. },
  92. "bottom": {
  93. "style": "thick",
  94. "color": {
  95. "auto": 1
  96. }
  97. }
  98. }
  99. },
  100. "t": "s"
  101. },
  102. "C1": {
  103. "v": "Sunken treasure",
  104. "s": {
  105. "border": {
  106. "right": {
  107. "style": "thick",
  108. "color": {
  109. "auto": 1
  110. }
  111. },
  112. "top": {
  113. "style": "thick",
  114. "color": {
  115. "auto": 1
  116. }
  117. },
  118. "bottom": {
  119. "style": "thick",
  120. "color": {
  121. "auto": 1
  122. }
  123. }
  124. }
  125. },
  126. "t": "s"
  127. },
  128. "A2": {
  129. "v": "Blank",
  130. "t": "s"
  131. },
  132. "B2": {
  133. "v": "Red",
  134. "s": {
  135. "fill": {
  136. "fgColor": {
  137. "rgb": "FFFF0000"
  138. }
  139. }
  140. },
  141. "t": "s"
  142. },
  143. "C2": {
  144. "v": "Green",
  145. "s": {
  146. "fill": {
  147. "fgColor": {
  148. "rgb": "FF00FF00"
  149. }
  150. }
  151. },
  152. "t": "s"
  153. },
  154. "D2": {
  155. "v": "Blue",
  156. "s": {
  157. "fill": {
  158. "fgColor": {
  159. "rgb": "FF0000FF"
  160. }
  161. }
  162. },
  163. "t": "s"
  164. },
  165. "E2": {
  166. "v": "Theme 5",
  167. "s": {
  168. "fill": {
  169. "fgColor": {
  170. "theme": 5
  171. }
  172. }
  173. },
  174. "t": "s"
  175. },
  176. "F2": {
  177. "v": "Theme 5 Tint -0.5",
  178. "s": {
  179. "fill": {
  180. "fgColor": {
  181. "theme": 5,
  182. "tint": -0.5
  183. }
  184. }
  185. },
  186. "t": "s"
  187. },
  188. "A3": {
  189. "v": "Default",
  190. "t": "s"
  191. },
  192. "B3": {
  193. "v": "Arial",
  194. "s": {
  195. "font": {
  196. "name": "Arial",
  197. "sz": 24,
  198. "color": {
  199. "theme": "5"
  200. }
  201. }
  202. },
  203. "t": "s"
  204. },
  205. "C3": {
  206. "v": "Times New Roman",
  207. "s": {
  208. "font": {
  209. "name": "Times New Roman",
  210. bold: true,
  211. underline: true,
  212. italic: true,
  213. strike: true,
  214. outline: true,
  215. shadow: true,
  216. vertAlign: "superscript",
  217. "sz": 16,
  218. "color": {
  219. "rgb": "FF2222FF"
  220. }
  221. }
  222. },
  223. "t": "s"
  224. },
  225. "D3": {
  226. "v": "Courier New",
  227. "s": {
  228. "font": {
  229. "name": "Courier New",
  230. "sz": 14
  231. }
  232. },
  233. "t": "s"
  234. },
  235. "A4": {
  236. "v": 0.618033989,
  237. "t": "n"
  238. },
  239. "B4": {
  240. "v": 0.618033989,
  241. "t": "n"
  242. },
  243. "C4": {
  244. "v": 0.618033989,
  245. "t": "n"
  246. },
  247. "D4": {
  248. "v": 0.618033989,
  249. "t": "n",
  250. "s": {
  251. "numFmt": "0.00%"
  252. }
  253. },
  254. "E4": {
  255. "v": 0.618033989,
  256. "t": "n",
  257. "s": {
  258. "numFmt": "0.00%",
  259. "fill": {
  260. "fgColor": {
  261. "rgb": "FFFFCC00"
  262. }
  263. }
  264. }
  265. },
  266. "A5": {
  267. "v": 0.618033989,
  268. "t": "n",
  269. "s": {
  270. "numFmt": "0%"
  271. }
  272. },
  273. "B5": {
  274. "v": 0.618033989,
  275. "t": "n",
  276. "s": {
  277. "numFmt": "0.0%"
  278. }
  279. },
  280. "C5": {
  281. "v": 0.618033989,
  282. "t": "n",
  283. "s": {
  284. "numFmt": "0.00%"
  285. }
  286. },
  287. "D5": {
  288. "v": 0.618033989,
  289. "t": "n",
  290. "s": {
  291. "numFmt": "0.000%"
  292. }
  293. },
  294. "E5": {
  295. "v": 0.618033989,
  296. "t": "n",
  297. "s": {
  298. "numFmt": "0.0000%"
  299. }
  300. },
  301. "F5": {
  302. "v": 0,
  303. "t": "n",
  304. "s": {
  305. "numFmt": "0.00%;\\(0.00%\\);\\-;@",
  306. "fill": {
  307. "fgColor": {
  308. "rgb": "FFFFCC00"
  309. }
  310. }
  311. }
  312. },
  313. "A6": {
  314. "v": "Sat Mar 21 2015 23:47:34 GMT-0400 (EDT)",
  315. "t": "s"
  316. },
  317. "B6": {
  318. "v": 42084.99137416667,
  319. "t": "n"
  320. },
  321. "C6": {
  322. "v": 42084.99137416667,
  323. "s": {
  324. "numFmt": "d-mmm-yy"
  325. },
  326. "t": "n"
  327. },
  328. "A7": {
  329. "v": "left",
  330. "s": {
  331. "alignment": {
  332. "horizontal": "left"
  333. }
  334. },
  335. "t": "s"
  336. },
  337. "B7": {
  338. "v": "center",
  339. "s": {
  340. "alignment": {
  341. "horizontal": "center"
  342. }
  343. },
  344. "t": "s"
  345. },
  346. "C7": {
  347. "v": "right",
  348. "s": {
  349. "alignment": {
  350. "horizontal": "right"
  351. }
  352. },
  353. "t": "s"
  354. },
  355. "A8": {
  356. "v": "vertical",
  357. "s": {
  358. "alignment": {
  359. "vertical": "top"
  360. }
  361. },
  362. "t": "s"
  363. },
  364. "B8": {
  365. "v": "vertical",
  366. "s": {
  367. "alignment": {
  368. "vertical": "center"
  369. }
  370. },
  371. "t": "s"
  372. },
  373. "C8": {
  374. "v": "vertical",
  375. "s": {
  376. "alignment": {
  377. "vertical": "bottom"
  378. }
  379. },
  380. "t": "s"
  381. },
  382. "A9": {
  383. "v": "indent",
  384. "s": {
  385. "alignment": {
  386. "indent": "1"
  387. }
  388. },
  389. "t": "s"
  390. },
  391. "B9": {
  392. "v": "indent",
  393. "s": {
  394. "alignment": {
  395. "indent": "2"
  396. }
  397. },
  398. "t": "s"
  399. },
  400. "C9": {
  401. "v": "indent",
  402. "s": {
  403. "alignment": {
  404. "indent": "3"
  405. }
  406. },
  407. "t": "s"
  408. },
  409. "A10": {
  410. "v": "In publishing and graphic design, lorem ipsum is a filler text commonly used to demonstrate the graphic elements of a document or visual presentation. ",
  411. "s": {
  412. "alignment": {
  413. "wrapText": 1,
  414. "horizontal": "right",
  415. "vertical": "center",
  416. "indent": 1
  417. }
  418. },
  419. "t": "s"
  420. },
  421. "A11": {
  422. "v": 41684.35264774306,
  423. "s": {
  424. "numFmt": "m/d/yy"
  425. },
  426. "t": "n"
  427. },
  428. "B11": {
  429. "v": 41684.35264774306,
  430. "s": {
  431. "numFmt": "d-mmm-yy"
  432. },
  433. "t": "n"
  434. },
  435. "C11": {
  436. "v": 41684.35264774306,
  437. "s": {
  438. "numFmt": "h:mm:ss AM/PM"
  439. },
  440. "t": "n"
  441. },
  442. "D11": {
  443. "v": 42084.99137416667,
  444. "s": {
  445. "numFmt": "m/d/yy"
  446. },
  447. "t": "n"
  448. },
  449. "E11": {
  450. "v": 42065.02247239584,
  451. "s": {
  452. "numFmt": "m/d/yy"
  453. },
  454. "t": "n"
  455. },
  456. "F11": {
  457. "v": 42084.99137416667,
  458. "s": {
  459. "numFmt": "m/d/yy h:mm:ss AM/PM"
  460. },
  461. "t": "n"
  462. },
  463. "A12": {
  464. "v": "Apple",
  465. "s": {
  466. "border": {
  467. "top": {
  468. "style": "thin"
  469. },
  470. "left": {
  471. "style": "thin"
  472. },
  473. "right": {
  474. "style": "thin"
  475. },
  476. "bottom": {
  477. "style": "thin"
  478. }
  479. }
  480. },
  481. "t": "s"
  482. },
  483. "C12": {
  484. "v": "Apple",
  485. "s": {
  486. "border": {
  487. "diagonalUp": 1,
  488. "diagonalDown": 1,
  489. "top": {
  490. "style": "dashed",
  491. "color": {
  492. "auto": 1
  493. }
  494. },
  495. "right": {
  496. "style": "medium",
  497. "color": {
  498. "theme": "5"
  499. }
  500. },
  501. "bottom": {
  502. "style": "hair",
  503. "color": {
  504. "theme": 5,
  505. "tint": "-0.3"
  506. }
  507. },
  508. "left": {
  509. "style": "thin",
  510. "color": {
  511. "rgb": "FFFFAA00"
  512. }
  513. },
  514. "diagonal": {
  515. "style": "dotted",
  516. "color": {
  517. "auto": 1
  518. }
  519. }
  520. }
  521. },
  522. "t": "s"
  523. },
  524. "E12": {
  525. "v": "Pear",
  526. "s": {
  527. "border": {
  528. "diagonalUp": 1,
  529. "diagonalDown": 1,
  530. "top": {
  531. "style": "dashed",
  532. "color": {
  533. "auto": 1
  534. }
  535. },
  536. "right": {
  537. "style": "dotted",
  538. "color": {
  539. "theme": "5"
  540. }
  541. },
  542. "bottom": {
  543. "style": "mediumDashed",
  544. "color": {
  545. "theme": 5,
  546. "tint": "-0.3"
  547. }
  548. },
  549. "left": {
  550. "style": "double",
  551. "color": {
  552. "rgb": "FFFFAA00"
  553. }
  554. },
  555. "diagonal": {
  556. "style": "hair",
  557. "color": {
  558. "auto": 1
  559. }
  560. }
  561. }
  562. },
  563. "t": "s"
  564. },
  565. "A13": {
  566. "v": "Up 90",
  567. "s": {
  568. "alignment": {
  569. "textRotation": 90
  570. }
  571. },
  572. "t": "s"
  573. },
  574. "B13": {
  575. "v": "Up 45",
  576. "s": {
  577. "alignment": {
  578. "textRotation": 45
  579. }
  580. },
  581. "t": "s"
  582. },
  583. "C13": {
  584. "v": "Horizontal",
  585. "s": {
  586. "alignment": {
  587. "textRotation": 0
  588. }
  589. },
  590. "t": "s"
  591. },
  592. "D13": {
  593. "v": "Down 45",
  594. "s": {
  595. "alignment": {
  596. "textRotation": 135
  597. }
  598. },
  599. "t": "s"
  600. },
  601. "E13": {
  602. "v": "Down 90",
  603. "s": {
  604. "alignment": {
  605. "textRotation": 180
  606. }
  607. },
  608. "t": "s"
  609. },
  610. "F13": {
  611. "v": "Vertical",
  612. "s": {
  613. "alignment": {
  614. "textRotation": 255
  615. }
  616. },
  617. "t": "s"
  618. },
  619. "A14": {
  620. "v": "Font color test",
  621. "s": {
  622. "font": {
  623. "color": {
  624. "rgb": "FFC6EFCE"
  625. }
  626. }
  627. },
  628. "t": "s"
  629. },
  630. "!ref": "A1:F14"
  631. }
  632. }
  633. }
  634. XLSX.writeFile(workbook, OUTFILE, { defaultCellStyle: defaultCellStyle });
  635. console.log("open " + OUTFILE)