проблема с экспортом Excel

отредактировано 16:55 Раздел: FastReport 4.0
Есть отчет, который на эране помещается в 2 страницы. Выгружаю в Excel, отчет по ширине не умещается на страницу, и страниц разрастается до 6. При этом второй лист вообще пустой. Столбцы в пикселях меньше, чем ширина тех полей, которые находятся в отчете. Хотя я знаю, что у Excel есть проблемы с назначением ширины у ячеек. Но тем более не понятно, раз ширина ячеек меньше, почему вся таблица не умещается. И почему второй лист пустой, а продолжение таблицы на третьей.

Комментарии

  • отредактировано 16:55
    Так как никто не заинтерисовался этим вопросом, значит сама себе отвечу )))
    Дело в том, что в процессе экспорта (а именно функциях ExportPage_Fast и ExportPage) есть строчка
    dcol := (FMatrix.GetXPosById(x) - FMatrix.GetXPosById(x - 1)) / Xdivider;
    
    где Xdivider=8. Это очень грубое приближение для перевода пикселей в точки. Такое приближение дает погрешность особенно при широких ячейках. Поэтому если посмотреть по какой закономерности пиксели соотносятся с точками в excel, то можно заметить достаточно хитрую систему. Где начиная с 12 пикселей появляется переодичность дискретных значений в точках excel. Даже если программно задать другое значение, то он его программно подгонит к ближайшему дискретному значению. Поэтому для точного перевода я добавила следующий алгоритм
    function PixcelToXLSPoint (Value : Extended) : Extended;
    var arrXLSWidth : array [1..6] of Extended;
        intValue : Integer;
    begin
      arrXLSWidth[1] := 0.14;       arrXLSWidth[2] := 0.29;
      arrXLSWidth[3] := 0.43;       arrXLSWidth[4] := 0.57;
      arrXLSWidth[5] := 0.71;       arrXLSWidth[6] := 0.86;
      intValue := Trunc(Value)-12;
      if Value < 12 then
        Result := Value * 0.083
      else
       Result := 1.00 + (intValue div 7) + arrXLSWidth[intValue mod 7]
    end;
    
    Для ширины меньше 12 пикселей, наилучшее приближение дает коэффициент 0,083.

    На форуме нашла обсуждение на это тему http://sql.ru/forum/actualthread.aspx?tid=...el+%e4%fe%e9%ec
    Но у меня несколько не совпадает, во-первых у меня у периодичности кратность 7, а не 6. Там говорится зависит от соотношения точек на дюйм, у меня на машине стоит 96, поставила 72, все равно ничего не изменилось. Может кто сможет проверить, верен ли этот алгоритм при других настройках.
    Очень хотелось бы, что бы РАЗРАБОТЧИКИ обратили на это внимание. И заодно на поля, поля тоже косячат, но я пока не могу понять где их исправить. Может подскажете где порытся нужно.

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.