- sheet.moveColumns resolved its target sheet from `sheet`, or a
`Sheet!` range or cell, but its two protection checks were passed
only the `sheet` parameter, so a qualified range moved columns of
a protected sheet while the checks authorized the active one. Both
checks now get the resolved sheet index.
- check_protection compared only cell content, so a sort or duplicate
removal moving an unlocked cell with equal content onto a locked one
left the content as it was but made the cell editable. The commit
check now also refuses a change that leaves a previously locked cell
unlocked (effective lock, row and column formats included).