@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

C#でエクセルのshapeのテキスト文字を変更したい

投稿者投稿内容
TAKEZO
会議室デビュー日: 2005/07/29
投稿数: 5
投稿日時: 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のプロパティは取れるようになった
のですが、表示しているテキストを設定する場所がないため、変更する事が出来ない
状況です。

みなさんのお知恵を拝借願えれば幸いと思います。
よろしくお願いします。
にしざき
ぬし
会議室デビュー日: 2003/06/30
投稿数: 304
投稿日時: 2005-08-01 11:03
Excel の「マクロの記録」では、
コード:
    ActiveSheet.Shapes("Rectangle 2").Select
    Selection.Characters.Text = "abc"
    With Selection.Characters(Start:=1, Length:=3).Font
        .Name = "MS Pゴシック"
        .FontStyle = "標準"
        .Size = 11
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ColorIndex = xlAutomatic
    End With


となりましたので、こんな感じでどうでしょうか。
TAKEZO
会議室デビュー日: 2005/07/29
投稿数: 5
投稿日時: 2005-08-01 11:45
返答、ありがとうございます!

私も、にしざきさんのおっしゃる通りマクロの記録を行いソースを得ましたが、
恥ずかしながらこのソースをC#に置き換える方法が分かりませんでした。

−−−−−−−−−−−−−−−−−−−−−−−
oSheet.Shapes("テキスト 1").Select(true);
Selection.Characters.Text = "abc";
−−−−−−−−−−−−−−−−−−−−−−−

1行目は、コンパイル時点で「'Excel._Worksheet.Shapes' は 'プロパティ' を
意味しますが、 'メソッド' でなければなりません。」とエラーが表示され、
2行目はC#で現す方法が分かりません。
ワークブックオブジェクトにも、ワークシートオブジェクトにもSelectionに該当
しそうなプロパティが見つかりませんでした。
にしざき
ぬし
会議室デビュー日: 2003/06/30
投稿数: 304
投稿日時: 2005-08-01 12:45
oShape までは取れたんですよね。

であれば、前掲の Selection を oShape に置き換えればいいんじゃないでしょうか。
TAKEZO
会議室デビュー日: 2005/07/29
投稿数: 5
投稿日時: 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自身を取ろうとしてもエラーが起きてしまいます。


Hongliang
ぬし
会議室デビュー日: 2004/12/25
投稿数: 576
投稿日時: 2005-08-01 13:39
C#ではインデクサとして表現されるはずですから、
oSheet.Shapes["テキスト1"];
にしなければならないんでは?
TAKEZO
会議室デビュー日: 2005/07/29
投稿数: 5
投稿日時: 2005-08-01 14:25
Hongliangさん、初めまして。

−−−−−−−−−−−−−−−−−−−−−−−−−−
Excel.Shape oShape = oSheet.Shapes["テキスト 1"];
−−−−−−−−−−−−−−−−−−−−−−−−−−
とすると、コンパイル時に、
「角かっこ [] 付きインデックスを 'Excel.Shapes' 型の式に適用することは
できません。」
なるエラーが返されてしまいます。

nak2k
ベテラン
会議室デビュー日: 2003/07/17
投稿数: 86
投稿日時: 2005-08-01 15:22
引用:

TAKEZOさんの書き込み (2005-08-01 11:45) より:
−−−−−−−−−−−−−−−−−−−−−−−
oSheet.Shapes("テキスト 1").Select(true);
Selection.Characters.Text = "abc";
−−−−−−−−−−−−−−−−−−−−−−−

1行目は、コンパイル時点で「'Excel._Worksheet.Shapes' は 'プロパティ' を
意味しますが、 'メソッド' でなければなりません。」とエラーが表示され、
2行目はC#で現す方法が分かりません。
ワークブックオブジェクトにも、ワークシートオブジェクトにもSelectionに該当
しそうなプロパティが見つかりませんでした。



一行目はShapesのItemメソッドを使えばいけると思います。
二行目のSelectionはApplicationクラスのプロパティです。(VBAではApplicationインスタンスの記述は省略できます)

スキルアップ/キャリアアップ(JOB@IT)