Ecxcelの操作につきまして

解決


moocho  2009-05-25 11:52:45  No: 34516  IP: 192.*.*.*

こんにちは、久々に教えて頂きたい事が出てきました。

以下のソースで動作させていますが、
BtnCellPut1Clickでセルに書き込みますと問題なく終了出来るのですが
手入力でセルに書き込みますと終了時エラーになります。

いろいろと調べましたが原因がわかりません。

ご存知の方がいらっしゃいましたら、よろしくお願いいます。

//---------------------------------------------------
【環境】
WindowsXP/Delphi5.0

//---------------------------------------------------
uses
  〜略
  Excel97, OleServer ,ActiveX ,comobj
  〜略
  ;

各Excel関連変数は宣言済

//---------------------------------------------------
procedure TForm1.FormShow(Sender: TObject);
begin
  CoInitialize(nil);

  E_Excel :=  CreateOleObject('Excel.Application');
  E_App   :=  E_Excel.Application;
  E_App.Visible := false;

  E_App.WorkBooks.Open(FileName:='abcd.xls');
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  E_App.Workbooks[1].saved := true ;
  E_App.Workbooks[1].close ;

  E_Excel.Quit;
  E_Excel := Unassigned;

  CoUninitialize ;
end;

procedure TForm1.BtnCellPut1Click(Sender: TObject);
begin
  ExcelWorkbook1.ConnectTo(ExcelApplication1.ActiveWorkbook as _workbook);
  ExcelWorkSheet1.ConnectTo(ExcelWorkbook1.Worksheets['Sheet1'] as _worksheet);
  ExcelWorksheet1.Range['a10','a10'].Value := 'xxxxxx';
end;

編集 削除
moocho  2009-05-25 13:42:28  No: 34517  IP: 192.*.*.*

自己レスです。

どうも、ソースが混ざって処理されていたようで以下のように
したらOKでした。

お騒がせしました。

//---------------------------------------------------
const
  lcid: DWORD =LOCALE_SYSTEM_DEFAULT;

type
  TForm1 = class(TForm)

    ExcelApplication1: TExcelApplication;
    ExcelWorksheet1: TExcelWorksheet;
    ExcelWorkbook1: TExcelWorkbook;

  〜略

procedure TForm1.FormShow(Sender: TObject);
begin
  ExcelApplication1.Workbooks.Open('abcd.xls',
                    EmptyParam,EmptyParam,EmptyParam,
                    EmptyParam,EmptyParam,EmptyParam,
                    EmptyParam,EmptyParam,EmptyParam,
                    EmptyParam,EmptyParam,EmptyParam,lcid);

  ExcelApplication1.Visible[lcid]:=True;
  ExcelWorkbook1.ConnectTo(ExcelApplication1.ActiveWorkbook as _workbook);
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  if ExcelApplication1.Visible[lcid] then begin
     ExcelWorkSheet1.Disconnect;
     //ExcelWorkbook1.Close(save引数,EmptyParam,False,lcid);   // save引数  true:保存  false:しない
     ExcelWorkbook1.Close(true,EmptyParam,False,lcid);
     Application.ProcessMessages;
     ExcelWorkbook1.Disconnect;
  end;
  if ExcelApplication1<>nil then begin
     ExcelApplication1.Quit;
     ExcelApplication1.Disconnect;
  end;
end;

procedure TForm1.BtnCellPut1Click(Sender: TObject);
begin
  ExcelWorkbook1.ConnectTo(ExcelApplication1.ActiveWorkbook as _workbook);
  ExcelWorkSheet1.ConnectTo(ExcelWorkbook1.Worksheets['Sheet1'] as _worksheet);
  ExcelWorksheet1.Range['a10','a10'].Value := 'xxxxxx';
end;

編集 削除
moocho  2009-05-25 13:43:44  No: 34518  IP: 192.*.*.*

チェック忘れました。

編集 削除