
エクセルのグラフの系列を追加したいのですが,どうしても例外エラーが発生します.
型の不一致と出るので,型を調べていろいろキャストしたりやってみてもどうやっても例外がでてしまいます.
処理はなされているようで,グラフにはちゃんと反映はされるので,その部分をtry-catch文でスルーさせると系列も追加されていて,やりたいことはできて正常終了するのですが,このやり方は明らかに良くないと思うので,是非解決させたいです.
型宣言を省いたcodeは↓のようにしてます
charts=(Excel.ChartObjects)oSheet.ChartObjects(Type.Missing);
chartObj=charts.Add(100, 100, 700, 400);
chart=chartObj.Chart;
chart.ChartType=Excel.XlChartType.xlXYScatterLines;
chartRange1=oSheet.get_Range("B2","B50");
chart.SetSourceData(chartRange1,Excel.XlRowCol.xlColumns);
seriesCollection=(Excel.SeriesCollection)chart.SeriesCollection(Type.Missing);
chartRange2=oSheet.get_Range("A2","A50");
seriesCollection.Item(1).XValues=chartRange2;
chartRange3=oSheet.get_Range("C2","C5");
chartRange4=oSheet.get_Range("A2","A5");
/*try
{
*/
seriesCollection.Add(chartRange3,Excel.XlRowCol.xlColumns,0,0,1).XValues=chartRange4; //ここで下の例外が発生します
/*}
catch
{}
*/
【
'System.InvalidCastException' のハンドルされていない例外が mscorlib.dll で発生しました。
追加情報 : OleAut が型の不一致をレポートしました。
】
となります.
コメント化してるtry-catch部分をコメントから外して処理させると無事にやりたいことが実行されてます.
この例外エラーはどういう意味なのでしょうか?
よろしくお願いします.
No.1ベストアンサー
- 回答日時:
環境やバージョンは明記したほうがいいですよ(^^;)
1点だけ。『やりたいことはできて正常終了する』とのことですが、XValues(質問文ではchartRange4)はチャートに反映されていますか?
というのも...
XP(SP2)/VC#2005Express/Excel2000で試してみました(以下の記述はすべてこの環境での話です)が、やはりInvalidCastExceptionが発生し、どうやっても消せませんでした(^^;)。ただし、新規系列は追加されていましたが、XValuesは反映されていませんでした。
で、Excel/VBAで同様のコードを書いて試してみたところ、次の記述は実行時エラー424「オブジェクトが必要です」になります。新規系列は追加されており、chartRange4は反映されていない、C#の時とまったく同じ結果になります。
seriesCollection1.Add(chartRange3).XValues = chartRange4
しかし、次の記述は正常に実行されます。
seriesCollection1.Add chartRange3
seriesCollection1.Item(2).XValues = chartRange4
オブジェクトブラウザを見るとSeriesCollectionのAddはSeriesを返すことになっていますが、この結果を見ると、どうも返していないように思われます(Excel(TypeLib)のバグ)。Add自体は成功するが、返値(Seriesオブジェクト)がないので".Xvalues"が実行できず、値の設定ができないというわけです。あくまでも想像ですけど。
残念ながらC#で問題のコードをVBAのように分割しても、依然としてAddでInvalidCastExceptionが発生してしまいます。これも想像になりますが、C#は共通ランタイムの上で動作しており、COM(OLE)とはマーシャリングと呼ばれるメカニズムを介してデータをやり取りしているようですから、ユーザプログラムが返値を使用していなくても、共通ランタイムの中で型変換した上でユーザプログラムに返しているのかもしれません。Addの返値(nullとか??)をSeriesにキャストしようとして「型の不一致」を検出したのではないかなと思います。
想像ばっかりで間違っているかもしれませんが…
(余談ですが、上記のような次第で、私ならAddよりNewSeriesを使います。)
(さらに余談ですが、この件は GotDotNet Japan 掲示板( http://www.gdncom.jp/general/bbs/ )や Visual Studio User Group( http://vsug.jp/ )のフォーラムなどの方が的確な回答を得られるような気がします)
たいへん詳しい解説をしていただきありがとうございます.納得ができました.
私も書き込みした後いろいろとやってみたところ,確かに.XValues = chartRange4 の部分は反映されておりませんでした.
この部分を消して実行したところご指摘のようにseriesCollection1.Add(chartRange3)は反映されますが,やはり例外エラーが出ます.
FlossenEngelさんのおっしゃるとおりNewSeriesというものがあることがわかり,こちらを使うことが賢明であると判断しました.バグであってくれると自分の中でも納得ができます.
また,GotDotNet Japan 掲示板や Visual Studio User Groupのフォーラムというものも今後参考にさせていただきます.
ありがとうございました.
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) EXCELのグラフを画像(JPG形式)で保存、通常実行がうまく行かない。ステップインはうまく行く 3 2022/08/30 12:06
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- Excel(エクセル) 【Excel関数、count系】どなたか教示下さると助かります。 Excelでシフトを管理しており、 2 2022/07/09 06:34
- C言語・C++・C# const char** p;のとき、free(p)でC4090エラーとなるのはなぜですか 3 2023/03/31 16:28
- C言語・C++・C# c言語でユーザ関数を利用して入力された文字列を反転させるプログラムを作りたいです。 3 2023/01/29 19:47
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# C言語初心者 構造体 課題について 2 2023/03/10 19:48
- Visual Basic(VBA) 【VBA】Excelの特定範囲のセルを画像で保存したい 2 2023/01/25 13:06
- C言語・C++・C# c言語 コマンドライン引数 4 2023/02/09 18:47
- Excel(エクセル) 表示形式、文字列セル(列)に数式を入力するには マクロ 1 2022/09/18 10:53
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・昔のあなたへのアドバイス
- ・字面がカッコいい英単語
- ・許せない心理テスト
- ・歩いた自慢大会
- ・「I love you」 をかっこよく翻訳してみてください
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・はじめての旅行はどこに行きましたか?
- ・準・究極の選択
- ・この人頭いいなと思ったエピソード
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・【お題】甲子園での思い出の残し方
- ・【お題】動物のキャッチフレーズ
- ・人生で一番思い出に残ってる靴
- ・これ何て呼びますか Part2
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・あなたが好きな本屋さんを教えてください
- ・かっこよく答えてください!!
- ・一回も披露したことのない豆知識
- ・ショボ短歌会
- ・いちばん失敗した人決定戦
- ・性格悪い人が優勝
- ・最速怪談選手権
- ・限定しりとり
- ・性格いい人が優勝
- ・これ何て呼びますか
- ・チョコミントアイス
- ・単二電池
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・泣きながら食べたご飯の思い出
- ・一番好きなみそ汁の具材は?
- ・人生で一番お金がなかったとき
- ・カラオケの鉄板ソング
- ・自分用のお土産
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
実行時エラー 438になった時の...
-
VBAがブレークモードになっ...
-
EXCEL VBAマクロ中断でデバッグ...
-
実行時エラー -'-2147417848
-
Application.ActiveInspectorで...
-
なぜこんな初歩的なVBAのIf文で...
-
なぜエラーになるのでしょうか...
-
ExcelVBA Range クラスの Page...
-
VBAでのエラー
-
実行時エラー3001「引数が間違...
-
Invalid procedure call or arg...
-
VBS実行時エラー オブジェクト...
-
日本語環境下で作成したマクロ...
-
Excel VBA で End Subのところ...
-
VBAのコードがエラーになっ...
-
クラシックASPでのエラー処理に...
-
VBSで変数の宣言はできないので...
-
アクセス 実行時エラー3265
-
ExcelのVBAのAutoFillの使い方...
-
エクセルVBAで DirectPreceden...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
実行時エラー 438になった時の...
-
なぜこんな初歩的なVBAのIf文で...
-
VBAがブレークモードになっ...
-
【Excel VBA】マクロをボタンに...
-
マクロについて教えてください...
-
ExcelVBA Range クラスの Page...
-
VBAでのエラー
-
エクセルエラー13型が一致しま...
-
EXCEL VBAマクロ中断でデバッグ...
-
実行時エラー48発生時のDLL特定...
-
実行時エラー -'-2147417848
-
実行時エラー3001「引数が間違...
-
ExcelVBAで、ユーザー定義型は...
-
VBAのエラー発生場所をメッセー...
-
VBS実行時エラー オブジェクト...
-
Outlook.ApplicationをCreateOb...
-
なぜエラーになるのでしょうか...
-
VB6+SQL サーバー 2000 で 実行...
-
AccessVBAでExcelを起動し、罫...
-
VBAで、定数式が必要ですのエラ...
おすすめ情報