Добрый день!
Уважаемые, кто сталкивался в получением размеров ячеек в таблице Excel'я в пикселях.
Я для получения размеров использую следующие самописные функции, в «китайских тугриках»
размеры получаю верные (
GetCollumnWidth
), а при переводе в пиксели получаю несоответствие с тем что показывает Excel у колонки и с тем, что получаю я в
ConvertWidthToPixels
.
Буду благодарен любым советам.
type TFontAttributes = record
Name : String;
Size : Integer;
Style : TFontStyles;
Color : TColor;
end;
…
function GetTextSize (AText : String; FontAttr : TFontAttributes) : TSize;
var ABitmap : TBitmap;
begin
with Result do
begin
cx := —1;
cy := —1;
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 := —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;