お世話になります。
Excel2010で作成したファイルにある全シート名を取得したいと思いネットで探していると
下記のサイトがあったので色々挑戦していたのですが
最初の「Excelのタイプライブラリーをインポート」がわかりませんでした。
どなたか教えて頂けませんでしょうか。
お手数をおかけしますがよろしくお願いいたします。
http://nonothoughtman.blogspot.com/2012/06/delphiexcel.html
【環境】
Windoows 10 pro
Delphi 10.1 Berlin Enterprise update 2
Excel_TLB の代わりに Excel2010 を使用してください.
usesにExcelXpを追加して、
procedure TForm1.Button2Click(Sender: TObject);
var
Excel: OleVariant;
Book: OleVariant;
ws: Variant;
i: Integer;
SampleFile: String;
begin
System.Variants.DispatchUnsignedAsSigned := True;
SampleFile := ExtractFilePath(Application.ExeName) + 'test.xlsx';
try
Excel := CreateOleObject( 'Excel.Application' );
Excel.Application.WindowState := xlMinimized;
Excel.Application.Visible := True;
Book := Excel.WorkBooks.Open(FileName:=SampleFile, ReadOnly:=True);
try
ListBox1.Clear;
for i := 1 to Book.Worksheets.Count do
begin
ws := Book.Worksheets[i];
ListBox1.Items.Add(ws.Name);
end;
Book.Close(SaveChanges:=False);
finally
Excel.Quit;
end;
except
on E: Exception do
MessageDlg(E.Message, mtError, [mbOk], E.HelpContext);
end;
end;
みたいな感じは、いかがですか?
訂正です。
> usesにExcelXpを追加して、
は、
usesにExcel2010を追加
のほうが、いいですね。
ちなみに、
> System.Variants.DispatchUnsignedAsSigned := True;
は、
> Excel.Application.WindowState := xlMinimized;
が実行時にエラーにならないように付けているので、上記のコードでExcelを最小化しなければ、
System.Variants.DispatchUnsignedAsSigned := True;
は、不要です。
igyさん、お返事遅れまして申し訳ありません。
ご指示通りコーディングしたところ
お陰様でListBoxにシートが表示されるようになりました。
ありがとうございます。
図々しく追加のご質問なのですが
ListBoxに登録されたシート名が
例えば「TEST1」とした時、
文字型変数TMPを宣言し
TMP := 'TEST1';
ADODataSet1とADODataSet1をフォーム上に貼り付けて
ADODataSet1.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Password="";TMP Source=' + 'C:\DEMO>XLS' + ';Extended Properties=Excel 8.0;Persist Security Info=True';
ADODataSet1.Close;
ADODataSet1.Open;
とした時に
「インストール可能なISAMドライバーが見つかりませんでした」
というエラーが発生します。
何が原因なのでしょうか?
(関係ないかもしれませんが)
> TMP Source=' + 'C:\DEMO>XLS'
の箇所に、記載ミスがありませんか?
igyさんスミマセン!
ご指摘の通り記載ミスでした。
お陰様で解決しました。
ありがとうございました。
ツイート | ![]() |