Delphi Programming / Object Pascal
サイトのトップページへ リンクのページへ ロゴマーク
[掲載 2009年05月26日] [更新 2013年12月16日] エクセル操作フォームEx
エクセル操作フォームEx   参考コード類
CSV ファイルへの保存
動作確認等 Windows 7 U64(SP1) + Delphi XE Pro + Excel 2010







CSV ファイルへの保存


現在アクティブで操作対象のシートの内容を,CSVファイルとして保存する例です.

古いエクセルでは同名のファイルは上書き保存はできないため,同名のファイルを削除する必要がありました.このことはマイクロソフトのサイトにも説明がありました.
Excel 2000, Excel 2007, Excel 2010 ではこの現象は発生しないようです.他のバージョンでは確認していません.


procedure TplExcelFormEx1.Button1Click(Sender: TObject);
var
  AFilePath: String;
begin
  SaveDialog1.Filter := 'CSVファイル|*.csv';

  SaveDialog1.InitialDir := ExtractFilePath(Application.ExeName);
  if SaveDialog1.Execute then begin
    AFilePath := SaveDialog1.FileName;

    xlfExcelSheet.SaveAs(AFilePath,
                          xlCSV,
                          EmptyParam,
                          EmptyParam,
                          EmptyParam,
                          EmptyParam,
                          EmptyParam,
                          EmptyParam,
                          EmptyParam,
                          0);
  end;
end;




OleVariant 型を使用する方法


TExcelWorkBook を使用した上のコードでは,SaveAs メソッドの引数が省略できません. TExcelWorkBook を OleVariant 型の変数に置き換えて処理すれば,下のコードのように,引数を省略できます.


procedure TplExcelFormEx1.Button2Click(Sender: TObject);
var
  objExcelSheet : OleVariant;
  pFilePath     : OleVariant;
  pFileFormat   : OleVariant;
begin
  pFilePath := ExtractFilePath(Application.ExeName) + 'ExcelTest.csv';

  //xlfExcelBook(TExcelWorkBook)をOleVariant型にして扱うとVBA的な使い方が可能
  objExcelSheet := xlfExcelApp.ActiveWorkbook;

  //保存形式の指定(xlCSVlはCSV形式保存)
  pFileFormat := xlCSV;

  try
    objExcelSheet.SaveAs(pFilePath, pFileFormat);
    //保存したことにする
    xlfExcelBook.Saved[0] := True;
    //キャプションの表示を変更しておく
    Self.Caption := xlfExcelBook.Name;
  except
  end;
end;




上書き保存確認ダイアログの表示抑制


エクセルのデフォルトの設定では,同名のファイルがあると,下図のように「... という名前のファイルが既にあります。置き換えますか」という警告のダイアログが表示されようになっています.

このダイアログは,DisplayAlerts プロパティの値を False にすると抑制できます.ただし,この設定は,全ての警告ダイアログを表示しなくなります.


エクセル操作フォーム 図1

procedure TplExcelFormEx1.Button3Click(Sender: TObject);
begin
  xlfExcelApp.DisplayAlerts[0] := False;
end;