Excelの各シート名を得るには


komin  2007-05-22 00:15:42  No: 26197

連続質問のような形になってしまい申し訳ありません。
  開いたExcelの各ワークシートの名前というか下にあるタブについている文字列を得るにはどうしたらよいのでしょうか?


HOta  2007-05-22 00:19:27  No: 26198

ExcelApplication1.Sheets[1].SheetName
でいけませんか?


komin  2007-05-22 00:28:14  No: 26199

重ね重ねありがとうございます。

ExcelApplication1.Sheets[1].SheetName

「Sheetname」が未定義の識別子になってしまいます。


komin  2007-05-22 00:37:37  No: 26200

併せて質問なのですが,開いたブックの特定のシートを指定するにはどうしたらよいでしょうか?


とかとか  2007-05-22 00:51:33  No: 26201

SheetName ⇒ Name とか?

ExcelWorkSheet1.ConnectTo(ExcelApplication1.Sheets[n] as _WorkSheet);とか?


komin  2007-05-22 00:58:53  No: 26202

> SheetName ⇒ Name とか?
  NameとかCaptionとかTitleとか心当たりは一通り試してみましたがだめでした。

> ExcelWorkSheet1.ConnectTo(ExcelApplication1.Sheets[n] as _WorkSheet);とか?

  n=1とすると,確かに1枚目のワークシートを指すようになりますが,この時にExcel側で該当ワークシートを前面にしたいのです。


Ru  2007-05-22 01:05:27  No: 26203

その後  ExcelWorkSheet1.Select  で無理ですか?

あとExcelのVBAも参考になりますよ。


komin  2007-05-22 01:11:25  No: 26204

Ruさん,ありがとうございました。それで大丈夫でした。


komin  2007-05-22 01:43:33  No: 26205

Set newSheet = Sheets.Add(Type:=xlWorksheet)
For i = 1 To Sheets.Count
    newSheet.Cells(i, 1).Value = Sheets(i).Name
Next i

  という例がVBAのヘルプで見つかったので、
    for i := 1 to  ExcelApplication1.Sheets.Count do begin
      Combobox1.Items.Add(Excelapplication1.Sheets[i].Name;
    end;

  というコードを書いてみたのですが,やはりnameプロパティが未定義の識別子になってしまいます。うーん、困った…


Ru  2007-05-22 02:27:27  No: 26206

ExcelApplication1 ではなく ExcelWorkSheet1 からだと取得できません?

ExcelWorkSheet1.Name


HOta  2007-05-22 02:43:59  No: 26207

失礼。Nameですね。
Ruさんもかいていますが、ExcelApplication1 ではなく
ExcelWorkbook1.Sheets[1].name
ですね。
シートを指定するのは、VBAのマクロを参考にして、
名前か番号で指定しますできます。
ExcelWorkbook1.Sheets[1]
ExcelWorkbook1.Sheets[wName]


komin  2007-05-22 17:39:51  No: 26208

こんなコードの書き換えましたが
    Combobox1.Items.Clear;
    for i := 1 to  ExcelApplication1.Sheets.Count do begin
      Combobox1.Items.Add(ExcelWorkbook1.Sheets[1].Name);
    end;
やはりnameプロパティが未定義になってしまいました。


Ru  2007-05-22 20:08:43  No: 26209

Combobox1.Items.Clear;
for i := 1 to  ExcelApplication1.Sheets.Count do begin
  ExcelWorkSheet1.ConnectTo(ExcelApplication1.Sheets[i] as _WorkSheet);
  Combobox1.Items.Add(ExcelWorkSheet1.Name);
end;

未検証です。
Excelへのアプローチの方法が私とは違うので自信なし・・・
as演算子でクラスを変更すれば認識するかな??
(_WorkSheet  ではなく  TExcelWorksheet  かも)


Mr.XRAY  URL  2007-05-23 04:13:19  No: 26210

開発環境(Windows + Delphi + Excelのバージョン)も何も書いてないのですが,

以下は, WindowsXP(SP2) + Delphi7 + Excel200で動作確認しています.
リストボックスに現在のExceleのシード名を表示する例です.
[Servers]タブのTExcelApplication 関係を使用しているものと仮定(間違いないでしょう)
します.

//リストボックスにシート名一覧を作成
ListBox1.Clear;
for i:=1 to ExcelWorkBook1.Sheets.Count do begin
  ListBox1.Items.Add((ExcelWorkbook1.Sheets[i] as ExcelWorksheet).Name);
end;

あるいは,Sh : OleVariant; と定義しておいて

ListBox1.Clear;
for i:=1 to ExcelWorkBook1.Sheets.Count do begin
  Sh:=ExcelWorkbook1.Sheets[i];
  ListBox1.Items.Add(Sh.Name);
end;


Mr.XRAY  URL  2007-05-23 04:19:46  No: 26211

ちなみに,OleObjectの場合には以下のコードで取得できます.
動作確認は前と同じです.

ListBox1.Items.Clear;
for i:=1 to WorkBook.Sheets.Count do begin
  ListBox1.Items.Add(WorkBook.Sheets[i].Name);
end;


komin  2007-05-24 03:06:30  No: 26212

Ruさん,Mr.XRAYさん、ありがとうございました。
これで取得できました。何分この手のプログラムは初めてなもので、わからない事が多いです。また何かありましたらよろしくお願いいたします。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加