shared-formula.js 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. "use strict";
  2. var colCache = require('./col-cache'); // const cellRefRegex = /(([a-z_\-0-9]*)!)?[$]?([a-z]+)[$]?([1-9][0-9]*)/i;
  3. var replacementCandidateRx = /(([a-z_\-0-9]*)!)?([a-z0-9_$]{2,})([(])?/gi;
  4. var CRrx = /^([$])?([a-z]+)([$])?([1-9][0-9]*)$/i;
  5. function slideFormula(formula, fromCell, toCell) {
  6. var offset = colCache.decode(fromCell);
  7. var to = colCache.decode(toCell);
  8. return formula.replace(replacementCandidateRx, function (refMatch, sheet, sheetMaybe, addrPart, trailingParen) {
  9. if (trailingParen) {
  10. return refMatch;
  11. }
  12. var match = CRrx.exec(addrPart);
  13. if (match) {
  14. var colDollar = match[1];
  15. var colStr = match[2].toUpperCase();
  16. var rowDollar = match[3];
  17. var rowStr = match[4];
  18. if (colStr.length > 3 || colStr.length === 3 && colStr > 'XFD') {
  19. // > XFD is the highest col number in excel 2007 and beyond, so this is a named range
  20. return refMatch;
  21. }
  22. var col = colCache.l2n(colStr);
  23. var row = parseInt(rowStr, 10);
  24. if (!colDollar) {
  25. col += to.col - offset.col;
  26. }
  27. if (!rowDollar) {
  28. row += to.row - offset.row;
  29. }
  30. var res = (sheet || '') + (colDollar || '') + colCache.n2l(col) + (rowDollar || '') + row;
  31. return res;
  32. }
  33. return refMatch;
  34. });
  35. }
  36. module.exports = {
  37. slideFormula: slideFormula
  38. };
  39. //# sourceMappingURL=shared-formula.js.map