excel.js 9.2 KB

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