初めまして。tom-007です。
Delphiを勉強し始めて1ヶ月がたち、立ち止まってしまいました。
COM ユーティリティに属するCreateOleObject関数を使用して、
エクセル機能の「形式を選択して貼り付け」と同じ動作を
実現したいのですが、シートのコピー自体は実現できたのですが、
形式を指定してシートのコピーをできません。
現在、コピー元のエクセルファイルのセルには
自動リンクが設定してある関係上、
形式を選択して貼り付け(値のみ)
形式を選択して貼り付け(書式のみ)
という動作を実現したいのですが、どのようにすればよろしいのでしょうか?
どなたかご教授お願い致します。
尚、開発環境は
[ OS ]Windows2000
[delphi]delphi5
[Office]2000
です。
以下にソースを記載します。
-------------------------------
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;
レスがつかないようなのでこんな感じです。
const
xlPasteValues = -4163;
xlPasteFormats = -4122;
begin
// 値の貼付け
ToSheet.Cells[1,1].PasteSpecial(xlPasteValues);
// 書式の貼付け
ToSheet.Cells[2,1].PasteSpecial(xlPasteFormats);
end;
ツイート | ![]() |