Delphi Programming / Object Pascal
サイトのトップページへ リンクのページへ ロゴマーク
[掲載 2005年01月01日] [更新 2016年07月22日] Delphi サンプルプログラム集
380_URL のデータをエクセルで取得して表示
動作確認等 Windows 7 U64(SP1) + Delphi XE Pro + Excel 2010
380_URLToExcel.zip [649 KB] 2016年07月22日版 (EXE 同梱)



  • 2011年01月17日
  • TextFileCommaDelimiter := False; の行を削除
  • URL 入力編集用 Edit を追加
  • 2016年07月22日
  • 起動したエクセルを前面に表示するためのコードを追加




URL のデータをエクセルで取得して表示


エクセルの QueryTables プロパティを使用して,指定 URL の表形式データをエクセルに取得します.
添付の EXE をそのまま実行すると,下記の [HSP の裏技] にある [ウィンドウメッセージリスト] のリストを取得して,エクセルのシートに表示します.


図1
設計時画面
  • [Servers] タブのコンポーネントを配置
    TExcelApplication
    TExcelWorkBook
    TExcelWorkSheet
図2
起動
  • URL 入力欄に URL (ウェブページのアドレス) を入力
  • [エクセル起動] ボタンをクリック,または [Enter] キーを押下
図3
実行例
  • 本アプリは自動終了
  • エクセルだけが起動したままとなる

リスト1
URL のデータをエクセルで取得
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Excel2000, OleServer, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    ExcelApplication1: TExcelApplication;
    ExcelWorksheet1: TExcelWorksheet;
    ExcelWorkbook1: TExcelWorkbook;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure FormShow(Sender: TObject);

  private
    { Private 宣言 }
  public
    { Public 宣言 }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

//=============================================================================
//  Edit1に読み込むURLをセット
//=============================================================================
procedure TForm1.FormShow(Sender: TObject);
begin
  Edit1.ImeMode := imDisable;
  Edit1.Text    := 'http://chokuto.ifdef.jp/urawaza/message/index_main.html';
end;

//=============================================================================
//  エクセルを起動して指定URLのデータを取込む
//=============================================================================
procedure TForm1.Button1Click(Sender: TObject);
var
  LURLName : String;
  LpC      : OleVariant;
  LpD      : ExcelRange;
  LpQTabel : Excel2000._QueryTable;
  LhWindow : HWND;
begin
  //エクセル起動
  ExcelApplication1.Connect;
  //エクセル表示
  ExcelApplication1.Visible[0] := True;
  //ブックとシートオブジェクト接続
  ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks.Add(EmptyParam, 0));
  ExcelWorksheet1.ConnectTo(ExcelWorkbook1.Worksheets['Sheet1'] as _Worksheet);

  //読込むCSVデータのURL}
  LURLName := Trim(Edit1.Text);
  LpC      := 'URL;' + LURLName;
  try
    //出力先セル(左上)の指定
    try
      LpD      := ExcelWorkSheet1.Cells.Range['A1', 'A1'];
      LpQTabel := ExcelWorksheet1.QueryTables.Add(LpC, LpD, EmptyParam);

      LpQTabel.RefreshStyle      := xlOverwriteCells; //上書き
      LpQTabel.AdjustColumnWidth := True;             //列幅自動調整
      LpQTabel.Refresh(EmptyParam);                   //実行
    except
      MessageBox(Handle, '取得に失敗しました.', '情報', MB_OK);
    end;
  finally
    //エクセルを起動したら各オブジェクトを切断して終了
    //このアプリも終了してしまう
    ExcelWorksheet1.Disconnect;
    ExcelWorkbook1.Disconnect;
    ExcelApplication1.Disconnect;

    //起動直後のエクセルを最前面に表示
    LhWindow := FindWindow('XLMAIN', nil);
    if LhWindow > 0 then begin
      Self.BringToFront;
      SetWindowPos(LhWindow, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE);
    end;

    Close;
  end;
end;

end.