web-dev-qa-db-ja.com

グラフの幅と高さをピクセル単位で設定するにはどうすればよいですか?

ChartObjectまたはそのShapeの幅と高さを設定しても機能しません。どちらも、埋め込まれたグラフである白い長方形の内側の部分にすぎないようです。また、ChartAreaは私が興味を持っているオブジェクトではないようです。

次の例でエクスポートされたファイルのサイズを800x600にします(サイズが誤って収まるまで、エクスポートされた画像や試行錯誤を再スケーリングするつもりはありません)。私が見落としたチャートの周りに何かオブジェクトがあるに違いありません。

Sub mwe()

Dim filepath As String
Dim sheet As Worksheet
Dim cObj As ChartObject
Dim c As Chart
Dim cShape As Shape
Dim cArea As chartArea

filepath = Left(ThisWorkbook.FullName, InStrRev(ThisWorkbook.FullName, "\"))
Set sheet = ActiveSheet
Set cObj = sheet.ChartObjects(1)
Set c = cObj.chart
Set cShape = sheet.Shapes(cObj.Name)
Set cArea = c.chartArea

cObj.Width = 800
cObj.Height = 400
MsgBox cArea.Width & " x " & cArea.Height  '793x393
c.Export filepath & "test1.png"            '1067x534, this is also the size on screen

cShape.Width = 800
cShape.Height = 400
MsgBox cArea.Width & " x " & cArea.Height  '794x393
c.Export filepath & "test2.png"            '1068x534, this is also the size on screen

End Sub

更新:

同じChartObjectに属するShapeChartはすでに親としてWorksheetを持っていますが、幅と高さはピクセル単位ではなく、ポイント。1ポイント= 1/72インチであり、ほとんどの場合、Windowsは1インチあたり96ピクセルを想定しているようです。

スティーブのコメントのおかげで、私は現在、非常に信頼できる以下を使用しています。

エクスポート時にアクティブ化されていないChartObjectは、幅と高さが本来より1大きいファイルを生成しているようです。

要因を決定する方法を見つけることはまだ残っていますpx2ptHおよびpx2ptV自動的に。

Sub mwe()

Dim filepath As String
Dim sheet As Worksheet
Dim cObj As ChartObject
Dim c As Chart

Dim px2ptH As Double: px2ptH = 72 / 96
Dim px2ptV As Double: px2ptV = 72 / 96
Dim w As Double: w = 800 * px2ptH
Dim h As Double: h = 400 * px2ptV

filepath = Left(ThisWorkbook.FullName, InStrRev(ThisWorkbook.FullName, "\"))
Set sheet = ActiveSheet
Set cObj = sheet.ChartObjects(1)
Set c = cObj.Chart

'otherwise image size may deviate by 1x1
cObj.Activate

cObj.Width = w
cObj.Height = h

c.Export filepath & "test.png"

End Sub
6
peter

寸法はピクセルではなくポイント単位です。 72ポイントはインチです。

800ピクセル/ 72 = 11.11111 ....エクスポートされた画像のサイズは、インチ単位のサイズ/コンピューターのディスプレイのdpiで、通常は96です(あなたの場合のように、常に信頼できるとは限りません)。 .. WIN API呼び出しを使用して現在の値を見つける)

Randy Birchは、WinAPI呼び出しにアクセスして画面解像度などを取得するために使用できるコードを公開しています。

http://vbnet.mvps.org/index.html に移動し、左側の検索機能を使用してGETDEVICECAPSを検索します

10
Steve Rindsberg