Excelのシート名を取得

解決


あ-くん  2020-07-25 11:57:18  No: 148957

お世話になります。
Excel2010で作成したファイルにある全シート名を取得したいと思いネットで探していると
下記のサイトがあったので色々挑戦していたのですが
最初の「Excelのタイプライブラリーをインポート」がわかりませんでした。
どなたか教えて頂けませんでしょうか。
お手数をおかけしますがよろしくお願いいたします。
http://nonothoughtman.blogspot.com/2012/06/delphiexcel.html

【環境】
Windoows 10 pro
Delphi 10.1 Berlin Enterprise update 2


Mr.XRAY  2020-07-25 21:39:21  No: 148958

Excel_TLB の代わりに Excel2010 を使用してください.


igy  2020-07-25 22:51:22  No: 148959

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;

みたいな感じは、いかがですか?


igy  2020-07-25 23:03:11  No: 148960

訂正です。
> usesにExcelXpを追加して、
は、
usesにExcel2010を追加
のほうが、いいですね。


igy  2020-07-25 23:23:28  No: 148961

ちなみに、
> System.Variants.DispatchUnsignedAsSigned := True;
は、
> Excel.Application.WindowState := xlMinimized;
が実行時にエラーにならないように付けているので、上記のコードでExcelを最小化しなければ、
System.Variants.DispatchUnsignedAsSigned := True;
は、不要です。


あ-くん  2020-08-03 20:07:35  No: 148968

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ドライバーが見つかりませんでした」
というエラーが発生します。
何が原因なのでしょうか?


igy  2020-08-10 17:09:45  No: 148982

(関係ないかもしれませんが)
> TMP  Source=' + 'C:\DEMO>XLS'
の箇所に、記載ミスがありませんか?


あ-くん  2020-08-11 10:38:44  No: 148987

igyさんスミマセン!
ご指摘の通り記載ミスでした。
お陰様で解決しました。
ありがとうございました。


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








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