2011-02-14 28 views
11

Quiero leer el archivo Excel ya abierto con C#. Estoy usando este método pero no puede leer el archivo Excel mientras el archivo está abierto en Microsoft Excel.Cómo leer el archivo abierto de Excel en C#

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

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

espero que entienda lo que quiero decir. Quiero mantener el archivo Excel abierto y mientras el archivo esté abierto en Microsoft Excel, quiero leerlo desde C#. Estoy usando C# NET Framework 4.0

+3

No puede si el archivo se abre en otro proceso –

+0

¿Está seguro de que no hay ninguna manera de lograr eso? – MonsterMMORPG

+0

Qué tal: http://support.microsoft.com/kb/316126 – Fionnuala

Respuesta

6

creo que todavía se puede copiar el archivo de Excel mientras tiene abierto, por lo que podría hacer una copia del archivo y abra eso. Solo asegúrese de limpiar después de usted mismo cuando haya terminado con la copia.

+0

sí, esta podría ser la solución :) – MonsterMMORPG

+1

esto resuelve el problema fácilmente gracias :) – MonsterMMORPG

+2

No, esta no es la solución. Está aquí: http://stackoverflow.com/a/898017/48082 – Cheeso

0

Para asegurar que abren y cierran correctamente del archivo por favor vaya a usar el C# usando declaraciones

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

} 
+0

¿entendiste lo que estoy pidiendo? No quiero cerrar Excel y si el archivo está abierto en Microsoft Office Excel, quiero leerlo en mi C# – MonsterMMORPG

0

Puede probar la File.Open con un cuarto parámetro - fileshare.

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

Es posible que deba especificar el acceso de escritura también.

+0

. Aún así aparece el error – MonsterMMORPG

+0

Esto se debe a que necesitas abrirlo con FileShare.ReadWrite - ver http://stackoverflow.com/questions/897796/how-do-i-open-an-already-open-file-with-a-net-streamreader/898017 # 898017 – splintor

3

Puede usar la biblioteca de Interop para usar la instancia ya abierta de Excel.

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

¿Qué espacio de nombres necesito para esto? – MonsterMMORPG

+0

Microsoft.Office.Interop Para obtener más información solo busque "automatización de Excel" en google. Un montón de información en la red ;-) – Koen

+0

Notado la otra respuesta. Copiar el archivo es de hecho una manera mucho mejor aquí ;-) – Koen

16

Necesitas abrirlo con FileShare.ReadWrite:

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

Ver this answer.

+0

+1 ¡La mejor respuesta! – Warlock

+0

Esto no funciona para mí, sigue recibiendo el mismo mensaje de error. – jcubero

0

Para abrir el mismo archivo más de una vez al mismo tiempo, debe abrirse en modo compartido.

Espero que esto ayude a los demás.