Если вы не против использования VBA в вашей электронной таблице, это возможно. Во-первых, если у вас еще нет вкладки «Разработчик» на ленте, перейдите в «Файл» -> «Параметры», «Настроить ленту» и в правой панели выберите «Разработчик», затем нажмите «ОК». Затем перейдите на вкладку Разработчик, затем Visual Basic. С левой стороны дважды щелкните по этой книге и вставьте приведенный ниже код. При необходимости измените конфигурацию. Теперь, когда вы щелкаете, чтобы сохранить вашу книгу, строки автоматически подстраиваются под указанные параметры.
Стоит отметить возможность размещения более 31 строки на странице, несмотря на другие вычисления; используя обычные поля Excel и верхний / нижний колонтитул, 34 строки помещаются на странице. Изменив поля и верхний / нижний колонтитулы на 0, на странице помещается 31 строка. 
По этой причине я предлагаю двойную проверку с предварительным просмотром и соответственно уменьшить RowsPerPage, если у вас больше строк, чем ожидалось на страницу. Существует только так много разрешения для фактической установки высоты строк, поэтому, к сожалению, это не идеально. Надеюсь, это поможет, в любом случае.
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
        ' Configuration
        RowsPerPage = 31            ' number of rows per page, as stated in question
        NumberOfPages = 1           ' how many pages of data you have
        NumberOfSheets = 1          ' How many spreadsheets are in use
        TargetPageHeight = 29.7     ' A4 height in cm
        ' Don't change anything below here
        TargetPageHeight = Application.CentimetersToPoints(TargetPageHeight)
        TotalRowCount = NumberOfPages * RowsPerPage + 1 'Resize beyond the specified area so a smaller row doesn't sneak in
        For sheetIndex = 1 To NumberOfSheets
            AvailablePageHeight = TargetPageHeight
            With Worksheets(sheetIndex).PageSetup
                AvailablePageHeight = AvailablePageHeight - (.TopMargin + .BottomMargin + .HeaderMargin + .FooterMargin)
            End With
            OptimalRowHeight = AvailablePageHeight / RowsPerPage
            currentIndex = 1
            With Worksheets(sheetIndex)
                While currentIndex <= TotalRowCount
                    Rows(currentIndex).RowHeight = OptimalRowHeight
                    currentIndex = currentIndex + 1
                Wend
            End With
        Next sheetIndex
End Sub