- - PR -
C# フォーム上PictureBoxにExcelグラフを表示
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2005-08-26 01:12
C#アプリケーションのフォーム上のPictureBoxにExcelグラフをクリップボード経由
で表示したいのですが、やり方がわかりません。よろしければどなたか教えてください。 Excel自体は、C:¥A.xls グラフはグラフ専用のシート(シート2番目)「Graph」上にあり、 コード自体は、 Excel.Application app; Excel.Workbook book; private void button1_Click(object sender, System.EventArgs e) { app = new Excel.Application(); app.Application.Visible = false; book = (Excel.Workbook)(app.Workbooks.Open("C:¥¥A.xls", Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value)); ・ ・ *****ここの記述がぜんぜんわからない***** ・ ・ app.Quit(); } 上記のように分からない状態です。 |
|
投稿日時: 2005-08-26 06:03
コードがわからなくても、手順はわかりますか?
手順がわかれば、その通りの操作を、「マクロ記録」しながら行えば、VBAでのコードができますよ。 _________________ |
|
投稿日時: 2005-08-26 09:43
Jittaさん 返信ありがとうございました。
いろいろやった結果下記のようになり一応実行できました。 private void RunMacro(object oApp, object[] oRunArgs) 文は意味がわかりませんが、 http://support.microsoft.com/default.aspx?scid=kb;ja;306683 を参考にやってみました。 コードが問題あるかは分かりません。 コードに問題がありそうであれば、再度教えていただけないでしょうか? 宜しくお願いいたします。 private void button1_Click(object sender, System.EventArgs e) { IDataObject data = Clipboard.GetDataObject(); app = new Excel.Application(); app.Application.Visible = false; book = (Excel.Workbook)(app.Workbooks.Open("C:¥¥A.xls", Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value)); RunMacro(app, new Object[]{"GraphMacro"}); pictureBox1.Image = (Image)data.GetData(DataFormats.Bitmap); app.Quit(); } private void RunMacro(object oApp, object[] oRunArgs) { oApp.GetType().InvokeMember("Run", System.Reflection.BindingFlags.Default | System.Reflection.BindingFlags.InvokeMethod, null, oApp, oRunArgs); } Excel上マクロ Sub GraphMacro() ActiveChart.ChartArea.Select ActiveChart.ChartArea.Copy End Sub |
|
投稿日時: 2005-08-26 13:39
すべてC#側で制御した方がスマートです。
VBAからC#への移植は、慣れれば簡単に出来ます。 扱うオブジェクトは同じなのだから。 また、ネットにもVBAやVBのサンプルが沢山あるので参考にしましょう。 例えば、 http://www.bcap.co.jp/hanafusa/VBHLP/graph01.htm |
|
投稿日時: 2005-08-26 13:59
todoさん 返信ありがとうございます。
参考ページの xlSheet.ChartObjects("グラフ 1").Copy 文をC#の場合どのように記載すればよいか分からない状態です。 グラフのあるシートの指定・対象グラフの指定も分かりません。 こんな初心者で申し訳ございません。 [ メッセージ編集済み 編集者: evo 編集日時 2005-08-26 14:01 ] |
|
投稿日時: 2005-08-30 12:56
evoさんの
xlSheet.ChartObjects("グラフ 1").Copy の部分は //グラフコピー Excel.ChartObjects xChart= (Excel.ChartObjects)lSheet.ChartObjectsType.Missing); //クリップボードにコピー xChart.Copy(); でできませんか??? |
|
投稿日時: 2005-08-30 12:58
Excel.ChartObjects xChart= (Excel.ChartObjects)lSheet.ChartObjectsType.Missing);
あっ! Excel.ChartObjects xChart= (Excel.ChartObjects)xlSheet.ChartObjectsType.Missing); ↑(xが抜けてました・・・) |
|
投稿日時: 2005-09-01 00:28
もも さん 返答ありがとうございました。
遅くなり申し訳ございません。 返答を参考にして結果うまくいきました。 ありがとうございました。 ただ1つ問題があるのですが、あるグラフを参照する場合 シート上にグラフしかないシートを選択する場合、 Excel.Workbook book; Excel.Worksheet xlSheet; xlSheet = (Excel.Worksheet)book.ActiveSheet; では、エラー(指定されたキャストは有効ではありません。) などとなってしまいます。 上記コードではなく、うまく選択する方法はあるのでしょうか? |