I want to replace the first 104 digits as it follows:

    1    -->   a
    ...
    26   -->   z
    27   -->   aa
    ...
    52   -->   az
    53   -->   ba
    ...
    104  -->   bz

I have tried as it follows:

    (defun digits-to-letters ()
      (interactive)
    
      (goto-char (point-min))
    
      (save-excursion
        (save-restriction
          (narrow-to-region (search-forward "\\title" nil t)
    			(search-forward "\\abstract" nil t))
    
          (goto-char (point-min))
    
          (while (search-forward-regexp "\\([0-9]+\\)" nil t)
     	  (setq digit (match-string 0))
    
    	;; 1-26 to a-z
    	(if (< digit 27)
    	    (perform-replace digit
    			     `((lambda (data count)
    				     (string (+ (1- ?a) digit))))
    			     t t nil 1 nil (point-min) (point-max))
    
    	  ;; 27-52 to aa-az
    	  (if (and (> digit 26)
    		   (< digit 53))
    	       (perform-replace digit
    			       `((lambda (data count)
    				      (string (+ (1- ?a) (concat "a"
    							                      digit)))))
    			       t t nil 1 nil (point-min) (point-max))
    
    	    ;; 53-104 to ba-bz
    	    (if (and (> digit 52)
    		     (< digit 105))
    		     (perform-replace "\\([0-9]+\\)"
    				 `((lambda (data count)
    				     (string (+ (1- ?a) (concat "b"
    								                digit)))))
    				 t t nil 1 nil (point-min) (point-max))
    	      )))
    	))))

It gives me the following error:

    Debugger entered--Lisp error: (wrong-type-argument number-or-marker-p #("1" 0 1 (fontified t)))

P.S. I have just asked something like this, but for the first 26 digits: <https://emacs.stackexchange.com/questions/48327/how-to-replace-a-digit-by-a-letter>.

**Updates**

There is a mistake in the correspodence between digits and letters:

    53   -->  ba
    ...
    78   -->  bz
    79   -->  ca
    ...
    104  -->  cz 

I have corrected my code as it follows:

    (defun digits-to-letters ()
      (interactive)
      
      (goto-char (point-min))
      
      (save-excursion
        (save-restriction
          (narrow-to-region (search-forward "\\title" nil t)
        			(search-forward "\\abstract" nil t))
          
          (goto-char (point-min))
          
          (while (search-forward-regexp "\\([0-9]+\\)" nil t)
    	    (setq digit (string-to-number (match-string 0)))
            (setq sdigit (match-string 0))
    	
        	;; 1-26 to a-z
        	(if (< digit 27)
    	    (replace-match (string (+ (1- ?a) digit)))
    	  
        	  ;; 27-52 to aa-az
        	  (if (and (> digit 26)
        		   (< digit 53))
        	      (replace-match (concat
    			                  "a"
    			                  (string (+ (1- ?a) (- digit 26)))))
    	    
        	    ;; 53-78 to ba-bz
        	    (if (and (> digit 52)
        		     (< digit 79))
    		         (replace-match (concat
    				                 "b"
    				                 (string (+ (1- ?a) (- digit 52)))))
    
    	          ;; 79-104 to ba-bz
        	      (if (and (> digit 78)
        		       (< digit 105))
    		           (replace-match (concat
    				                   "c"
    				                   (string (+ (1- ?a) (- digit 78)))))
    
    		))))
    	
    	))))

Now it works.