2つのExcelファイルのそれぞれのシートを取得して保存するには

解決


cocomo  2009-04-21 08:16:01  No: 34159

こんばんは。
過去ログを探しましたが、見当たらなかったので質問させてください。

それぞれデータの入っている、Book1.xls(Sheet1)とBook2.xls(Sheet11)を
Book3.xls(Sheet1,Sheet11)に保存したいと考えています。

同一のファイル内のシートのコピーは出来るのですが、違うファイルの
シートを移す事ができず、'OLE エラー 800A03EC'になってしまいます。

それぞれシート内では関数が入っていますが、他のシートやファイルをまたぐ
関数はありません。無理なのでしょうか?
現在のソースを書き出しました。下記ソース以外でTExcelApplicationを
ExcelApplication1だけにしても同じでした。

長文ではありますが、何かヒントがあれば教えてください。

WinXP(Pro) Delphi7 Ent

var
  LCID: Integer;
begin
  ExcelApplication1.Connect;
  ExcelApplication2.Connect;
  try
    LCID := LOCALE_USER_DEFAULT;
    ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks.Open('C:\Book1.xls',
                                     EmptyParam,EmptyParam,EmptyParam,
                                     EmptyParam,EmptyParam,EmptyParam,
                                     EmptyParam,EmptyParam,EmptyParam,
                                     EmptyParam,EmptyParam,EmptyParam,
                                     EmptyParam,EmptyParam,0));
    ExcelWorkbook2.ConnectTo(ExcelApplication2.Workbooks.Open('C:\Book2.xls',
                                     EmptyParam,EmptyParam,EmptyParam,
                                     EmptyParam,EmptyParam,EmptyParam,
                                     EmptyParam,EmptyParam,EmptyParam,
                                     EmptyParam,EmptyParam,EmptyParam,
                                     EmptyParam,EmptyParam,0));

    //ここでエラー 'OLE エラー 800A03EC'
    (ExcelWorkbook1.Sheets['Sheet1'] As ExcelWorksheet).Select(EmptyParam, 0);
    //ここでシートをコピーしたい!
    (ExcelWorkbook1.Sheets['Sheet1'] As ExcelWorksheet).Copy(
      EmptyParam,
      ExcelWorkbook2.Sheets['Sheet11'] As ExcelWorksheet,
      LCID);

    ExcelWorkBook1.SaveAs('C:\Book3.xls',//Filename
                  Integer(xlNormal),    //FileFormat
                  EmptyParam,    //Password
                  EmptyParam,    //WriteResPassword
                  False,         //ReadOnlyRecommended
                  False,         //CreateBackup
                  xlNoChange,    //AccessMode
                  EmptyParam,    //ConflictResolution
                  EmptyParam,    //AddToMru
                  EmptyParam,    //TextCodepage
                  EmptyParam,    //TextVisualLayout
                  EmptyParam,    //Local
                  LCID);         //LCID
  finally
    ExcelApplication1.Disconnect;
    ExcelApplication1.Quit;
    ExcelApplication2.Disconnect;
    ExcelApplication2.Quit;
  end;
end;


cocomo  2009-04-22 03:53:56  No: 34160

自己レスです。
OpenとConnectToを別に書いて、Item[x]に数字を入れたら上手くいきました。
var
  LCID: Integer;
begin
  ExcelApplication1.Connect;
  try
    LCID := LOCALE_USER_DEFAULT;
    ExcelApplication1.Workbooks.Open('C:\Book1.xls',
                                     EmptyParam,EmptyParam,EmptyParam,
                                     EmptyParam,EmptyParam,EmptyParam,
                                     EmptyParam,EmptyParam,EmptyParam,
                                     EmptyParam,EmptyParam,EmptyParam,
                                     EmptyParam,EmptyParam,0);
    ExcelApplication1.Workbooks.Open('C:\Book2.xls',
                                     EmptyParam,EmptyParam,EmptyParam,
                                     EmptyParam,EmptyParam,EmptyParam,
                                     EmptyParam,EmptyParam,EmptyParam,
                                     EmptyParam,EmptyParam,EmptyParam,
                                     EmptyParam,EmptyParam,0);

    ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks.Item[1]);
    ExcelWorkbook2.ConnectTo(ExcelApplication1.Workbooks.Item[2]);

    (ExcelWorkbook2.Sheets['Sheet11'] As ExcelWorksheet).Copy(
      EmptyParam,
      ExcelWorkbook1.Sheets['Sheet10'] As ExcelWorksheet,
      LCID);

    DeleteFile('C:\Book3.xls');
    ExcelWorkBook1.SaveAs('C:\Book3.xls',//Filename
                  Integer(xlNormal),    //FileFormat
                  EmptyParam,    //Password
                  EmptyParam,    //WriteResPassword
                  False,         //ReadOnlyRecommended
                  False,         //CreateBackup
                  xlNoChange,    //AccessMode
                  EmptyParam,    //ConflictResolution
                  EmptyParam,    //AddToMru
                  EmptyParam,    //TextCodepage
                  EmptyParam,    //TextVisualLayout
                  EmptyParam,    //Local
                  LCID);         //LCID
  finally
    ExcelApplication1.Disconnect;
    ExcelApplication1.Quit;
  end;
end;


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

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






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