mmm c'è un po' di confusione...

tbody.appendChild(row);
var cells = tbody.getElementsByTagName("TD");
var totcel = cells.length/tbody.rows.length;

cioè calcoli il numero di celle per riga DOPO aver aggiunto una riga vuota? Inoltre, ma su questo non sono sicuro, tbody.getElementsByTagName("TD") può essere case sensitive (cioè fa differenza tra TD e td), dovresti fare delle prove, per vedere.