Function: ses-repair-cell-reference-all
ses-repair-cell-reference-all is an interactive and byte-compiled
function defined in ses.el.gz.
Signature
(ses-repair-cell-reference-all)
Documentation
Repair cell reference and warn if there was some reference corruption.
Key Bindings
Source Code
;; Defined in /usr/src/emacs/lisp/ses.el.gz
(defun ses-repair-cell-reference-all ()
"Repair cell reference and warn if there was some reference corruption."
(interactive "*")
(let (errors)
;; Step 1, reset :ses-repair-reference cell property in the whole sheet.
(dotimes (row ses--numrows)
(dotimes (col ses--numcols)
(let ((references (ses-cell-property-pop :ses-repair-reference
row col)))
(when references
(push (list (ses-cell-symbol row col)
:corrupt-property
references)
errors)))))
;; Step 2, build new.
(dotimes (row ses--numrows)
(dotimes (col ses--numcols)
(let* ((cell (ses-get-cell row col))
(sym (ses-cell-symbol cell))
(formula (ses-cell-formula cell))
(new-ref (ses-formula-references formula)))
(dolist (ref new-ref)
(let ((rowcol (ses-sym-rowcol ref)))
(cl-pushnew sym (ses-cell-property :ses-repair-reference
(car rowcol)
(cdr rowcol))))))))
;; Step 3, overwrite with check.
(dotimes (row ses--numrows)
(dotimes (col ses--numcols)
(let* ((cell (ses-get-cell row col))
(irrelevant (ses-cell-references cell))
(new-ref (ses-cell-property-pop :ses-repair-reference cell))
missing)
(dolist (ref new-ref)
(if (memq ref irrelevant)
(setq irrelevant (delq ref irrelevant))
(push ref missing)))
(ses-set-cell row col 'references new-ref)
(when (or missing irrelevant)
(push `( ,(ses-cell-symbol cell)
,@(and missing (list :missing missing))
,@(and irrelevant (list :irrelevant irrelevant)))
errors)))))
(if errors
(warn "----------------------------------------------------------------
Some references were corrupted.
The following is a list where each element ELT is such
that (car ELT) is the reference of cell CELL with corruption,
and (cdr ELT) is a property list where
* property `:corrupt-property' means that
property `:ses-repair-reference' of cell CELL was initially non
nil,
* property `:missing' is a list of missing references
* property `:irrelevant' is a list of non needed references
%S" errors)
(message "No reference corruption found"))))