エクセルファイルのシートを別ファイルに形式を指定してコピーするには?


tom-007  2005-01-27 03:09:46  No: 12887

初めまして。tom-007です。
Delphiを勉強し始めて1ヶ月がたち、立ち止まってしまいました。

COM ユーティリティに属するCreateOleObject関数を使用して、
エクセル機能の「形式を選択して貼り付け」と同じ動作を
実現したいのですが、シートのコピー自体は実現できたのですが、
形式を指定してシートのコピーをできません。

現在、コピー元のエクセルファイルのセルには
自動リンクが設定してある関係上、

形式を選択して貼り付け(値のみ)
形式を選択して貼り付け(書式のみ)

という動作を実現したいのですが、どのようにすればよろしいのでしょうか?
どなたかご教授お願い致します。

尚、開発環境は
[  OS  ]Windows2000
[delphi]delphi5
[Office]2000

です。


tom-007  2005-01-27 03:10:42  No: 12888

以下にソースを記載します。

-------------------------------
  private
    { Private 宣言 }
    Excel      : Variant;
    NewExcel   : Variant;
    FromBook   : Variant;
    ToBook     : Variant;
    FromSheet  : Variant;
    ToSheet    : Variant;
-------------------------------
・・・
-------------------------------------------------------------------------------------
procedure TForm1.FormShow(Sender: TObject);
begin
  try
    Excel := CreateOleObject('Excel.Application');
    Excel.DisplayAlerts := False ;
    Excel.Visible := false;

    NewExcel := GetActiveOleObject('Excel.Application');
    NewExcel.DisplayAlerts := False ;
    NewExcel.Visible := false;
  except
    //Excelがインストールされてなかった場合の終了処理
    on EOleSysError do begin
      showmessage('Excelがインストールされていないと使えません');
      WindowState := wsMinimized;
      Application.Terminate();
      Exit;
    end;
  end;
end;
-------------------------------------------------------------------------------------
・・・
-------------------------------------------------------------------------------------
{コピー開始実行時処理}
procedure TForm1.Button2Click(Sender: TObject);
var
  sFileName : string;
  sFileDir  : string;
  Aftertmp  : Variant;
  sPath     : string;
  sSaveFile : string;
begin
  sPath := 'D:\Before.xls';

  try
    //コピー元のファイルの読み込み 
    FromBook  := Excel.WorkBooks.Open(FileName := sPath, readOnly := False);
    FromSheet := FromBook.WorkSheets[2];

    //コピー先のファイルの新規作成
    ToBook  := NewExcel.WorkBooks.Add;
    ToSheet := ToBook.WorkSheets[1];

    Aftertmp := ToSheet;
  //シートのコピー
    FromBook.WorkSheets[2].Copy(After := Aftertmp);

    sSaveFile := 'D:\after.xls';
    if FileExists(sSaveFile) then DeleteFile(sSaveFile);
    ToBook.SaveAs(sSaveFile);
  finally
    ToSheet.Columns[2].EntireColumn.AutoFit;
    ToSheet:=unAssigned;

    ToBook.close;
    ToBook:=unAssigned;

    FromSheet.Columns[2].EntireColumn.AutoFit;
    FromSheet:=unAssigned;
    FromBook.close;
    FromBook:=unAssigned;

    Excel.Quit;
    Excel:=unAssigned;

    NewExcel.Quit;
    NewExcel:=unAssigned;
  end;
end;


Basser  2005-01-27 19:57:29  No: 12889

レスがつかないようなのでこんな感じです。

  const
    xlPasteValues  = -4163;
    xlPasteFormats = -4122;

  begin
    // 値の貼付け
    ToSheet.Cells[1,1].PasteSpecial(xlPasteValues);
    // 書式の貼付け
    ToSheet.Cells[2,1].PasteSpecial(xlPasteFormats);
  end;


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

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






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