- - PR -
C#でエクセルのshapeのテキスト文字を変更したい
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-08-01 10:57
現在C#.NETで開発を行っています。
C#で、COMを使ってエクセルを起動し、ベースとなる原紙を開いて帳票を作成する ようなプログラムを作成しようとしています。 しかし、エクセルを起動し、セル等の操作は出来るようになったのですが、原紙に 元々あるshapeで作成したテキストボックスの表示するテキスト文字列の変更が出来 ずに困っております。 以下ソースの問題の部分です。 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− string strPath = HttpContext.Current.Server.MapPath(Request.ApplicationPath + "/"); strOutFileName = strPath + @"Temp\Test.xls"; // 出力ファイル名 strInFileName = strPath + @"Temp\SheetT.xlt"; // 原紙ファイル名 Excel.Application oXL; Excel._Workbook oWB; Excel._Worksheet oSheet; oXL = new Excel.Application(); oXL.Visible = true; oWB = (Excel._Workbook)(oXL.Workbooks.Add( strInFileName )); oSheet = (Excel._Worksheet)oWB.Worksheets["Sheet1"]; Excel.Shape oShape = oSheet.Shapes.Item("テキスト 1"); //oSheet.Shapes.Item("テキスト 1").AlternativeText = "TEST"; −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− [開発環境] VS.NET2003 MS EXCEL 2000 SR-1 COM 9.0 ObjectLibrary oSheet.Shapes.Item("テキスト 1") で、shapeのプロパティは取れるようになった のですが、表示しているテキストを設定する場所がないため、変更する事が出来ない 状況です。 みなさんのお知恵を拝借願えれば幸いと思います。 よろしくお願いします。 | ||||
|
投稿日時: 2005-08-01 11:03
Excel の「マクロの記録」では、
となりましたので、こんな感じでどうでしょうか。 | ||||
|
投稿日時: 2005-08-01 11:45
返答、ありがとうございます!
私も、にしざきさんのおっしゃる通りマクロの記録を行いソースを得ましたが、 恥ずかしながらこのソースをC#に置き換える方法が分かりませんでした。 −−−−−−−−−−−−−−−−−−−−−−− oSheet.Shapes("テキスト 1").Select(true); Selection.Characters.Text = "abc"; −−−−−−−−−−−−−−−−−−−−−−− 1行目は、コンパイル時点で「'Excel._Worksheet.Shapes' は 'プロパティ' を 意味しますが、 'メソッド' でなければなりません。」とエラーが表示され、 2行目はC#で現す方法が分かりません。 ワークブックオブジェクトにも、ワークシートオブジェクトにもSelectionに該当 しそうなプロパティが見つかりませんでした。 | ||||
|
投稿日時: 2005-08-01 12:45
oShape までは取れたんですよね。
であれば、前掲の Selection を oShape に置き換えればいいんじゃないでしょうか。 | ||||
|
投稿日時: 2005-08-01 13:24
説明しづらいのですが、取れたのはshapes自身ではなく、Itemクラスです。
このItemは、エクセル上でshapeを右クリックしてプロパティを選択した時に 表示される設定情報の部分みたいです。 なので、 −−−−−−−−−−−−−−−−−−−−−−−−−−−− Excel.Shape oShape = oSheet.Shapes.Item("テキスト 1"); −−−−−−−−−−−−−−−−−−−−−−−−−−−− としてもoShapeに、Characters.Textが存在しないためテキストの変更が出来ません。 しかし、 −−−−−−−−−−−−−−−−−−−−−−−−−− Excel.Shape oShape = oSheet.Shapes("テキスト 1"); −−−−−−−−−−−−−−−−−−−−−−−−−− こういう感じで、shape自身を取ろうとしてもエラーが起きてしまいます。 | ||||
|
投稿日時: 2005-08-01 13:39
C#ではインデクサとして表現されるはずですから、
oSheet.Shapes["テキスト1"]; にしなければならないんでは? | ||||
|
投稿日時: 2005-08-01 14:25
Hongliangさん、初めまして。
−−−−−−−−−−−−−−−−−−−−−−−−−− Excel.Shape oShape = oSheet.Shapes["テキスト 1"]; −−−−−−−−−−−−−−−−−−−−−−−−−− とすると、コンパイル時に、 「角かっこ [] 付きインデックスを 'Excel.Shapes' 型の式に適用することは できません。」 なるエラーが返されてしまいます。 | ||||
|
投稿日時: 2005-08-01 15:22
一行目はShapesのItemメソッドを使えばいけると思います。 二行目のSelectionはApplicationクラスのプロパティです。(VBAではApplicationインスタンスの記述は省略できます) |