![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?08b1c8b)
エクセルのグラフの系列を追加したいのですが,どうしても例外エラーが発生します.
型の不一致と出るので,型を調べていろいろキャストしたりやってみてもどうやっても例外がでてしまいます.
処理はなされているようで,グラフにはちゃんと反映はされるので,その部分を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を探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
実行時エラー 438になった時の...
-
なぜこんな初歩的なVBAのIf文で...
-
【Excel VBA】マクロをボタンに...
-
AccessVBAでExcelを起動し、罫...
-
VBAがブレークモードになっ...
-
OLEDB.NETで接続できない
-
実行時エラー3001「引数が間違...
-
EXCEL VBAマクロ中断でデバッグ...
-
EXCEL/VBAで、自分のPCだけエラ...
-
ExcelVBA Range クラスの Page...
-
Invalid procedure call or arg...
-
VBAでのエラー
-
実行時エラー48発生時のDLL特定...
-
マクロを作成したのですが、以...
-
エクセルエラー13型が一致しま...
-
Excelで下記のようにマクロを作...
-
実行時エラー -'-2147417848
-
VB6+SQL サーバー 2000 で 実行...
-
マクロについて教えてください...
-
VBAのエラー発生場所をメッセー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
実行時エラー 438になった時の...
-
なぜこんな初歩的なVBAのIf文で...
-
VBAがブレークモードになっ...
-
実行時エラー48発生時のDLL特定...
-
【Excel VBA】マクロをボタンに...
-
VBAでのエラー
-
マクロについて教えてください...
-
エクセルエラー13型が一致しま...
-
実行時エラー3001「引数が間違...
-
Outlook.ApplicationをCreateOb...
-
VBS実行時エラー オブジェクト...
-
VBSで変数の宣言はできないので...
-
実行時エラー -'-2147417848
-
ExcelVBA Range クラスの Page...
-
ExcelVBAで、ユーザー定義型は...
-
OLEDB.NETで接続できない
-
ADODB.Streamを使用してUTF-8を...
-
なぜエラーになるのでしょうか...
-
EXCEL VBAマクロ中断でデバッグ...
-
INSERT INTOステートメント構文...
おすすめ情報