Excel ЧаВо

Как сделать автоподбор высоты строк для объединенных ячеек?


Как известно, метод AutoFit для подбора высоты объединенных ячеек не срабатывает. Для этого был придуман простой метод (взят отсюда и просто адаптирован под Delphi). Работает для объединенных ячеек в одной строке. Просто укажите одну из объединенных ячеек области (свойство WrapText должно быть включено).

Delphi:

procedure AutoFitMergedCellRowHeight(Rng: ExcelRange); var

mergedCellRgWidth: Single; rngWidth, possNewRowHeight: Single; i: Integer; begin

if Rng.MergeCells then begin

// здесь использована самописная функция перевода стиля R1C1 в A1

if xlRCtoA1(Rng.Row, Rng.Column) = xlRCtoA1( Rng.Range['A1', EmptyParam].Row, Rng.Range['A1', EmptyParam].Column) then Rng := Rng.MergeArea; with Rng do begin

if (Rows.Count = 1) and (WrapText) then begin

(Rng.Parent as _Worksheet).Application.ScreenUpdating[lcid] := False; rngWidth := Cells.Item[1, 1].ColumnWidth; mergedCellRgWidth := 0; for i := 1 to Columns.Count do

mergedCellRgWidth := Cells.Item[1, i].ColumnWidth + MergedCellRgWidth; MergeCells := False; Cells.Item[1, 1].ColumnWidth := MergedCellRgWidth; EntireRow.AutoFit; possNewRowHeight := RowHeight; Cells.Item[1, 1].ColumnWidth := rngWidth; MergeCells := True; RowHeight := possNewRowHeight; (Rng.Parent as _Worksheet).Application.ScreenUpdating[lcid] := True; end; // if

end; // with

end; // if

end; // procedure

// вызов

AutoFitMergedCellRowHeight(ASheet.Range['F3', EmptyParam]);

Конечно, функция должна быть вызвана для каждой строки, что, естественно, будет работать довольно долго. Поэтому старайтесь не использовать перенос текста в объединенных ячейках.



Содержание раздела