C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: PowerPointのLabel.Caption値を取得


(過去ログ 14 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■4832 / inTopicNo.1)  PowerPointのLabel.Caption値を取得
  
□投稿者/ いいと (1回)-(2007/06/26(Tue) 18:45:46)

分類:[C# (Windows)] 

環境:VisualStudio2005、C# + PowerPoint2003

C#から既存のPowerPointファイルを開き、そのスライド中に貼り付けてあるラベルコントロールの
Caption値を取得したい。
この際、PowerPointのVBAでは
objPres.Slides(1).Shapes("Label1").OLEFormat.Object.Caption
と記述することで取得できるので、下記のようにC#を記述してみたところ、
             「'object'に'caption'の定義がありません。」
となってしまう。

どなたが助言いただけませんでしょうか?
宜しくお願い致します。

vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv

PowerPoint.Application objApp;
PowerPoint.Presentations objPresSet;
PowerPoint._Presentation objPres;

//open presentation
objApp = new PowerPoint.Application();
objApp.Visible = MsoTriState.msoTrue;
objPresSet = objApp.Presentations;
objPres = objPresSet.Open("c:\\aaa.ppt");

//Get Caption from target Lables
Debug.WriteLine(objPres.Slides[1].Shapes["Label1"].OLEFormat.Object.Caption); //←ここがエラー

vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv

引用返信 編集キー/
■4833 / inTopicNo.2)  Re[1]: PowerPointのLabel.Caption値を取得
□投稿者/ 魔界の仮面弁士 (314回)-(2007/06/26(Tue) 19:11:19)
# Marshal.ReleaseComObject の件は、とりあえず横に置いとくとして。

No4832 (いいと さん) に返信
> 「'object'に'caption'の定義がありません。」
C# にはレイトバインドの機能が無いので、object 型から直接 Caption を呼び出すことはできません。
まずは、適切な型にキャストする必要があるでしょうね。

普通のテキストなら、TextFrame / TextRange で取得するところですが……今回は Label コントロールなので、
MSForms の Label 型にキャストしてみれば解決するかも。
引用返信 編集キー/
■4834 / inTopicNo.3)  Re[2]: PowerPointのLabel.Caption値を取得
□投稿者/ いいと (2回)-(2007/06/26(Tue) 20:47:13)
No4833 (魔界の仮面弁士 さん) に返信
> # Marshal.ReleaseComObject の件は、とりあえず横に置いとくとして。
>
> ■No4832 (いいと さん) に返信
>>「'object'に'caption'の定義がありません。」
> C# にはレイトバインドの機能が無いので、object 型から直接 Caption を呼び出すことはできません。
> まずは、適切な型にキャストする必要があるでしょうね。
>
> 普通のテキストなら、TextFrame / TextRange で取得するところですが……今回は Label コントロールなので、
> MSForms の Label 型にキャストしてみれば解決するかも。

なるほど、というわけで下記コードを追加してみましたが、エラーとなります。
うーん・・。

 object obj = objPres.Slides[1].Shapes["Label1"].OLEFormat.Object;

 try
  {
   System.Windows.Forms.Label lbl = (System.Windows.Forms.Label) obj;
  }
 catch (Exception e)
  {
   Console.WriteLine("{0} Exception caught.", e);
  }

  「System.InvalidCastException: 指定されたキャストは有効ではありません。」

ちなみに、objPres.Slides[1].Shapes["Label1"].OLEFormat.Objectは {System.__ComObject} となっています。
何か関係あるのでしょうか?
引用返信 編集キー/
■4836 / inTopicNo.4)  Re[3]: PowerPointのLabel.Caption値を取得
□投稿者/ じゃんぬねっと (441回)-(2007/06/26(Tue) 20:52:35)
情報共有のためクロスサイトポストとリンクします。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=39277&forum=7

他所で聞いている場合は、一言書いておいておくと良いです。
理由はわかると思いますのでいちいち書きません。
引用返信 編集キー/
■4837 / inTopicNo.5)  Re[3]: PowerPointのLabel.Caption値を取得
□投稿者/ 魔界の仮面弁士 (315回)-(2007/06/26(Tue) 21:20:22)
2007/06/26(Tue) 21:20:52 編集(投稿者)

No4834 (いいと さん) に返信
>> MSForms の Label 型にキャストしてみれば解決するかも。
> System.Windows.Forms.Label lbl = (System.Windows.Forms.Label) obj;

確かにそれも Label ですが、名前空間が違いますよね。

それと、こういう時は『as』を使ってキャストした方が楽かも。
引用返信 編集キー/
■4855 / inTopicNo.6)  Re[4]: PowerPointのLabel.Caption値を取得
□投稿者/ いいと (3回)-(2007/06/27(Wed) 18:17:35)
>
> 確かにそれも Label ですが、名前空間が違いますよね。
>

返信おくれました。
ご指摘のとおりで、MSForms.Labelで値取得できました。有難うございました。

また、じゃんぬねっとさんには要らぬご迷惑をお掛け致しました。ごめんなさい。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -