Avatar billede f2f4 Novice
09. februar 2004 - 12:44 Der er 2 kommentarer og
1 løsning

Opret Excel fil - proces excel.exe driller

Jeg har fundet og tilrettet noget kode hvor jeg opretter et Excel dokument (via. MyOleVariant:= CreateOleObject('Excel.Application')) udfylder nogle af cellerne og gemmer det.

Det virker fint, bortset fra at jeg efterfølgende ikke kan dobbeltklikke på en xls fil, skærmen bliver da ikke opdateret og det fremgår somom Excel 'hænger'. Men Excel virker fint hvis jeg åbner det og går via 'file, open' for at åbne mit nyoprettede excel dokument.

Efter at have kørt mit kode (der opretter og udfylder en xls fil) fremgår excel.exe stadig af min liste over kørence processer, - hvis jeg 'slår den ihjel' manuelt virker det med dobbeltklik igen!

Noget tyder da på jeg ikke får ryddet pænt op, men jeg har kaldt diverse oprydningt metoder på MyOleVariant objektet.

Er der nogle der kender til dette og kan give mig et hint?

På forhånd tak.
Avatar billede pzw Nybegynder
09. februar 2004 - 14:00 #1
Hej
Jeg har lavet noget tilsvarende med Excel og jeg afslutter med følgende 3 linier, så går det ok.   
Excel.WorkBooks.Close;
Excel.Quit;
Excel:=Unassigned;
Avatar billede f2f4 Novice
10. februar 2004 - 10:36 #2
Samme fejl!?

Mit 'startkode':
    xlApp,
    ActiveWorkbook,
    ActiveWorksheet : OleVariant;

::

Function TMSExcel.Connect : Boolean;
Var
  App : IUnknown;
begin
  Result := False;
  Try
    if not Succeeded(GetActiveObject(StringToGUID('{00024500-0000-0000-C000-000000000046}'), nil, App)) then
      xlApp := CreateOleObject('Excel.Application')
    else
      xlApp := App As IDispatch;
    if VarIsEmpty(xlApp) then
      Raise EMSExcelException.Create(SExcelNotFound);

    xlApp.Visible := False;
    xlApp.SheetsInNewWorkbook := 1;
    xlApp.DisplayAlerts := FDisplayAlerts;
    AddWorkbook;
    ActiveWorksheet := ActiveWorkbook.ActiveSheet;
    ActiveWorksheet.Activate;
    Result := True;
  Except
    on E:Exception do
    begin
      ErrorMessageDialog('TMSExcel.Connect', E.Message);
    end;
  end;
end;

Mit 'slutkode':
Function TMSExcel.Disconnect : Boolean;
begin
  Result := True;
  Try
    if not VarIsEmpty(xlApp) then
    begin
      if xlApp.Visible then
      begin
        ScreenUpdate(False);
        xlApp.Visible := True;
        ScreenUpdate(True);
      end;
//      xlApp.Quit;
//      xlApp.Disconnect;
//      VarClear(xlApp);
xlApp.WorkBooks.Close;
xlApp.Quit;
xlApp:=Unassigned;
    end;
  Except
    on E:Exception do
    begin
      Result := False;
      ErrorMessageDialog('TMSExcel.Disconnect', E.Message);
    end;
  end;
end;
Avatar billede f2f4 Novice
17. februar 2004 - 13:34 #3
Der var ikke ryddet pænt op!
VarClear skulle kaldes for alle ole-variable!
Spørgsmål lukkes
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester