2011-05-06 23 views
2

프로그래밍 방식으로 노력하고 있습니다 (C++이지만 VBA 설명은 괜찮습니다). Excel 셀의 크기를 픽셀 단위로 가져옵니다. Excel 응용 프로그램 GUI는 셀 크기를 다음과 같이 표시합니다.
너비 : 8.28 (160 픽셀) 높이 : 24.6 (41 픽셀), 글꼴은 Arial 20 pt입니다.
columnwidth 결과 : 8.3, rowHeight를 : 24.6
범위 폭 : 내가 PointsToScreenPixelsX 및 PointsToScreenPixelsY를 사용하여 시도 24.6Excel 셀의 크기를 픽셀 단위로 가져옵니다.

96, 범위 높이 나는를 얻을 수 있습니다 엑셀 범위를 사용

위의 모든 값에 대해 그들은 엑셀 gui가 말한 것과 일치하지 않는 값을 반환했습니다 (행/셀 높이에 대해 , 1 열 폭에 대해서는 36이고, 열 폭에 대해서는).

아이디어가 있으십니까?

+1

그 펑키 값은 트윕 단위 측정 (아마 http://en.wikipedia.org : 그냥 경우에 당신이 이제까지이 무작위로 개별 단위 사이의 변환이 필요합니다, 여기에 VBA 기능의 몇 그렇게 할 수 있습니다/wiki/Twip). 트윕을 픽셀로 변환하려면이 Microsoft 문서를 확인하십시오. http://support.microsoft.com/kb/94927 – ray

답변

5

포인트 변환은 DPI 설정에 따라 다릅니다. 인치당 72 포인트가 있기 때문에 96 포인트가 4/3 인치라면 DPI (디스플레이 등록 정보에서)가 120이면 160 픽셀로 작동합니다.

즉, pixels = points * DPI/72입니다.

그러나 이것은 확대/축소를 고려하지 않습니다. Excel에서 ActiveWindow.Zoom은 백분율이므로 인스턴스 200은 보통 크기의 두 배입니다. UI에는 여전히 확대되지 않은 픽셀이 표시됩니다.

-1

이 예에서는 활성 창에서 선택된 셀의 높이 (픽셀 단위)의 폭을 결정하고, 그리고 lWinWidth lWinHeight 변수의 값을 반환한다.

With ActiveWindow 
    lWinWidth = PointsToScreenPixelsX(.Selection.Width) 
    lWinHeight = PointsToScreenPixelsY(.Selection.Height) 
End With 
+0

내가 얻은 이상한 값을 설명 할 수 있습니까? (이것은 내가 제안한 것을 정확하게 사용하려고 시도한 내 게시물에 자세히 설명되어 있습니다 ...) –

+0

+1. 이것은 나를 위해 작동하지만, 단지 대략입니다. :) 새 시트를 시작하고 A1 셀에 기본 Calibri 11 글꼴로 쓰여진 너비가 있으면 셀에 108이 표시되고 Excel UI에 109가 표시됩니다. 글꼴 크기를 20으로 늘리면 셀에 119가 표시되고 UI는 나를 124 보여줍니다. 나는 이것이 글꼴 문자 패딩과 비례 글꼴 물건을이 시점에서 점점 생각합니다 ... –

+0

이것은 OP가 그가 이미 시도했다라고하지 않습니까? –

1

영업 진술 :

폭 : 8.28 (160 픽셀) 신장 24.6 (41 개 픽셀), 폰트

엑셀 어플리케이션 GUI가 같은 셀의 크기를 나타낸다 Arial 20 pt입니다.

첫째 날 명확하게 다음 어플리케이션 GUI는 경우, 이러한 요소 중 어떤 무관 등 폰트 크기, 화면 크기, 줌의 소수 측정 화소 측정 열 너비와 높이를 나타낸다 Excel 열 너비는 8.43이고, 은 항상이고 64 픽셀은입니다. 둘째로, Excel의 버전 (현재 2010)과 내가 기억할 수있는 모든 이전 버전의 표준 열 너비가 8.43과 동일하기 때문에 약간 혼란 스럽습니다. 픽셀; 마찬가지로 표준 행 높이가 15 인 경우는 20 픽셀이며 OP의 예와 일치하지 않습니다.

한 포스터는 "왜?"라고 물었습니다. 이유 중 하나는 열 너비 또는 행 높이를 조정할 경우 Excel에서는 개의 이산 단위픽셀이라는 이름을 사용하기로 결정했습니다. 어쩌면 그들은 초기 버전의 픽셀과 관련이 있을지 모르지만 사용 된 단위만큼 랜덤하게 보입니다. 8.43은 무엇입니까, 인치, 피카입니까? 트윕이 아니라 확실합니다! 여기서 이것을 십진 단위이라고합니다.

어쨌든, 모든 열 너비가 1.00 이상인 경우 해당 이산 픽셀 단위는 10 진수 단위의 1/7입니다. 기괴하게도 1.00 이하의 열 너비는 12 단위로 나뉩니다. 2.00

0.08, 0.17, 0.25, 0.33, 0.42, 0.5, 0.58, 0.67, 0.75, 0.83, 0.92, 1.00, 
1.14, 1.29, 1.43, 1.57, 1.71, 1.86, 2.00 

19 개 화소 대등 다음과 같다 : 따라서, 2.00 소수점 유닛까지의 불연속 폭이다. 예, 당신이 불신앙으로 머리를 흔들면서 멈추지 만, 그것이 그들이 그것을 만든 방법입니다.

다행히도 행 높이가보다 균일 해 보이며 1 픽셀은 10 진수 단위가 0.75입니다. 10 픽셀 7.50; 표준 행 높이 20 픽셀 15.00; 등등.

Function ColumnWidthToPixels(ByVal ColWidth As Single) As Integer 
    Select Case Round(ColWidth, 4)  ' Adjust for floating point errors 
    Case Is < 0: 
     ColumnWidthToPixels = ColumnWidthToPixels(ActiveSheet.StandardWidth) 
    Case Is < 1: 
     ColumnWidthToPixels = Round(ColWidth * 12, 0) 
    Case Is <= 255: 
     ColumnWidthToPixels = Round(12 + ((Int(ColWidth) - 1) * 7) _ 
      + Round((ColWidth - Int(ColWidth)) * 7, 0), 0) 
    Case Else: 
     ColumnWidthToPixels = ColumnWidthToPixels(ActiveSheet.StandardWidth) 
    End Select 
End Function 

Function PixelsToColumnWidth(ByVal Pixels As Integer) As Single 
    Select Case Pixels 
    Case Is < 0: 
     PixelsToColumnWidth = ActiveSheet.StandardWidth 
    Case Is < 12: 
     PixelsToColumnWidth = Round(Pixels/12, 2) 
    Case Is <= 1790: 
     PixelsToColumnWidth = Round(1 + ((Pixels - 12)/7), 2) 
    Case Else: 
     PixelsToColumnWidth = ActiveSheet.StandardWidth 
    End Select 
End Function 
관련 문제