2010-10-05 5 views
0

J'ai le code en C# comme ceci.Lecture Excel en C#

xlWorkBook = xlApp.Workbooks.Open("data.xls", 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0); 

J'ai un fichier data.xls où se trouvent les fichiers .exe.

Lorsque je compile puis exécute .exe, je reçois une erreur que data.xls n'a pas pu être trouvé.

Qu'est-ce que je fais mal?

+0

Avez-vous essayé le chemin absolu? – Nayan

+0

Où avez-vous enregistré data.xls? – jjnguy

+0

@Toktic, Vous recevez probablement des erreurs de compilation à cause des barres obliques inverses \. Essayez de mettre le signe @ devant la chaîne et cela devrait être OK. par exemple. @ "c: \ whatever \ data.xls" –

Répondre

2

Si votre xls sera toujours au même endroit que votre .exe, vous pouvez l'utiliser pour obtenir un chemin qui ne sera pas dans le répertoire hardcoded de construction:

string directory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); 
string path = Path.Combine(directory, "data.xls"); 
+0

Bonne réponse .. mais probablement pas ce que OP a demandé !!?! =) – Nayan

+0

@Nayan, j'ai pensé que son problème d'origine n'utilisait pas @, et que l'erreur spécifiée dans le post (le fichier n'existe pas) était parce qu'il n'utilisait pas un chemin absolu. D'autres avaient déjà répondu qu'il recommandait d'utiliser un chemin absolu, et je voulais juste le fournir afin qu'il puisse exécuter son application à partir de différents dossiers sans que le chemin xls soit codé en dur. –

+0

C'est vrai, mais il semble qu'il veut un chemin relatif maintenant. =) – Nayan

0

Tout dépend de la manière dont vous exécutez votre application. Qu'est-ce qui vous fait penser que cette application est exécutée dans le même répertoire que le fichier exécutable? Vous avez probablement oublié de définir correctement le répertoire de travail. Comment faire? Voir this Q&A.

+0

J'ai mis le répertoire de travail du projet à bin/release ... Et rien. –

+0

Ce n'est pas pertinent. – Nayan

1

Sauf si vous avez modifié les paramètres de votre projet, lorsque votre application C# est créée, elle est créée dans un dossier bin/debug (ou bin/release) sous votre projet. Lorsque vous exécutez à partir de l'IDE, c'est le répertoire de travail actuel pour votre application. Essayez d'utiliser un chemin absolu ou déplacez le fichier data.xls dans le dossier bin/debug de votre application.

Lorsque vous spécifiez le chemin absolu, assurez-vous de préfixer la chaîne avec un signe @ pour sortir des barres obliques. chaîne de caractères = @ "c: \ data \ excel \ data.xls";

MISE À JOUR: Si vous devez utiliser un chemin relatif, je recevrais le chemin absolu sur la base du patht relatif de cette façon:

FileInfo fileInfo = new FileInfo("data.xls"); 
String path = fileInfo.FullName; 

Cela pourrait être préférable d'obtenir le chemin complet sur la base. exe, car cela fonctionnera même si le CWD n'est pas le même que l'emplacement .exe. Je pense que c'est un problème avec l'emplacement du fichier Excel.

+0

chemin absolu travaillé .. Mais ce n'est pas applicable. J'ai besoin de relatif. –

+0

Vous pourriez essayer d'utiliser "./data.xls", mais si vous avez besoin de le trouver dans le CWD, je l'essayer en utilisant la réponse d'adrift. –

+0

Cette réponse mise à jour pourrait mieux fonctionner pour vous que la réponse de dérive, car elle fonctionnerait à partir de la CWD, où qu'elle soit, pas seulement le chemin exe. –

0

le répertoire de travail de l'application n'est pas où le fichier .exe se trouve, mais probablement dans le dossier bin/debug.

+0

J'ai copié data.xls dans tous les repertoires qui ont un projet .. Rien n'a fonctionné. –

1

Par défaut, Excel suppose que le dossier du fichier spécifié est le répertoire "Mes documents" de l'utilisateur. Si le fichier n'est pas là, toute tentative d'ouverture échouera.

En spécifiant un chemin absolu vers le fichier, vous pouvez vous assurer que le fichier correct est sélectionné. Assurez-vous que le fichier existe.

EG-

//file is in D:\TestFolder, and its called abc.xlsx 
xlApp.Workbooks.Open(@"D:\TestFolder\abc.xlsx", .... 

Hope it helps.

D'autres réponses vous montrent comment utiliser le chemin absolu vers le fichier qui est conservé à certains emplacements.

+0

Si vous voulez un chemin relatif, alors vous savez comment créer un chemin relatif en sachant quel est le dossier par défaut. – Nayan