CftClub.ru
Клуб специалистов ЦФТ-Банк

OOXML автоподбор высоты объединённых ячеек XLSX

 
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Справочник PL/PLUS: Функции, примеры, приёмы
Предыдущая тема :: Следующая тема  
Автор Сообщение
mikeya1
Участник


Вступление в Клуб: 26.11.2023
СообщениеПн Ноя 27, 2023 20:03   OOXML автоподбор высоты объединённых ячеек XLSX Ответить с цитатой
Полезность: Нет оценки
Столкнулся с проблемой автоподбора высоты многострочного текста, хранящегося в объединённой ячейке. Имеющиеся функции get_height_row и get_height_row_with_font работают с большой погрешностью.
В идеале, скопировал текст в одну ячейку, задал ей общую ширину группы объединённых ячеек. Но после автоподстройки высоты строки не получается считать значение - всегда получаю стандартные 15. Я так понимаю, что это связано с тем, что высота временная и после удаления текста в ячейке её высота сразу схлопывается до 15.
А вот если строке принудительно задать значение, то оно будет постоянным и не схлапываться при удалении текста.

Кто смог решить данную проблему? Подскажите в какую сторону смотреть.
Эмиралька
Эксперт


Вступление в Клуб: 09.11.2015
СообщениеВт Ноя 28, 2023 16:34   Re: OOXML автоподбор высоты объединённых ячеек XLSX Ответить с цитатой
Полезность: Нет оценки
mikeya1 пишет:
Столкнулся с проблемой автоподбора высоты многострочного текста, хранящегося в объединённой ячейке. Имеющиеся функции get_height_row и get_height_row_with_font работают с большой погрешностью.
В идеале, скопировал текст в одну ячейку, задал ей общую ширину группы объединённых ячеек. Но после автоподстройки высоты строки не получается считать значение - всегда получаю стандартные 15. Я так понимаю, что это связано с тем, что высота временная и после удаления текста в ячейке её высота сразу схлопывается до 15.
А вот если строке принудительно задать значение, то оно будет постоянным и не схлапываться при удалении текста.

Кто смог решить данную проблему? Подскажите в какую сторону смотреть.


Код:

/**   Функция преобразует ширину ячейки в пикселях в воспринимаемое функционалом OOXML значение в символах.
  *   p2s - это сокращение от PixelsToSymbols.
  *
  *   Ширина (но не высота) ячеек в Excel измеряется в символах (а в скобках отображается ширина в пикселях).
  *   1 символ - это среднее число знаков цифр 0-9 стандартного шрифта, помещающихся в ячейке.
  *   В ячейке шириной в 10 символов отображается весь набор цифр.
  *
  *   И для информации: 1 пиксель - это 1/72 от дюйма;
  *   1 дюйм - это 1/2.54 от сантиметра.
  */
function p2s(p_pix integer) return number is
begin
   if p_pix < 12 then
      return round(p_pix / 12, 2);
   end if;

   return round(1 + ( p_pix - 12 ) / 7, 2);
end;



--   Функция приблизительно определяет, во сколько строк влезет указанный в p_text текст
function GetRowsOfText(
   p_num      integer
,   p_text      varchar2
) return integer is
   recStyle   tp_rec_style;
   iWidth      integer;
   iRet      integer;
begin
   recStyle   :=   ltiStyles(p_num);

   iWidth   := recStyle.i_width * recStyle.i_size;
   iWidth   := p2s(iWidth);

   iRet := ceil(nvl(length(p_text), 0) / iWidth);
   debug_pipe('текст "'||p_text||'" в колонке '||p_num||' будет располагаться на '||iRet||' строк', 10);
   return   iRet;
end;
.

Из кода оперативного отчёта "Выписка для ФНС"
Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Справочник PL/PLUS: Функции, примеры, приёмы Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Рейтинг@Mail.ru