Ścieżka relatywna (względna)

0

Dobry wieczór,

Może ktoś wyjaśnić mi jak mam ustawić ścieżkę względną do pliku *.xlsx, z którego odczytuję dane?
Konstrukcja jak poniżej działa bez problemu:

            xlWorkBook = xlApp.Workbooks.Open(@"C:\AT Command list.xlsx", 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);

Jednak gdy kopiuję plik AT Command list.xlsx do katalogu \bin\Debug i ustawiam

            xlWorkBook = xlApp.Workbooks.Open(@"C:\AT Command list.xlsx", 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);

przy kompilacji pojawia się błąd:

Wystąpił wyjątek System.Runtime.InteropServices.COMException
HResult=0x800A03EC
Message=Nie można odnaleźć pliku CAT Command list.xlsx. Czy został on przeniesiony lub usunięty albo zmieniono jego nazwę?
Source=Microsoft Excel
Ślad stosu:
<Nie można ocenić danych śledzenia>

Nie bijcie za polski język Visual Studio

0

Jak jest tam gdzie .exe (czyli \bin\Debug) to wystarczy nazwa w pliku.

0

Załóżmy, że mamy folder deploy, a w nim nasze .exe i folder data z plikiem items.xml

Ścieżka relatywna do items.xml względem execa np:

data\items.xml

Ścieżka absolutna jest "na chłopski rozum" np. z literą dysku.

c:\deploy\data\items.xml

title

0
atmal napisał(a):

Jak jest tam gdzie .exe (czyli \bin\Debug) to wystarczy nazwa w pliku.

Jest, ale jak widać nie wystarcza.

WeiXiao napisał(a):

Załóżmy, że mamy folder deploy, a w nim nasze .exe i folder data z plikiem items.xml

Ścieżka relatywna do items.xml względem execa np:

data\items.xml

Ścieżka absolutna jest "na chłopski rozum" np. z literą dysku.

c:\deploy\data\items.xml

title

Mam w tym samym katalogu plik exe i xlsx i ta konstrukcja nie chce działać

error.png

1

Spróbuj w takim razie zrobić

string path = System.IO.Path.GetFullPath("AT Command list.xlsx");
xlWorkBook = xlApp.Workbooks.Open(path, /* reszta */);
0

@SweetDreams:
tzw. "u mnie działa"

test.PNG

string file = @"test1.txt";
string file2 = @"temp\test2.txt";

Process process1 = new Process();
process1.StartInfo.FileName = file;
process1.Start();

Process process2 = new Process();
process2.StartInfo.FileName = file2;
process2.Start();

if (process1.HasExited)
{
    Console.WriteLine("Exited.");
}
else
{
    Console.WriteLine("Process1's Running.");
}

if (process2.HasExited)
{
    Console.WriteLine("Exited.");
}
else
{
    Console.WriteLine("Process2's Running.");
}
Console.ReadKey();
0
atmal napisał(a):

Spróbuj w takim razie zrobić

string path = System.IO.Path.GetFullPath("AT Command list.xlsx");
xlWorkBook = xlApp.Workbooks.Open(path, /* reszta */);

Dziękuję. Taka konstrukcja działa :)

1

@WeiXiao:
Problem leży w tym że dla programu Current Working Directory (CWD) to ten w którym się znajduje (wiadomo), ale dla Excel'a CWD jest inne i z tego powodu potrzebuje absolutnej ścieżki do pliku.

1 użytkowników online, w tym zalogowanych: 0, gości: 1