• 締切済み

エクセルグラフがピクチャボックスに上手く表示しない

vb.netにて。。。 excelのグラフをピクチャーボックスにて 表示するプログラムを組んでおります。 使用するexcelは、excel2007(.xlsx形式)とexcel2002(.xls形式)です。 パソコンによって、入っているexcelが違うので、 どちの形式でも実行できるようにしたいです。 (問題) 2007では、正規のものがちゃんと表示されますが、 2002では、グラフの1/4程度の部分しか表示されません。      'クリップボードを初期化 Clipboard.Clear()       'クリップボードにコピー Dim ChartSheet As Object Dim ChartSheets As Object = objWorkBook.Sheets Dim Chartobj As Object 'Dim ChartGraph As Object ChartSheet = objWorkBook.Sheets((exlsht)) Chartobj = ChartSheet.ChartObjects((exlgra)) Chartobj.CopyPicture(Appearance:=1, Format:=2) System.Threading.Thread.Sleep(2000) Application.DoEvents() '---------- クリップボード経由でPictureに貼り付け ------------------ If Clipboard.ContainsImage() Then 'クリップボードにあるデータの取得 Dim img As Image = Clipboard.GetImage() If img IsNot Nothing Then System.Threading.Thread.Sleep(2000) 'データが取得できたときは表示する Form_PictureBox.PictureBox1.AutoSize = True Form_PictureBox.PictureBox1.Image = img System.Threading.Thread.Sleep(2000) End If End exlshtは.xlsx形式か.xls型式かを選択したものが exlgraは”グラフ1”を指定します。 クリップブックを使用してみてみると、 その段階で1/4程度のものをコピーしています。 Chartobj.CopyPicture ではだめなのでしょうか? ちなみに、エクセルの参照をすると、 2002ではえらーになるので、 Object型式で呼び出しています。 非常に困っております。 よろしくご教授願います。

みんなの回答

回答No.1

>2007では、正規のものがちゃんと表示されますが、 >Chartobj.CopyPicture(Appearance:=1, Format:=2) Excel 2007 の CopyPicture では、ビットマップ形式でクリップボードにコピーはできなかった はずですが? 実行環境と、グラフの作成環境をごっちゃにして質問していませんか? (質問内容には、5W1H を含めて質問しないと相手に伝わりません。) 又、下記のような事をしていると回答を得られません。 http://moug.net/faq/viewtopic.php?t=55295&sid=b17ef673c2852888f0c79882b22ef911

関連するQ&A

  • VB.NET ピクチャーボックスのImageの一部をクリップボードにコピー

    Picturebox1.Image = New Bitmap(Picturebox1.Width, Picturebox1.Height) Dim g As Graphics = Graphics.FromImage(Picturebox1.Image) これ以降 g.DrawLine 等で描画を行っています そして、ピクチャーボックスの一部の領域(矩形)を指定して クリップボードにコピーしたいのですがどうしたらいいでしょうか よろしくお願いします 他のピクチャーボックスにその一部をコピーできるだけでもいいのですが

  • 式はメソッドではありませんと表示されます。

    特定の文字を検出すうrと、それに応じた画像が表示されるように プログラムしたのですが、タイトルのようにエラーが出ます。 宣言をしないと「宣言が必要」で、宣言をするとタイトルのように。 正直、全くの初心者なのでタイトルが何を言っているのか全く分かりません。 ネットでも調べましたが、詳しくは分からず……。 ここならばと思い、投稿しました。 問題部分は下記の「DrawFadedImage」部分です。 エラー修正オプションをしても同じように出ます。 ElseIf InStr(Mainlabel.Text, "テスト") Then Mainlabel.Text = Replace(Mainlabel.Text, "テスト", "") Savepic = 51 'PictureBox1のGraphicsオブジェクトを取得 Dim g As Graphics = PicC.CreateGraphics() '画像を読み込む Dim img As Image = Image.FromFile("Data\Pic\132.ELS") 'フェードイン Dim i As Integer For i = 1 To 10 Console.WriteLine((i * 0.1F)) DrawFadedImage(g, img, i * 0.1F) System.Threading.Thread.Sleep(1) PicC.Image = img Next i

  • フォームのピクチャーボックスの内容の退避

    動的に変わるピクチャーボックスの内容を以下の配列変数に設定したいのです。 dim Pct(X) as picturebox set pct(X) = form1.picture1 同じピクチャーボックスを表示したい場合は、以下のように変数から画面に設定したいのです。 set form1.picture1 = pict(X) が、退避しているはずなのに、全てがおなじピクチャーになってしまいます。 そんなことってありますか? 私が間違っているところがあれば、教えてください。 ピクチャーの内容は、VBからExcelのグラフを編集した後、クリップボード経由でピクチャーボックスに貼り付けたものです。

  • ピクチャボックスの描画内容をファイル出力

    VB2005を使用しています。 BufferedGraphicsContextクラスと、BufferedGraphicsクラスを使用して ダブルバッファでピクチャボックスに絵を書くプログラムを作成しています。 絵は問題なく描けるのですが、それをBMPファイル、もしくはクリップボードに転送したいのですが、どうしたらいいかわかりません。 ご指導お願いします。 参考に描画のコードを載せておきます。 Public Class Form1 Private currentContext As BufferedGraphicsContext Private myBuffer1 As BufferedGraphics Private Dpen As Pen Private Sub ToolStripButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripButton1.Click '描画 Dpen = New Pen(Color.Black, 5) myBuffer1.Graphics.Clear(Color.FromArgb(255, 255, 255, 255)) myBuffer1.Graphics.DrawLine(Dpen, 0, 0, 200, 200) myBuffer1.Render(PictureBox1.CreateGraphics) End Sub Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load currentContext = BufferedGraphicsManager.Current myBuffer1 = currentContext.Allocate(PictureBox1.CreateGraphics, PictureBox1.DisplayRectangle) End Sub End Class

  • C++/CLIを用いて画像をクリップボードにコピー

    VC++でC++/CLIでアプリケーションを作成しています。 そこで,pictureBox1の画像を,クリップボードにコピーしたいのですが,方法が分からず困っています。 Clipboard::SetDataObject(); の () の中に何を渡せばいいのでしょうか?

  • VB2005でクリップボードにコピー

    VB2005でPicture1のイメージをクリップボードにコピーし Picture2.imageにペーストすると Picture2の画面がすべてブルーになつてしまいます。 プログラムはサンプル(microsoft Document explorerから)をダウンロードしべつのプログラムに貼り付けただけなのですが。 'ピクチャをピクチャ ボックスからクリップボードにコピーします My.Computer.Clipboard.SetImage(PictureBox1.Image) 'クリップボードにイメージが存在する場合、そのイメージをピクチャ ボックスに貼り付けます If My.Computer.Clipboard.ContainsImage Then PictureBox2.Image = My.Computer.Clipboard.GetImage Else MsgBox("Clipboard does not contain an image", MsgBoxStyle.Exclamation And MsgBoxStyle.OKOnly) End If

  • スクショした画像の印刷で画像全体が印刷されない

    [環境] Windows7 Professional VisualStudio2010 Professional お世話になります。 タイトルの件で質問があります。 フォームにボタンを追加して、そのボタンをクリックすると そのときの画面全体(フォームではない)をスクリーンショットし、 クリップボードに保存しておきます。 そのクリップボードに保存した画像を印刷するのですが、 解像度の問題か、はたまた画像サイズが大きすぎるのか(1600*900) わかりませんが、どうしても全体が入りきらずに印刷されてしまいます。 (感覚的には左上から右下にかけて4分の3ほど印刷される。) VB.NETの機能としてある印刷プレビュー(PrintPreviewDialog)で印刷内容を確認しても同様でした。 ちなみにその画像をローカルに保存して確認したところ、 ちゃんと全体のスクショは撮れていました。 また、別フォームにPictureBoxを配置して、そこにクリップボードの画像を セットして確認しても、これまた問題ありませんでした。 下記が印刷のロジックになります。 '********************************************************************* '********************************************************************* 'イメージを保存する変数 Private memoryImage As Bitmap Private prt As New Printing.PrintDocument 'キャプチャ後印刷 Public Function HardCopy() Try 'イベントハンドラ追加 AddHandler prt.PrintPage, AddressOf prt_PrintPage '画面全体のイメージをクリップボードにコピー SendKeys.SendWait("^{PRTSC}") 'クリップボードにあるデータの取得 Dim d As IDataObject = Clipboard.GetDataObject() 'クリップボードにデータがあったか確認 If d IsNot Nothing Then 'ビットマップデータ形式に関連付けられているデータを取得 memoryImage = d.GetData(DataFormats.Bitmap) If img IsNot Nothing Then memoryImage = img img.Save("C:\Users\takazoe\Pictures\sample.bmp") Dim pd As PrintPreviewDialog = New PrintPreviewDialog prt.DefaultPageSettings.Landscape = True ' 印刷 'prt.Print() ' プレビュー pd.Document = prt pd.ShowDialog() '画面のイメージデータをクリップボードから削除 Clipboard.SetDataObject(New DataObject()) End If End If End Function 'PrintDocument1のPrintPageイベントハンドラ Private Sub prt_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) e.Graphics.DrawImage(memoryImage, 0, 0, memoryImage.Width, memoryImage.Height) e.HasMorePages = False End Sub '********************************************************************* '********************************************************************* 何か必要な情報がございましたら、言っていただけると助かります。 ご教示のほどよろしくお願いいたします。

  • ドラッグを用いての拡大/縮小 ピクチャボックスについて

    QNo.2999555の続きの質問です。元の質問のコピーと共に質問します。 >VB6.0により、プログラムの実行後、フォームウィンドウの端(角)を>ドラッグすることにより、(ボタンやボックスを含め)全体を拡大,縮 >小させることはできますでしょうか? >フォームウィンドウの端からのドラッグはデフォルトでも出来るので >すが、フォームウィンドウのみが拡大,縮小されてしまい,ボタンやボ>ックスは元の大きさのままになってしまいます。 この質問については、Form_resize イベントに Public Sub Form_Resize_Ctl(KmForm As Object, _ OrgSize As ReSize_Tag) Dim ParH As Double ' 縦比率 Dim ParW As Double ' 横比率 Dim KmControl As Control ' フォームのコントロール Dim OrgFont As Double ' フォントサイズ退避 ElseIf TypeOf KmControl Is Line Then ' Line .X1 = .X1 * ParW .X2 = .X2 * ParW .Y1 = .Y1 * ParH .Y2 = .Y2 * ParH ElseIf TypeOf KmControl Is PictureBox Then ' PictureBox .FontSize = .FontSize * ParW Select Case .Align Case 0 ' .Top = .Top * ParH .Left = .Left * ParW .Height = .Height * ParH .Width = .Width * ParW                        … 等と拡大・縮小処理を記述し、解決したかと思ったのですが、 プログラム実行以前からのラインはしっかり拡大・縮小されるのですが、 実行後にピクチャボックス内に描画したラインは指定した座標に描かれたまま、周りのコントロールや文字のみが拡大・縮小されてしまいました。ラインの描画は折れ線グラフとして用いているのですが、 描画したラインのみがその場にそのままの大きさで留まってしまいます。 プログラム実行後に描画したラインも拡大・縮小は可能でしょうか? ご教授、お願いします。

  • クリップボードの中身を判別

    PHPなどは理解しておりますが、VBに関してはまったく素人で何もわからないものです。 今回、クリップボードの中身を常に監視して、ある文字列が含まれていたらそのまま、それ以外の文字列の場合は空にするアプリが必要になりました。 そこでネットでいろいろ探して次のように作りました。 Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click End End Sub Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'クリップボードの文字列データを取得する Dim ClipBoardValue As IDataObject Dim ClipBoardString As String Dim okng As Boolean Do 'クリップボードのデータを取得() ClipBoardValue = Clipboard.GetDataObject ClipBoardString = ClipBoardValue.GetData(DataFormats.Text).ToString okng = ClipBoardString.Contains("反応あり") If (okng) Then 'クリップボードに文字列をコピーする Clipboard.SetDataObject("反応あり") Else Clipboard.SetDataObject("") End If Loop End Sub End Class 一つのフォームにボタンを一つ設置し、起動したら監視開始、ボタンをクリックしたら終了という形にしています。 動作させると、以下の問題があります。 ・どんな文字をコピーしてもすぐ空になってしまう ・フォームが表示されない ・起動時にクリップボードの中身が空だとエラーが表示される (オブジェクトのインスタンスにはnewを使用しろとかなんとか。。。) 正しい動作をするコードを教えていただけないでしょうか。 よろしくお願い致します。

  • 別のプロシージャに変数を渡したい

    別のプロシージャに変数を渡せなくて困っています。 下記の内容を実行させようとしています。 1.command1ボタンをクリックして計算を終えて 2.command2ボタンをクリックすると計算結果をクリップボードに入れてメモ帳に貼り付ける コードの概要は下記です。 【1.】////////////////////////////////////////////////////////////// Private Sub Command1_Click() Dim final as String 'いろいろと計算して最終的にfinalというstring型変数に文字列を得る。 final=計算結果 End Sub 【2.】////////////////////////////////////////////////////////////// Private Sub command2_click() Clipboard.Clear Clipboard.SetText final Dim memo As Long memo = Shell("Notepad.exe", vbNormalFocus) AppActivate memo, True 'アプリをアクティブにする SendKeys "^v" End Sub ////////////////////////////////////////////////////////////////////// 調べた結果,ByValがキーワードではないかと思い,Private Sub Command1_Click(ByVala final as string)など試してみましたができませんでした。 [余談] 1.のプロシージャ内で,クリップボードに入れてしまえばよいのですが,そうすると,1.の処理が終わってから,command2を押すまでの間にユーザがクリップボードを利用したら,このプログラムが成立しなくなるので,それは避けたいと思っています。

専門家に質問してみよう