Мониторинг обменных курсов валют
18c0693f

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


Как известно, метод 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]);

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






Самый выгодный курс обмена валюты