Конференция "Corba" » Определение размеров ячейки Excel в пикселях
 
  • engine © (31.10.07 10:46) [0]
    Добрый день!
    Уважаемые, кто сталкивался в получением размеров ячеек в таблице Excel'я в пикселях.
    Я для получения размеров использую следующие самописные функции, в «китайских тугриках»
    размеры получаю верные (
    GetCollumnWidth

    ), а при переводе в пиксели получаю несоответствие с тем что показывает Excel у колонки и с тем, что получаю я в
    ConvertWidthToPixels

    .
    Буду благодарен любым советам.

    type TFontAttributes  = record
      Name : String;
      Size : Integer;
      Style : TFontStyles;
      Color : TColor;
    end;

    &#133

    // Получение размеров текста в пикселях
    function GetTextSize (AText : String; FontAttr : TFontAttributes) : TSize;
    var ABitmap : TBitmap;
    begin
     with Result do
     begin
       cx := —1; //width
       cy := —1; //height
     end;

     ABitmap := TBitmap.Create;
     if pos(' Cyr', FontAttr.Name) > 0 then
        Delete(FontAttr.Name, pos(' Cyr', FontAttr.Name), 4);

     with ABitmap do
     begin
       with Canvas do
       begin
         with Font do
         begin
           Name  := FontAttr.Name;
           Size  := FontAttr.Size;
           if FontAttr.Style <> [] then
              Style := FontAttr.Style else
              Style := [];
           Color := FontAttr.Color;
         end;
         Result := TextExtent(AText);
       end;
       Free;
     end;
    end;

    // получение ширины колонки в «тугриках»
    function GetCollumnWidth (var WorkBook : Variant; ACol : Integer) : Single;
    begin
     Result := WorkBook.WorkSheets[1].Columns[ACol].ColumnWidth;
    end;

    // Перевод «тугриков» в пиксели
    function ConvertWidthToPixels(var ExcellApp : Variant; Width : Single) : Single;
    var  DefaultFont : TFontAttributes;
        i, j : Integer;
        Str : String;
    begin
     Result := &#151;1;

     DefaultFont.Name := ExcellApp.StandardFont;
     DefaultFont.Size := ExcellApp.StandardFontSize;

     Str := '';
     j := 0;
     if Width > 1 then
       for i := 1 to trunc(Width) do
         begin
           Str := Str + IntToStr(j);
           inc(j);
           if j = 10 then j := 0;
         end;

     Result := GetTextSize(Str, DefaultFont).cx +
               (Frac(Result)*
                GetTextSize(IntToStr(j),
                            DefaultFont).cx);
    end;


  • engine © (02.11.07 23:17) [1]
    > [0] engine ©   (31.10.07 10:46)

    Попробую задать вопрос по-другому:

    при ручном изменении размеров ячейки в Excel'е выводится хинт следующего содержания:
    Ширина: 8,43 (64 пиксел)

    Как получить пикселы, зная число 8,43?
 
Конференция "Corba" » Определение размеров ячейки Excel в пикселях
Есть новые Нет новых   [134430   +3][b:0][p:0.002]