2011-02-14 5 views
11

Je veux lire le fichier Excel déjà ouvert avec C#. J'utilise cette méthode, mais il ne peut pas lire le fichier Excel alors que le fichier est ouvert dans Microsoft Excel.Comment lire le fichier Excel ouvert au C#

FileStream stream = File.Open("myfile.xlsx", FileMode.Open, FileAccess.Read); 

Il donne IOException: The process cannot access the file 'myfile.xlsx' because it is being used by another process.

J'espère que comprend ce que je veux dire. Je veux garder le fichier Excel ouvert et tandis que le fichier est ouvert à Microsoft Excel, je veux le lire à partir de C#. J'utilise C# NET Framework 4.0

+3

Vous ne pouvez pas si le fichier est ouvert par un autre processus sur –

+0

Etes-vous sûr qu'il n'y a aucun moyen de achive qui? – MonsterMMORPG

+0

Que diriez-vous de: http://support.microsoft.com/kb/316126 – Fionnuala

Répondre

6

Je pense que vous pouvez toujours copier le fichier Excel en a ouvert, pour que vous puissiez faire une copie du fichier, puis ouvrez que. Assurez-vous de nettoyer après vous quand vous avez fini avec la copie.

+0

oui cela pourrait être la solution :) – MonsterMMORPG

+1

cela résout le problème facilement merci :) – MonsterMMORPG

+2

Non, ce n'est pas la solution. C'est ici: http://stackoverflow.com/a/898017/48082 – Cheeso

0

Pour vous assurer que l'ouverture correcte et la fermeture du fichier s'il vous plaît regarder à l'aide du C# en utilisant des déclarations

using (FileStream stream = File.Open("myfile.xlsx", FileMode.Open, FileAccess.Read)) 
{ 

} 
+0

avez-vous compris ce que je demande? Je ne veux pas fermer Excel et tandis que le fichier est ouvert à Microsoft Office Excel, je veux le lire à mon C# – MonsterMMORPG

0

Vous pouvez essayer le File.Open avec un quatrième paramètre - FileShare.

FileStream stream = File.Open("myfile.xlsx", FileMode.Open, FileAccess.Read, FileShare.Read); 

Vous devrez peut-être également spécifier un accès en écriture.

+0

donne toujours une erreur – MonsterMMORPG

+0

C'est parce que vous devez l'ouvrir avec FileShare.ReadWrite - voir http://stackoverflow.com/questions/897796/how-do-i-ouvrir-un-fichier-ouvert-déjà-avec-un-stream-streamer/898017 # 898017 – splintor

3

Vous pouvez utiliser la bibliothèque Interop pour utiliser l'instance déjà ouverte d'Excel.

oExcel == (Excel.Application) System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application") 
+0

de quel espace de noms ai-je besoin pour ceci? – MonsterMMORPG

+0

Microsoft.Office.Interop Pour plus d'informations, recherchez simplement "Excel Automation". Beaucoup d'infos sur le net ;-) – Koen

+0

Remarqué l'autre réponse. Copier le fichier est en effet un bien meilleur moyen ici ;-) – Koen

16

Vous devez l'ouvrir avec FileShare.ReadWrite:

FileStream stream = File.Open("myfile.xlsx", FileMode.Open, FileAccess.Read, FileShare.ReadWrite); 

Voir this answer.

+0

+1 La meilleure réponse !!! – Warlock

+0

Cela ne fonctionne pas pour moi toujours obtenir le même message d'erreur. – jcubero

0

Pour ouvrir le même fichier plus d'une fois en même temps, il doit être ouvert en mode partagé.

Espérons que cela puisse aider les autres.