連続質問のような形になってしまい申し訳ありません。
開いたExcelの各ワークシートの名前というか下にあるタブについている文字列を得るにはどうしたらよいのでしょうか?
ExcelApplication1.Sheets[1].SheetName
でいけませんか?
重ね重ねありがとうございます。
ExcelApplication1.Sheets[1].SheetName
「Sheetname」が未定義の識別子になってしまいます。
併せて質問なのですが,開いたブックの特定のシートを指定するにはどうしたらよいでしょうか?
SheetName ⇒ Name とか?
ExcelWorkSheet1.ConnectTo(ExcelApplication1.Sheets[n] as _WorkSheet);とか?
> SheetName ⇒ Name とか?
NameとかCaptionとかTitleとか心当たりは一通り試してみましたがだめでした。
> ExcelWorkSheet1.ConnectTo(ExcelApplication1.Sheets[n] as _WorkSheet);とか?
n=1とすると,確かに1枚目のワークシートを指すようになりますが,この時にExcel側で該当ワークシートを前面にしたいのです。
その後 ExcelWorkSheet1.Select で無理ですか?
あとExcelのVBAも参考になりますよ。
Ruさん,ありがとうございました。それで大丈夫でした。
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プロパティが未定義の識別子になってしまいます。うーん、困った…
ExcelApplication1 ではなく ExcelWorkSheet1 からだと取得できません?
ExcelWorkSheet1.Name
失礼。Nameですね。
Ruさんもかいていますが、ExcelApplication1 ではなく
ExcelWorkbook1.Sheets[1].name
ですね。
シートを指定するのは、VBAのマクロを参考にして、
名前か番号で指定しますできます。
ExcelWorkbook1.Sheets[1]
ExcelWorkbook1.Sheets[wName]
こんなコードの書き換えましたが
Combobox1.Items.Clear;
for i := 1 to ExcelApplication1.Sheets.Count do begin
Combobox1.Items.Add(ExcelWorkbook1.Sheets[1].Name);
end;
やはりnameプロパティが未定義になってしまいました。
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 かも)
開発環境(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;
ちなみに,OleObjectの場合には以下のコードで取得できます.
動作確認は前と同じです.
ListBox1.Items.Clear;
for i:=1 to WorkBook.Sheets.Count do begin
ListBox1.Items.Add(WorkBook.Sheets[i].Name);
end;
Ruさん,Mr.XRAYさん、ありがとうございました。
これで取得できました。何分この手のプログラムは初めてなもので、わからない事が多いです。また何かありましたらよろしくお願いいたします。
ツイート | ![]() |