You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							45 lines
						
					
					
						
							1.4 KiB
						
					
					
				
			
		
		
	
	
							45 lines
						
					
					
						
							1.4 KiB
						
					
					
				| const colCache = require('./col-cache');
 | |
| 
 | |
| // const cellRefRegex = /(([a-z_\-0-9]*)!)?[$]?([a-z]+)[$]?([1-9][0-9]*)/i;
 | |
| const replacementCandidateRx = /(([a-z_\-0-9]*)!)?([a-z0-9_$]{2,})([(])?/gi;
 | |
| const CRrx = /^([$])?([a-z]+)([$])?([1-9][0-9]*)$/i;
 | |
| 
 | |
| function slideFormula(formula, fromCell, toCell) {
 | |
|   const offset = colCache.decode(fromCell);
 | |
|   const to = colCache.decode(toCell);
 | |
|   return formula.replace(
 | |
|     replacementCandidateRx,
 | |
|     (refMatch, sheet, sheetMaybe, addrPart, trailingParen) => {
 | |
|       if (trailingParen) {
 | |
|         return refMatch;
 | |
|       }
 | |
|       const match = CRrx.exec(addrPart);
 | |
|       if (match) {
 | |
|         const colDollar = match[1];
 | |
|         const colStr = match[2].toUpperCase();
 | |
|         const rowDollar = match[3];
 | |
|         const rowStr = match[4];
 | |
|         if (colStr.length > 3 || (colStr.length === 3 && colStr > 'XFD')) {
 | |
|           // > XFD is the highest col number in excel 2007 and beyond, so this is a named range
 | |
|           return refMatch;
 | |
|         }
 | |
|         let col = colCache.l2n(colStr);
 | |
|         let row = parseInt(rowStr, 10);
 | |
|         if (!colDollar) {
 | |
|           col += to.col - offset.col;
 | |
|         }
 | |
|         if (!rowDollar) {
 | |
|           row += to.row - offset.row;
 | |
|         }
 | |
|         const res = (sheet || '') + (colDollar || '') + colCache.n2l(col) + (rowDollar || '') + row;
 | |
|         return res;
 | |
|       }
 | |
|       return refMatch;
 | |
|     }
 | |
|   );
 | |
| }
 | |
| 
 | |
| module.exports = {
 | |
|   slideFormula,
 | |
| };
 |