Fastreport 4 Export Xls

отредактировано 15:40 Раздел: FastReport 4.0
Добрый день!
Помогите разобраться с проблемой. Обнаружил баг в fr4 при экспорте в xls не верно экспортируется вид границы Frame. Всегда вида Solid формирует, хотя в фастрепорте указываю другие.
Начил копать исходник, добрался до проблемного места, но не знаю как получить вид фрейма чтобы его обрабатывать.

(то что закоментировано мои попытки сделать чтобы работало)
procedure TfrxExcel.ApplyFrame(const RangeCoord: String; aFrame: Byte);
var
  vFrame: TfrxFrameTypes;
//  vFrameStyle: TfrxFrameStyles;
  vBorders: Variant;
begin
  try
    if aFrame <> 0 then
      if Length(RangeCoord) > 0 then
      begin
        ShowMessage(RangeCoord);
        vFrame := ByteToFrameTypes(aFrame);
//        vFrameStyle := ByteToFrameStyles(aFrame);
        vBorders := WorkSheet.Range[RangeCoord].Cells.Borders;
{        if ftLeft in vFrame then
          begin
            if fsSolid in vFrameStyle then
              vBorders.Item[xlEdgeLeft].Linestyle := xlSolid;
            if fsDash in vFrameStyle then
              vBorders.Item[xlEdgeLeft].Linestyle := $FFFFEFED;
            if fsDot in vFrameStyle then
              vBorders.Item[xlEdgeLeft].Linestyle := $FFFFEFEA;
            if fsDashDot in vFrameStyle then
              vBorders.Item[xlEdgeLeft].Linestyle := 1;//$00000004;
            if fsDashDotDot in vFrameStyle then
              vBorders.Item[xlEdgeLeft].Linestyle := 1;//$00000005;
            if fsDouble in vFrameStyle then
              vBorders.Item[xlEdgeLeft].Linestyle := $FFFFEFE9;
          end;

        if ftRight in vFrame then
          begin
            if fsSolid in vFrameStyle then
              vBorders.Item[xlEdgeRight].Linestyle := xlSolid;
            if fsDash in vFrameStyle then
              vBorders.Item[xlEdgeRight].Linestyle := $FFFFEFED;
            if fsDot in vFrameStyle then
              vBorders.Item[xlEdgeRight].Linestyle := $FFFFEFEA;
            if fsDashDot in vFrameStyle then
              vBorders.Item[xlEdgeRight].Linestyle := $00000004;
            if fsDashDotDot in vFrameStyle then
              vBorders.Item[xlEdgeRight].Linestyle := $00000005;
            if fsDouble in vFrameStyle then
              vBorders.Item[xlEdgeRight].Linestyle := $FFFFEFE9;
          end;
//          vBorders.Item[xlEdgeRight].Linestyle := xlSolid;
        if ftTop in vFrame then
          begin
            if fsSolid in vFrameStyle then
              vBorders.Item[xlEdgeTop].Linestyle := xlSolid;
            if fsDash in vFrameStyle then
              vBorders.Item[xlEdgeTop].Linestyle := $FFFFEFED;
            if fsDot in vFrameStyle then
              vBorders.Item[xlEdgeTop].Linestyle := $FFFFEFEA;
            if fsDashDot in vFrameStyle then
              vBorders.Item[xlEdgeTop].Linestyle := $00000004;
            if fsDashDotDot in vFrameStyle then
              vBorders.Item[xlEdgeTop].Linestyle := $00000005;
            if fsDouble in vFrameStyle then
              vBorders.Item[xlEdgeTop].Linestyle := $FFFFEFE9;
          end;
//              vBorders.Item[xlEdgeTop].Linestyle := xlSolid;
        if ftBottom in vFrame then
          begin
            if fsSolid in vFrameStyle then
              vBorders.Item[xlEdgeBottom].Linestyle := xlSolid;
            if fsDash in vFrameStyle then
              vBorders.Item[xlEdgeBottom].Linestyle := $FFFFEFED;
            if fsDot in vFrameStyle then
              vBorders.Item[xlEdgeBottom].Linestyle := $FFFFEFEA;
            if fsDashDot in vFrameStyle then
              vBorders.Item[xlEdgeBottom].Linestyle := $00000004;
            if fsDashDotDot in vFrameStyle then
              vBorders.Item[xlEdgeBottom].Linestyle := $00000005;
            if fsDouble in vFrameStyle then
              vBorders.Item[xlEdgeBottom].Linestyle := $FFFFEFE9;
          end;}
//          vBorders.Item[xlEdgeBottom].Linestyle := xlSolid;

          vBorders.Item[xlEdgeLeft].Linestyle := xlSolid;
          vBorders.Item[xlEdgeRight].Linestyle := xlSolid;
          vBorders.Item[xlEdgeTop].Linestyle := xlSolid;
          vBorders.Item[xlEdgeBottom].Linestyle := xlSolid;
      end;
  except
  end;
end;

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

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