Avatar billede pzw Nybegynder
04. maj 2011 - 16:28 Der er 11 kommentarer og
1 løsning

Sætte directory

Hej

Hvordan sætter jeg det directory som der automatisk åbnes filer i.
Eksempel som ikke kan kombileres:
SetDirectory:='C:\hest';

Jeg skal bruge det fordi der er en lang sti og et langt filnavn, hvilket kommandoen Excel.Workbooks.Open(.....) desværre ikke supporterer, så den ikke kan åbne filen.

/Peter
Avatar billede pzw Nybegynder
04. maj 2011 - 16:28 #1
Hej

Jeg bruger Delphi XE.

/Peter
Avatar billede martinlind Nybegynder
04. maj 2011 - 18:22 #2
chdir('C:\');
Avatar billede hrc Mester
04. maj 2011 - 18:24 #3
... men har vist ikke gjort det længe (brugt XE) :-). Mener proceduren hedder SetDir('c:\testkat');

Hvis du skal sætte kataloget til samme som programmet kan du gøre noget i denne retning:

SetDir(ExtractFileDir(Application.ExeName));

... alt sammen udfra hukommelsen så det kan godt være du skal lave lidt selv.
Avatar billede hrc Mester
04. maj 2011 - 18:34 #4
Naturligvis, Martin. Der er også: SetCurrentDir(const Dir: string): Boolean
Avatar billede pzw Nybegynder
09. maj 2011 - 09:24 #5
Hej

Se nedenstående eksempel.

Button1 virker ikke og Button2 virker.

Problemet er at kald Excel.Workbooks.Open(Str2) fejler når Str2 bliver for lang, fordi Excel filerne jeg skal læse ligger dybt i directory strukturen på serveren.
Jeg vil forsøge at sætte default directory til det directory hvor filerne ligger, så Str2 kun bliver filnavnet.
Alternativt kan jeg kopiere filerne til eks. C-drevet og læse dem derfra med Excel.Workbooks.Open(Str2), men det virker noget knoklet.

/Peter



unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  ComObj,  { Tilføjet }
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ ***** Virker ikke ***** }
procedure TForm1.Button1Click(Sender: TObject);
  Var
    Str1, Str2: String[255];
    Excel:      Variant;

begin
    Str1:='C:\Hest';
    SetCurrentDir(Str1);

    Str2:=GetCurrentDir;
    Showmessage(Str2);    { Viser current directory er C:\Hest }

    Str2:='Hest.xls';
    Excel:=CreateOleObject('Excel.Application');
    Excel.Workbooks.Open(Str2);
    Excel.Visible:=True;
end;

{ ***** Virker ***** }
procedure TForm1.Button2Click(Sender: TObject);
  Var
    Str2:      String[255];
    Excel:      Variant;

begin

    Str2:='C:\Hest\Hest.xls';
    Excel:=CreateOleObject('Excel.Application');
    Excel.Workbooks.Open(Str2);
    Excel.Visible:=True;
end;

end.
Avatar billede hrc Mester
09. maj 2011 - 11:13 #6
Først skal du droppe de statiske strenge. Der er ingen der bruger string[<et eller andet tal mellem 1 og 255>] længere; bare skriv "string;" Så er du i alt fald ikke bundet af grænser der.

Den anden ting er at du kan arbejde med relative stier. Skift til kataloget og skift relativt i forhold til det. Så slipper du for lange trælse stier.
Avatar billede pzw Nybegynder
27. maj 2011 - 08:46 #7
Hej

Problemet er at eks. Excel.ActiveWorkbook.SaveAs('PruHest.xls') ikke ikke følger CurrentDirectory men skal specificeres præcis.
Avatar billede pzw Nybegynder
27. maj 2011 - 08:46 #8
Jeg lukker, tak.

/Peter
Avatar billede hrc Mester
27. maj 2011 - 09:25 #9
Har du prøvet med dynamiske strenge?

procedure TForm1.OpenWorkBook(aFilename: string);
var
  Excel: Variant;
begin
  Excel:=CreateOleObject('Excel.Application');
  Excel.Workbooks.Open(aFilename);
  Excel.Visible:=True;
end;
Avatar billede pzw Nybegynder
27. maj 2011 - 20:45 #10
Hej hrc,

Jeg gør præcis som du skriver, problemet er at filerne ligge så dybt i directory strukturen på serveren at Excel.Workbooks.Open(aFilename); ikke kan håndtere det.
Jeg har valgt den alternetive løsning at lade mit program kopiere Excel filen til C: drevet og derefter bruge Excel.Workbooks.Open(aFilename); fra C: drevet.
Det tager måske 5 sek. ekstra de få gange om ugen den funktion bruges (Åbner flere Excel filer), så det betyder ikke noget.

/Peter
Avatar billede hrc Mester
28. maj 2011 - 08:46 #11
Hvis data ligger på et netværksdrev kan du måske mappe et drev op som starter inde i træet. Det afhænger naturligvis af graden af frihed på nettet. Der findes jo den irriterende persontype, kaldet netværksadministratorer, som ikke mener at nogen anden end dem (og især ikke jeg) skal have rettighed til noget som helst :-)
Avatar billede pzw Nybegynder
28. maj 2011 - 09:50 #12
Hej hrc,

God ide, det havde jeg ikke lige tænkt over, har fundet en stump kode som kan mappe et drev, prøver det.

/Peter
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