Шел 2019-й год... а MS Excel по-прежнему не научился рассчитывать высоту строки если в ней есть объединённые ячейки... И метод Range.AutoFit, который "Changes the height of the rows in the range to achieve the best fit", нас не спасёт.
Например, объединим ячейки A1 и B1 и поместим в них многострочный текст:
Var ea: TExcelApplication; ovRange: OleVariant; begin ... ovRange := ea.Range['A1', 'B1']; ovRange.Merge; ovRange.Value := '1'#13#10'2'#13#10'3'#13#10'4'#13#10'5'; ovRange.EntireRow.AutoFit;
Как видно на картинке, магии автоматизации не произошло - Excel ни на миллиметр не увеличил высоту строки. Даже вызов метода AutoFit не дал нам обещанный "best fit". Значит мы пойдем другим путем - рассчитаем высоту строки через временную ячейку:
Вызывать EntireRow.AutoFit для ovTemp нет необходимости - Excel растянет строку по высоте текста сам:Var ea: TExcelApplication; ovRange, ovTemp: OleVariant; begin ... ovRange := ea.Range['A1', 'B1']; ovRange.Merge; ovRange.Value := '1'#13#10'2'#13#10'3'#13#10'4'#13#10'5'; ovTemp := ea.Range['A15', 'A15']; // копируем форматирование ovTemp.Font.Name := ovRange.Font.Name; ovTemp.Font.Size := ovRange.Font.Size; ovTemp.Font.Bold := ovRange.Font.Bold; // копируем значение ovTemp.Value := ovRange.Value; //ovTemp.EntireRow.AutoFit; // копируем высоту ovRange.RowHeight := ovTemp.RowHeight; // убираем за собой ovTemp.EntireRow.Delete;
P.S. Для подобных расчетов я добавлял в отчет временный лист, который удалял перед его сохранением.
Комментариев нет:
Отправить комментарий