2017-08-16 9 views
0

質問があります。私は私がテキストボックスに入れたパスからのxlsxをロードするためのコードを持っているし、私のコードは次のようになります。C#プロジェクトフォルダからファイルをロード

string PathConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + safefilename.Text + ";Extended Properties=Excel 12.0;"; 
OleDbConnection conn = new OleDbConnection(PathConn); 
OleDbDataAdapter myDataAdapter = new OleDbDataAdapter("SELECT * FROM [" + textBox_sheet.Text + "$]", conn); 

DataTable dt = new DataTable(); 

myDataAdapter.Fill(dt); 
dataGridView1.DataSource = dt; 

は、プロジェクトディレクトリからのDataGridViewにXLSXロードする方法はありますか?だから私は別のコンピュータに切り替える場合でも毎回パスを入れる必要はありません。

+0

正確にプロジェクトディレクトリとは何か?最後にあなたの '* .exe'ファイルがあるonwは?またはVS-Projectディレクトリの最初のレベルについて話していますか? –

+0

たとえば、xlsxファイルを\ program \ obj \ x86 \ Debug \ TempPEに入れた場合 プロジェクトフォルダ内 –

答えて

0

実行中のディレクトリは、現在のディレクトリ(.\)になります。

実行ファイルをデバッグする場合はbin\Debugフォルダーにあります。

string PathConn = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=..\..\" + safefilename.Text + ";Extended Properties=Excel 12.0;"; 

、あなたのアプリケーションの実行可能ファイルを移動したときにこれは動作しません、..\..\は2つのだけのレベルアップディレクトリ階層のディレクトリを参照:あなたのプロジェクトディレクトリはパス..\..\を持っています。

xlsxファイルを実行可能ファイルと同じディレクトリに置くことをお勧めします。これは、実行可能ファイルを移動するときに維持しやすくするためです。

xlsxファイルをAppDataのディレクトリに保存することをお勧めします。アプリケーションをインストールするときにファイルを移動することができます。その後、これを行うことによって、ディレクトリへの参照を取得することができます:

Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "MyApplication"); 

は、これであなたを残し:

string PathConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "MyApplication", safefilename.Text) + ";Extended Properties=Excel 12.0;"; 
+0

ありがとう、ありがとう。 –

関連する問題