I have come to the realisation that to determine the total number of columns in an OpenDocument spreadsheet, you must first read each row whilst keeping a running count:
int maximumLength = 0;
while (IsReadingRows) {
var row = ReadNextRow();
rowList.Add(row);
maximumLength = Math.Max(maximumLength, row.Length);
}
After rows have been read, and the maximum length is known, add empty cells to each of the read rows:
foreach (var row in rowList)
while (row.Length < maximumLength)
row.AddCell();