Если вы не против использования 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