excel.js 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544
  1. /*
  2. Language: Excel formulae
  3. Author: Victor Zhou <OiCMudkips@users.noreply.github.com>
  4. Description: Excel formulae
  5. Website: https://products.office.com/en-us/excel/
  6. */
  7. /** @type LanguageFn */
  8. function excel(hljs) {
  9. // built-in functions imported from https://web.archive.org/web/20160513042710/https://support.office.com/en-us/article/Excel-functions-alphabetical-b3944572-255d-4efb-bb96-c6d90033e188
  10. const BUILT_INS = [
  11. "ABS",
  12. "ACCRINT",
  13. "ACCRINTM",
  14. "ACOS",
  15. "ACOSH",
  16. "ACOT",
  17. "ACOTH",
  18. "AGGREGATE",
  19. "ADDRESS",
  20. "AMORDEGRC",
  21. "AMORLINC",
  22. "AND",
  23. "ARABIC",
  24. "AREAS",
  25. "ASC",
  26. "ASIN",
  27. "ASINH",
  28. "ATAN",
  29. "ATAN2",
  30. "ATANH",
  31. "AVEDEV",
  32. "AVERAGE",
  33. "AVERAGEA",
  34. "AVERAGEIF",
  35. "AVERAGEIFS",
  36. "BAHTTEXT",
  37. "BASE",
  38. "BESSELI",
  39. "BESSELJ",
  40. "BESSELK",
  41. "BESSELY",
  42. "BETADIST",
  43. "BETA.DIST",
  44. "BETAINV",
  45. "BETA.INV",
  46. "BIN2DEC",
  47. "BIN2HEX",
  48. "BIN2OCT",
  49. "BINOMDIST",
  50. "BINOM.DIST",
  51. "BINOM.DIST.RANGE",
  52. "BINOM.INV",
  53. "BITAND",
  54. "BITLSHIFT",
  55. "BITOR",
  56. "BITRSHIFT",
  57. "BITXOR",
  58. "CALL",
  59. "CEILING",
  60. "CEILING.MATH",
  61. "CEILING.PRECISE",
  62. "CELL",
  63. "CHAR",
  64. "CHIDIST",
  65. "CHIINV",
  66. "CHITEST",
  67. "CHISQ.DIST",
  68. "CHISQ.DIST.RT",
  69. "CHISQ.INV",
  70. "CHISQ.INV.RT",
  71. "CHISQ.TEST",
  72. "CHOOSE",
  73. "CLEAN",
  74. "CODE",
  75. "COLUMN",
  76. "COLUMNS",
  77. "COMBIN",
  78. "COMBINA",
  79. "COMPLEX",
  80. "CONCAT",
  81. "CONCATENATE",
  82. "CONFIDENCE",
  83. "CONFIDENCE.NORM",
  84. "CONFIDENCE.T",
  85. "CONVERT",
  86. "CORREL",
  87. "COS",
  88. "COSH",
  89. "COT",
  90. "COTH",
  91. "COUNT",
  92. "COUNTA",
  93. "COUNTBLANK",
  94. "COUNTIF",
  95. "COUNTIFS",
  96. "COUPDAYBS",
  97. "COUPDAYS",
  98. "COUPDAYSNC",
  99. "COUPNCD",
  100. "COUPNUM",
  101. "COUPPCD",
  102. "COVAR",
  103. "COVARIANCE.P",
  104. "COVARIANCE.S",
  105. "CRITBINOM",
  106. "CSC",
  107. "CSCH",
  108. "CUBEKPIMEMBER",
  109. "CUBEMEMBER",
  110. "CUBEMEMBERPROPERTY",
  111. "CUBERANKEDMEMBER",
  112. "CUBESET",
  113. "CUBESETCOUNT",
  114. "CUBEVALUE",
  115. "CUMIPMT",
  116. "CUMPRINC",
  117. "DATE",
  118. "DATEDIF",
  119. "DATEVALUE",
  120. "DAVERAGE",
  121. "DAY",
  122. "DAYS",
  123. "DAYS360",
  124. "DB",
  125. "DBCS",
  126. "DCOUNT",
  127. "DCOUNTA",
  128. "DDB",
  129. "DEC2BIN",
  130. "DEC2HEX",
  131. "DEC2OCT",
  132. "DECIMAL",
  133. "DEGREES",
  134. "DELTA",
  135. "DEVSQ",
  136. "DGET",
  137. "DISC",
  138. "DMAX",
  139. "DMIN",
  140. "DOLLAR",
  141. "DOLLARDE",
  142. "DOLLARFR",
  143. "DPRODUCT",
  144. "DSTDEV",
  145. "DSTDEVP",
  146. "DSUM",
  147. "DURATION",
  148. "DVAR",
  149. "DVARP",
  150. "EDATE",
  151. "EFFECT",
  152. "ENCODEURL",
  153. "EOMONTH",
  154. "ERF",
  155. "ERF.PRECISE",
  156. "ERFC",
  157. "ERFC.PRECISE",
  158. "ERROR.TYPE",
  159. "EUROCONVERT",
  160. "EVEN",
  161. "EXACT",
  162. "EXP",
  163. "EXPON.DIST",
  164. "EXPONDIST",
  165. "FACT",
  166. "FACTDOUBLE",
  167. "FALSE|0",
  168. "F.DIST",
  169. "FDIST",
  170. "F.DIST.RT",
  171. "FILTERXML",
  172. "FIND",
  173. "FINDB",
  174. "F.INV",
  175. "F.INV.RT",
  176. "FINV",
  177. "FISHER",
  178. "FISHERINV",
  179. "FIXED",
  180. "FLOOR",
  181. "FLOOR.MATH",
  182. "FLOOR.PRECISE",
  183. "FORECAST",
  184. "FORECAST.ETS",
  185. "FORECAST.ETS.CONFINT",
  186. "FORECAST.ETS.SEASONALITY",
  187. "FORECAST.ETS.STAT",
  188. "FORECAST.LINEAR",
  189. "FORMULATEXT",
  190. "FREQUENCY",
  191. "F.TEST",
  192. "FTEST",
  193. "FV",
  194. "FVSCHEDULE",
  195. "GAMMA",
  196. "GAMMA.DIST",
  197. "GAMMADIST",
  198. "GAMMA.INV",
  199. "GAMMAINV",
  200. "GAMMALN",
  201. "GAMMALN.PRECISE",
  202. "GAUSS",
  203. "GCD",
  204. "GEOMEAN",
  205. "GESTEP",
  206. "GETPIVOTDATA",
  207. "GROWTH",
  208. "HARMEAN",
  209. "HEX2BIN",
  210. "HEX2DEC",
  211. "HEX2OCT",
  212. "HLOOKUP",
  213. "HOUR",
  214. "HYPERLINK",
  215. "HYPGEOM.DIST",
  216. "HYPGEOMDIST",
  217. "IF",
  218. "IFERROR",
  219. "IFNA",
  220. "IFS",
  221. "IMABS",
  222. "IMAGINARY",
  223. "IMARGUMENT",
  224. "IMCONJUGATE",
  225. "IMCOS",
  226. "IMCOSH",
  227. "IMCOT",
  228. "IMCSC",
  229. "IMCSCH",
  230. "IMDIV",
  231. "IMEXP",
  232. "IMLN",
  233. "IMLOG10",
  234. "IMLOG2",
  235. "IMPOWER",
  236. "IMPRODUCT",
  237. "IMREAL",
  238. "IMSEC",
  239. "IMSECH",
  240. "IMSIN",
  241. "IMSINH",
  242. "IMSQRT",
  243. "IMSUB",
  244. "IMSUM",
  245. "IMTAN",
  246. "INDEX",
  247. "INDIRECT",
  248. "INFO",
  249. "INT",
  250. "INTERCEPT",
  251. "INTRATE",
  252. "IPMT",
  253. "IRR",
  254. "ISBLANK",
  255. "ISERR",
  256. "ISERROR",
  257. "ISEVEN",
  258. "ISFORMULA",
  259. "ISLOGICAL",
  260. "ISNA",
  261. "ISNONTEXT",
  262. "ISNUMBER",
  263. "ISODD",
  264. "ISREF",
  265. "ISTEXT",
  266. "ISO.CEILING",
  267. "ISOWEEKNUM",
  268. "ISPMT",
  269. "JIS",
  270. "KURT",
  271. "LARGE",
  272. "LCM",
  273. "LEFT",
  274. "LEFTB",
  275. "LEN",
  276. "LENB",
  277. "LINEST",
  278. "LN",
  279. "LOG",
  280. "LOG10",
  281. "LOGEST",
  282. "LOGINV",
  283. "LOGNORM.DIST",
  284. "LOGNORMDIST",
  285. "LOGNORM.INV",
  286. "LOOKUP",
  287. "LOWER",
  288. "MATCH",
  289. "MAX",
  290. "MAXA",
  291. "MAXIFS",
  292. "MDETERM",
  293. "MDURATION",
  294. "MEDIAN",
  295. "MID",
  296. "MIDBs",
  297. "MIN",
  298. "MINIFS",
  299. "MINA",
  300. "MINUTE",
  301. "MINVERSE",
  302. "MIRR",
  303. "MMULT",
  304. "MOD",
  305. "MODE",
  306. "MODE.MULT",
  307. "MODE.SNGL",
  308. "MONTH",
  309. "MROUND",
  310. "MULTINOMIAL",
  311. "MUNIT",
  312. "N",
  313. "NA",
  314. "NEGBINOM.DIST",
  315. "NEGBINOMDIST",
  316. "NETWORKDAYS",
  317. "NETWORKDAYS.INTL",
  318. "NOMINAL",
  319. "NORM.DIST",
  320. "NORMDIST",
  321. "NORMINV",
  322. "NORM.INV",
  323. "NORM.S.DIST",
  324. "NORMSDIST",
  325. "NORM.S.INV",
  326. "NORMSINV",
  327. "NOT",
  328. "NOW",
  329. "NPER",
  330. "NPV",
  331. "NUMBERVALUE",
  332. "OCT2BIN",
  333. "OCT2DEC",
  334. "OCT2HEX",
  335. "ODD",
  336. "ODDFPRICE",
  337. "ODDFYIELD",
  338. "ODDLPRICE",
  339. "ODDLYIELD",
  340. "OFFSET",
  341. "OR",
  342. "PDURATION",
  343. "PEARSON",
  344. "PERCENTILE.EXC",
  345. "PERCENTILE.INC",
  346. "PERCENTILE",
  347. "PERCENTRANK.EXC",
  348. "PERCENTRANK.INC",
  349. "PERCENTRANK",
  350. "PERMUT",
  351. "PERMUTATIONA",
  352. "PHI",
  353. "PHONETIC",
  354. "PI",
  355. "PMT",
  356. "POISSON.DIST",
  357. "POISSON",
  358. "POWER",
  359. "PPMT",
  360. "PRICE",
  361. "PRICEDISC",
  362. "PRICEMAT",
  363. "PROB",
  364. "PRODUCT",
  365. "PROPER",
  366. "PV",
  367. "QUARTILE",
  368. "QUARTILE.EXC",
  369. "QUARTILE.INC",
  370. "QUOTIENT",
  371. "RADIANS",
  372. "RAND",
  373. "RANDBETWEEN",
  374. "RANK.AVG",
  375. "RANK.EQ",
  376. "RANK",
  377. "RATE",
  378. "RECEIVED",
  379. "REGISTER.ID",
  380. "REPLACE",
  381. "REPLACEB",
  382. "REPT",
  383. "RIGHT",
  384. "RIGHTB",
  385. "ROMAN",
  386. "ROUND",
  387. "ROUNDDOWN",
  388. "ROUNDUP",
  389. "ROW",
  390. "ROWS",
  391. "RRI",
  392. "RSQ",
  393. "RTD",
  394. "SEARCH",
  395. "SEARCHB",
  396. "SEC",
  397. "SECH",
  398. "SECOND",
  399. "SERIESSUM",
  400. "SHEET",
  401. "SHEETS",
  402. "SIGN",
  403. "SIN",
  404. "SINH",
  405. "SKEW",
  406. "SKEW.P",
  407. "SLN",
  408. "SLOPE",
  409. "SMALL",
  410. "SQL.REQUEST",
  411. "SQRT",
  412. "SQRTPI",
  413. "STANDARDIZE",
  414. "STDEV",
  415. "STDEV.P",
  416. "STDEV.S",
  417. "STDEVA",
  418. "STDEVP",
  419. "STDEVPA",
  420. "STEYX",
  421. "SUBSTITUTE",
  422. "SUBTOTAL",
  423. "SUM",
  424. "SUMIF",
  425. "SUMIFS",
  426. "SUMPRODUCT",
  427. "SUMSQ",
  428. "SUMX2MY2",
  429. "SUMX2PY2",
  430. "SUMXMY2",
  431. "SWITCH",
  432. "SYD",
  433. "T",
  434. "TAN",
  435. "TANH",
  436. "TBILLEQ",
  437. "TBILLPRICE",
  438. "TBILLYIELD",
  439. "T.DIST",
  440. "T.DIST.2T",
  441. "T.DIST.RT",
  442. "TDIST",
  443. "TEXT",
  444. "TEXTJOIN",
  445. "TIME",
  446. "TIMEVALUE",
  447. "T.INV",
  448. "T.INV.2T",
  449. "TINV",
  450. "TODAY",
  451. "TRANSPOSE",
  452. "TREND",
  453. "TRIM",
  454. "TRIMMEAN",
  455. "TRUE|0",
  456. "TRUNC",
  457. "T.TEST",
  458. "TTEST",
  459. "TYPE",
  460. "UNICHAR",
  461. "UNICODE",
  462. "UPPER",
  463. "VALUE",
  464. "VAR",
  465. "VAR.P",
  466. "VAR.S",
  467. "VARA",
  468. "VARP",
  469. "VARPA",
  470. "VDB",
  471. "VLOOKUP",
  472. "WEBSERVICE",
  473. "WEEKDAY",
  474. "WEEKNUM",
  475. "WEIBULL",
  476. "WEIBULL.DIST",
  477. "WORKDAY",
  478. "WORKDAY.INTL",
  479. "XIRR",
  480. "XNPV",
  481. "XOR",
  482. "YEAR",
  483. "YEARFRAC",
  484. "YIELD",
  485. "YIELDDISC",
  486. "YIELDMAT",
  487. "Z.TEST",
  488. "ZTEST"
  489. ];
  490. return {
  491. name: 'Excel formulae',
  492. aliases: [
  493. 'xlsx',
  494. 'xls'
  495. ],
  496. case_insensitive: true,
  497. keywords: {
  498. $pattern: /[a-zA-Z][\w\.]*/,
  499. built_in: BUILT_INS
  500. },
  501. contains: [
  502. {
  503. /* matches a beginning equal sign found in Excel formula examples */
  504. begin: /^=/,
  505. end: /[^=]/,
  506. returnEnd: true,
  507. illegal: /=/, /* only allow single equal sign at front of line */
  508. relevance: 10
  509. },
  510. /* technically, there can be more than 2 letters in column names, but this prevents conflict with some keywords */
  511. {
  512. /* matches a reference to a single cell */
  513. className: 'symbol',
  514. begin: /\b[A-Z]{1,2}\d+\b/,
  515. end: /[^\d]/,
  516. excludeEnd: true,
  517. relevance: 0
  518. },
  519. {
  520. /* matches a reference to a range of cells */
  521. className: 'symbol',
  522. begin: /[A-Z]{0,2}\d*:[A-Z]{0,2}\d*/,
  523. relevance: 0
  524. },
  525. hljs.BACKSLASH_ESCAPE,
  526. hljs.QUOTE_STRING_MODE,
  527. {
  528. className: 'number',
  529. begin: hljs.NUMBER_RE + '(%)?',
  530. relevance: 0
  531. },
  532. /* Excel formula comments are done by putting the comment in a function call to N() */
  533. hljs.COMMENT(/\bN\(/, /\)/,
  534. {
  535. excludeBegin: true,
  536. excludeEnd: true,
  537. illegal: /\n/
  538. })
  539. ]
  540. };
  541. }
  542. module.exports = excel;