2017-08-16 2 views
0

J'ai une question. J'ai un code pour charger xlsx de chemin que je mets dans mon code TextBox et ressemble à ceci:C# Charger le fichier du dossier du projet

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; 

Est-il possible de charger xlsx à datagridview du répertoire du projet? Donc je ne dois pas mettre le chemin chaque fois même si je passe à un autre ordinateur.

+0

ce qui est exactement le répertoire du projet? l'où vous avez votre fichier '* .exe' à la fin? ou parlez-vous du premier niveau du répertoire VS-Project? –

+0

Par exemple si je mets mon fichier xlsx ici: \ program \ obj \ x86 \ Debug \ TempPE dans les dossiers du projet –

Répondre

0

Lors de l'exécution de l'application, le répertoire dans lequel l'exécutable se trouve sera le répertoire en cours (.\).

Lorsque le débogage de l'exécutable se trouve dans le dossier bin\Debug. Votre répertoire de projet a le chemin ..\..\:

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

Cela ne fonctionnera pas lorsque vous déplacez l'exécutable de votre application, ..\..\ se réfère uniquement au répertoire deux niveaux dans la hiérarchie des répertoires.

Vous souhaiterez probablement soit placer le fichier xlsx dans le même répertoire que l'exécutable, car cela est plus facile à maintenir lors du déplacement de l'exécutable.

Ma solution préférée serait de conserver le fichier xlsx dans AppData dans un répertoire pour votre application. Vous pouvez y déplacer le fichier lors de "l'installation" de l'application. Vous pouvez alors obtenir une référence au répertoire en faisant ceci:

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

vous laissant avec ceci:

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

Merci beaucoup. –